feat(TRUEREF-0001): implement complete database schema and core data models
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>
This commit is contained in:
104
src/lib/server/db/migrations/0000_large_master_chief.sql
Normal file
104
src/lib/server/db/migrations/0000_large_master_chief.sql
Normal file
@@ -0,0 +1,104 @@
|
||||
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
|
||||
);
|
||||
Reference in New Issue
Block a user