92 lines
3.4 KiB
SQL
92 lines
3.4 KiB
SQL
CREATE TABLE `research_artifact` (
|
|
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
|
|
`user_id` text NOT NULL,
|
|
`organization_id` text,
|
|
`ticker` text NOT NULL,
|
|
`accession_number` text,
|
|
`kind` text NOT NULL,
|
|
`source` text NOT NULL DEFAULT 'user',
|
|
`subtype` text,
|
|
`title` text,
|
|
`summary` text,
|
|
`body_markdown` text,
|
|
`search_text` text,
|
|
`visibility_scope` text NOT NULL DEFAULT 'private',
|
|
`tags` text,
|
|
`metadata` text,
|
|
`file_name` text,
|
|
`mime_type` text,
|
|
`file_size_bytes` integer,
|
|
`storage_path` text,
|
|
`created_at` text NOT NULL,
|
|
`updated_at` text NOT NULL,
|
|
FOREIGN KEY (`user_id`) REFERENCES `user`(`id`) ON UPDATE no action ON DELETE cascade,
|
|
FOREIGN KEY (`organization_id`) REFERENCES `organization`(`id`) ON UPDATE no action ON DELETE set null
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE INDEX `research_artifact_ticker_idx` ON `research_artifact` (`user_id`,`ticker`,`updated_at`);
|
|
--> statement-breakpoint
|
|
CREATE INDEX `research_artifact_kind_idx` ON `research_artifact` (`user_id`,`kind`,`updated_at`);
|
|
--> statement-breakpoint
|
|
CREATE INDEX `research_artifact_accession_idx` ON `research_artifact` (`user_id`,`accession_number`);
|
|
--> statement-breakpoint
|
|
CREATE INDEX `research_artifact_source_idx` ON `research_artifact` (`user_id`,`source`,`updated_at`);
|
|
--> statement-breakpoint
|
|
|
|
CREATE TABLE `research_memo` (
|
|
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
|
|
`user_id` text NOT NULL,
|
|
`organization_id` text,
|
|
`ticker` text NOT NULL,
|
|
`rating` text,
|
|
`conviction` text,
|
|
`time_horizon_months` integer,
|
|
`packet_title` text,
|
|
`packet_subtitle` text,
|
|
`thesis_markdown` text NOT NULL DEFAULT '',
|
|
`variant_view_markdown` text NOT NULL DEFAULT '',
|
|
`catalysts_markdown` text NOT NULL DEFAULT '',
|
|
`risks_markdown` text NOT NULL DEFAULT '',
|
|
`disconfirming_evidence_markdown` text NOT NULL DEFAULT '',
|
|
`next_actions_markdown` text NOT NULL DEFAULT '',
|
|
`created_at` text NOT NULL,
|
|
`updated_at` text NOT NULL,
|
|
FOREIGN KEY (`user_id`) REFERENCES `user`(`id`) ON UPDATE no action ON DELETE cascade,
|
|
FOREIGN KEY (`organization_id`) REFERENCES `organization`(`id`) ON UPDATE no action ON DELETE set null
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE UNIQUE INDEX `research_memo_ticker_uidx` ON `research_memo` (`user_id`,`ticker`);
|
|
--> statement-breakpoint
|
|
CREATE INDEX `research_memo_updated_idx` ON `research_memo` (`user_id`,`updated_at`);
|
|
--> statement-breakpoint
|
|
|
|
CREATE TABLE `research_memo_evidence` (
|
|
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
|
|
`memo_id` integer NOT NULL,
|
|
`artifact_id` integer NOT NULL,
|
|
`section` text NOT NULL,
|
|
`annotation` text,
|
|
`sort_order` integer NOT NULL DEFAULT 0,
|
|
`created_at` text NOT NULL,
|
|
FOREIGN KEY (`memo_id`) REFERENCES `research_memo`(`id`) ON UPDATE no action ON DELETE cascade,
|
|
FOREIGN KEY (`artifact_id`) REFERENCES `research_artifact`(`id`) ON UPDATE no action ON DELETE cascade
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE INDEX `research_memo_evidence_memo_idx` ON `research_memo_evidence` (`memo_id`,`section`,`sort_order`);
|
|
--> statement-breakpoint
|
|
CREATE INDEX `research_memo_evidence_artifact_idx` ON `research_memo_evidence` (`artifact_id`);
|
|
--> statement-breakpoint
|
|
CREATE UNIQUE INDEX `research_memo_evidence_unique_uidx` ON `research_memo_evidence` (`memo_id`,`artifact_id`,`section`);
|
|
--> statement-breakpoint
|
|
|
|
CREATE VIRTUAL TABLE `research_artifact_fts` USING fts5(
|
|
artifact_id UNINDEXED,
|
|
user_id UNINDEXED,
|
|
ticker UNINDEXED,
|
|
title,
|
|
summary,
|
|
body_markdown,
|
|
search_text,
|
|
tags_text
|
|
);
|