feat(db): drizzle schema, migrations, and seed
This commit is contained in:
66
packages/backend/drizzle/0000_exotic_wrecker.sql
Normal file
66
packages/backend/drizzle/0000_exotic_wrecker.sql
Normal file
@@ -0,0 +1,66 @@
|
||||
CREATE TABLE `attempts` (
|
||||
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
|
||||
`session_id` integer NOT NULL,
|
||||
`card_id` integer NOT NULL,
|
||||
`direction` text NOT NULL,
|
||||
`shown_at` integer DEFAULT (unixepoch()) NOT NULL,
|
||||
`result` text NOT NULL,
|
||||
`time_to_answer_ms` integer,
|
||||
FOREIGN KEY (`session_id`) REFERENCES `sessions`(`id`) ON UPDATE no action ON DELETE cascade,
|
||||
FOREIGN KEY (`card_id`) REFERENCES `cards`(`id`) ON UPDATE no action ON DELETE cascade
|
||||
);
|
||||
--> statement-breakpoint
|
||||
CREATE TABLE `card_progress` (
|
||||
`card_id` integer NOT NULL,
|
||||
`direction` text NOT NULL,
|
||||
`box` integer DEFAULT 1 NOT NULL,
|
||||
`correct_count` integer DEFAULT 0 NOT NULL,
|
||||
`incorrect_count` integer DEFAULT 0 NOT NULL,
|
||||
`last_shown_at` integer,
|
||||
`next_due_at` integer DEFAULT 0 NOT NULL,
|
||||
FOREIGN KEY (`card_id`) REFERENCES `cards`(`id`) ON UPDATE no action ON DELETE cascade
|
||||
);
|
||||
--> statement-breakpoint
|
||||
CREATE TABLE `cards` (
|
||||
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
|
||||
`lesson_id` integer NOT NULL,
|
||||
`question` text NOT NULL,
|
||||
`answer` text NOT NULL,
|
||||
`hint` text,
|
||||
`position` integer DEFAULT 0 NOT NULL,
|
||||
`created_at` integer DEFAULT (unixepoch()) NOT NULL,
|
||||
`updated_at` integer DEFAULT (unixepoch()) NOT NULL,
|
||||
FOREIGN KEY (`lesson_id`) REFERENCES `lessons`(`id`) ON UPDATE no action ON DELETE cascade
|
||||
);
|
||||
--> statement-breakpoint
|
||||
CREATE TABLE `lessons` (
|
||||
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
|
||||
`parent_id` integer,
|
||||
`name` text NOT NULL,
|
||||
`description` text,
|
||||
`position` integer DEFAULT 0 NOT NULL,
|
||||
`bidirectional` integer DEFAULT false NOT NULL,
|
||||
`created_at` integer DEFAULT (unixepoch()) NOT NULL,
|
||||
`updated_at` integer DEFAULT (unixepoch()) NOT NULL
|
||||
);
|
||||
--> statement-breakpoint
|
||||
CREATE TABLE `sessions` (
|
||||
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
|
||||
`lesson_id` integer NOT NULL,
|
||||
`started_at` integer DEFAULT (unixepoch()) NOT NULL,
|
||||
`ended_at` integer,
|
||||
`duration_seconds` integer,
|
||||
`cards_shown` integer DEFAULT 0 NOT NULL,
|
||||
`cards_correct` integer DEFAULT 0 NOT NULL,
|
||||
`cards_incorrect` integer DEFAULT 0 NOT NULL,
|
||||
`status` text DEFAULT 'active' NOT NULL,
|
||||
`queue_snapshot` text,
|
||||
FOREIGN KEY (`lesson_id`) REFERENCES `lessons`(`id`) ON UPDATE no action ON DELETE cascade
|
||||
);
|
||||
--> statement-breakpoint
|
||||
CREATE INDEX `attempts_session_idx` ON `attempts` (`session_id`);--> statement-breakpoint
|
||||
CREATE INDEX `attempts_card_idx` ON `attempts` (`card_id`);--> statement-breakpoint
|
||||
CREATE INDEX `card_progress_pk` ON `card_progress` (`card_id`,`direction`);--> statement-breakpoint
|
||||
CREATE INDEX `card_progress_due_idx` ON `card_progress` (`next_due_at`);--> statement-breakpoint
|
||||
CREATE INDEX `cards_lesson_idx` ON `cards` (`lesson_id`);--> statement-breakpoint
|
||||
CREATE INDEX `sessions_status_idx` ON `sessions` (`status`);
|
||||
Reference in New Issue
Block a user