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`);