Define all SQLite tables via Drizzle ORM (repositories, repository_versions, documents, snippets, snippet_embeddings, indexing_jobs, repository_configs, settings), generate the initial migration, create FTS5 virtual table and sync triggers in fts.sql, add shared TypeScript types in src/lib/types.ts, and write 21 unit tests covering insertions, cascade deletes, FK constraints, blob storage, JSON fields, and FTS5 trigger behaviour. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
105 lines
3.3 KiB
SQL
105 lines
3.3 KiB
SQL
CREATE TABLE `documents` (
|
|
`id` text PRIMARY KEY NOT NULL,
|
|
`repository_id` text NOT NULL,
|
|
`version_id` text,
|
|
`file_path` text NOT NULL,
|
|
`title` text,
|
|
`language` text,
|
|
`token_count` integer DEFAULT 0,
|
|
`checksum` text NOT NULL,
|
|
`indexed_at` integer NOT NULL,
|
|
FOREIGN KEY (`repository_id`) REFERENCES `repositories`(`id`) ON UPDATE no action ON DELETE cascade,
|
|
FOREIGN KEY (`version_id`) REFERENCES `repository_versions`(`id`) ON UPDATE no action ON DELETE cascade
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE `indexing_jobs` (
|
|
`id` text PRIMARY KEY NOT NULL,
|
|
`repository_id` text NOT NULL,
|
|
`version_id` text,
|
|
`status` text DEFAULT 'queued' NOT NULL,
|
|
`progress` integer DEFAULT 0,
|
|
`total_files` integer DEFAULT 0,
|
|
`processed_files` integer DEFAULT 0,
|
|
`error` text,
|
|
`started_at` integer,
|
|
`completed_at` integer,
|
|
`created_at` integer NOT NULL,
|
|
FOREIGN KEY (`repository_id`) REFERENCES `repositories`(`id`) ON UPDATE no action ON DELETE cascade
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE `repositories` (
|
|
`id` text PRIMARY KEY NOT NULL,
|
|
`title` text NOT NULL,
|
|
`description` text,
|
|
`source` text NOT NULL,
|
|
`source_url` text NOT NULL,
|
|
`branch` text DEFAULT 'main',
|
|
`state` text DEFAULT 'pending' NOT NULL,
|
|
`total_snippets` integer DEFAULT 0,
|
|
`total_tokens` integer DEFAULT 0,
|
|
`trust_score` real DEFAULT 0,
|
|
`benchmark_score` real DEFAULT 0,
|
|
`stars` integer,
|
|
`github_token` text,
|
|
`last_indexed_at` integer,
|
|
`created_at` integer NOT NULL,
|
|
`updated_at` integer NOT NULL
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE `repository_configs` (
|
|
`repository_id` text PRIMARY KEY NOT NULL,
|
|
`project_title` text,
|
|
`description` text,
|
|
`folders` text,
|
|
`exclude_folders` text,
|
|
`exclude_files` text,
|
|
`rules` text,
|
|
`previous_versions` text,
|
|
`updated_at` integer NOT NULL,
|
|
FOREIGN KEY (`repository_id`) REFERENCES `repositories`(`id`) ON UPDATE no action ON DELETE cascade
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE `repository_versions` (
|
|
`id` text PRIMARY KEY NOT NULL,
|
|
`repository_id` text NOT NULL,
|
|
`tag` text NOT NULL,
|
|
`title` text,
|
|
`state` text DEFAULT 'pending' NOT NULL,
|
|
`total_snippets` integer DEFAULT 0,
|
|
`indexed_at` integer,
|
|
`created_at` integer NOT NULL,
|
|
FOREIGN KEY (`repository_id`) REFERENCES `repositories`(`id`) ON UPDATE no action ON DELETE cascade
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE `settings` (
|
|
`key` text PRIMARY KEY NOT NULL,
|
|
`value` text,
|
|
`updated_at` integer NOT NULL
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE `snippet_embeddings` (
|
|
`snippet_id` text PRIMARY KEY NOT NULL,
|
|
`model` text NOT NULL,
|
|
`dimensions` integer NOT NULL,
|
|
`embedding` blob NOT NULL,
|
|
`created_at` integer NOT NULL,
|
|
FOREIGN KEY (`snippet_id`) REFERENCES `snippets`(`id`) ON UPDATE no action ON DELETE cascade
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE `snippets` (
|
|
`id` text PRIMARY KEY NOT NULL,
|
|
`document_id` text NOT NULL,
|
|
`repository_id` text NOT NULL,
|
|
`version_id` text,
|
|
`type` text NOT NULL,
|
|
`title` text,
|
|
`content` text NOT NULL,
|
|
`language` text,
|
|
`breadcrumb` text,
|
|
`token_count` integer DEFAULT 0,
|
|
`created_at` integer NOT NULL,
|
|
FOREIGN KEY (`document_id`) REFERENCES `documents`(`id`) ON UPDATE no action ON DELETE cascade,
|
|
FOREIGN KEY (`repository_id`) REFERENCES `repositories`(`id`) ON UPDATE no action ON DELETE cascade,
|
|
FOREIGN KEY (`version_id`) REFERENCES `repository_versions`(`id`) ON UPDATE no action ON DELETE cascade
|
|
);
|