added experiment-table: refactored all frontend pages and services

This commit is contained in:
averel10
2026-03-20 06:51:49 +01:00
parent 5464eae0e9
commit 4b35e2392e
13 changed files with 1598 additions and 51 deletions

View File

@@ -9,11 +9,13 @@ export const DIALECT_LABELS: Record<string, string> = {
de: 'Deutsch',
};
export type AnnotationEntry = {
export type DatasetEntryForAnnotation = {
id: number;
externalId: string;
fileName: string;
dialect: string;
durationMs: number | null;
datasetId: number;
experimentId: number;
annotation: number | null;
};

View File

@@ -1,24 +1,34 @@
import { sqliteTable, text, integer, uniqueIndex } from 'drizzle-orm/sqlite-core';
import { relations, sql } from 'drizzle-orm';
import { dataset_entry } from './dataset_entry';
import { experiment } from './experiment';
export const annotation = sqliteTable(
'annotation',
{
id: integer('id').primaryKey({ autoIncrement: true }),
datasetEntryId: integer('dataset_entry_id')
datasetEntryId: integer('dataset_entry_id').notNull().references(() => dataset_entry.id),
experimentId: integer('experiment_id')
.notNull()
.references(() => dataset_entry.id),
.references(() => experiment.id),
userId: text('user_id').notNull(),
rating: integer('rating').notNull(), // 15
dialectLabel: text('dialect_label').notNull(), // e.g. 'ch_be', 'ch_zh', …
createdAt: integer('created_at', { mode: 'timestamp' })
.notNull()
.default(sql`(unixepoch())`),
updatedAt: integer('updated_at', { mode: 'timestamp' })
.notNull()
.default(sql`(unixepoch())`)
.$onUpdate(() => sql`(unixepoch())`),
}
);
export const annotationRelations = relations(annotation, ({ one }) => ({
experiment: one(experiment, {
fields: [annotation.experimentId],
references: [experiment.id],
}),
datasetEntry: one(dataset_entry, {
fields: [annotation.datasetEntryId],
references: [dataset_entry.id],

View File

@@ -0,0 +1,34 @@
import { sqliteTable, text, integer, uniqueIndex } from 'drizzle-orm/sqlite-core';
import { relations, sql } from 'drizzle-orm';
import { annotation } from './annotation';
import { dataset } from './dataset';
export const experiment = sqliteTable(
'experiment',
{
id: integer('id').primaryKey({ autoIncrement: true }),
name: text('name').notNull(),
description: text('description'),
datasetId: integer('dataset_id')
.notNull()
.references(() => dataset.id),
createdAt: integer('created_at', { mode: 'timestamp' })
.notNull()
.default(sql`(unixepoch())`),
updatedAt: integer('updated_at', { mode: 'timestamp' })
.notNull()
.default(sql`(unixepoch())`)
.$onUpdate(() => sql`(unixepoch())`),
}
);
export const experimentRelations = relations(experiment, ({ one, many }) => ({
dataset: one(dataset, {
fields: [experiment.datasetId],
references: [dataset.id],
}),
annotations: many(annotation),
}));
export type Experiment = typeof experiment.$inferSelect;
export type NewExperiment = typeof experiment.$inferInsert;