90 lines
2.7 KiB
SQL
90 lines
2.7 KiB
SQL
-- WhispAssist initial schema (Phase 2). Mirrors docs/03-data-model.md.
|
|
-- Forward-only migration applied via sqlx::migrate!.
|
|
PRAGMA foreign_keys = ON;
|
|
|
|
CREATE TABLE meetings (
|
|
id TEXT PRIMARY KEY,
|
|
title TEXT NOT NULL DEFAULT 'Untitled meeting',
|
|
started_at INTEGER NOT NULL,
|
|
ended_at INTEGER,
|
|
duration_secs INTEGER,
|
|
folder_path TEXT NOT NULL,
|
|
audio_path TEXT NOT NULL,
|
|
status TEXT NOT NULL, -- recording|transcribing|ready|recovering|error
|
|
language TEXT,
|
|
backend_used TEXT,
|
|
model_used TEXT,
|
|
calendar_event_id TEXT,
|
|
created_at INTEGER NOT NULL,
|
|
updated_at INTEGER NOT NULL
|
|
);
|
|
|
|
CREATE TABLE participants (
|
|
id TEXT PRIMARY KEY,
|
|
name TEXT NOT NULL,
|
|
email TEXT,
|
|
UNIQUE(name, email)
|
|
);
|
|
|
|
CREATE TABLE speakers (
|
|
id TEXT PRIMARY KEY,
|
|
meeting_id TEXT NOT NULL REFERENCES meetings(id) ON DELETE CASCADE,
|
|
label TEXT NOT NULL, -- 'S1','S2',…
|
|
display_name TEXT,
|
|
participant_id TEXT REFERENCES participants(id),
|
|
color TEXT,
|
|
UNIQUE(meeting_id, label)
|
|
);
|
|
|
|
CREATE TABLE meeting_participants (
|
|
meeting_id TEXT NOT NULL REFERENCES meetings(id) ON DELETE CASCADE,
|
|
participant_id TEXT NOT NULL REFERENCES participants(id),
|
|
role TEXT, -- organizer|required|optional
|
|
PRIMARY KEY (meeting_id, participant_id)
|
|
);
|
|
|
|
CREATE TABLE calendar_events (
|
|
id TEXT PRIMARY KEY,
|
|
source TEXT NOT NULL, -- pst|graph|ics
|
|
subject TEXT,
|
|
organizer TEXT,
|
|
starts_at INTEGER,
|
|
ends_at INTEGER,
|
|
description TEXT,
|
|
raw_uid TEXT
|
|
);
|
|
|
|
CREATE TABLE tags (
|
|
id TEXT PRIMARY KEY,
|
|
name TEXT NOT NULL UNIQUE
|
|
);
|
|
|
|
CREATE TABLE meeting_tags (
|
|
meeting_id TEXT NOT NULL REFERENCES meetings(id) ON DELETE CASCADE,
|
|
tag_id TEXT NOT NULL REFERENCES tags(id) ON DELETE CASCADE,
|
|
PRIMARY KEY (meeting_id, tag_id)
|
|
);
|
|
|
|
CREATE TABLE action_items (
|
|
id TEXT PRIMARY KEY,
|
|
meeting_id TEXT NOT NULL REFERENCES meetings(id) ON DELETE CASCADE,
|
|
text TEXT NOT NULL,
|
|
owner TEXT,
|
|
due_at INTEGER,
|
|
confirmed INTEGER NOT NULL DEFAULT 0,
|
|
reminder_set INTEGER NOT NULL DEFAULT 0,
|
|
created_at INTEGER NOT NULL
|
|
);
|
|
|
|
CREATE VIRTUAL TABLE meeting_fts USING fts5(
|
|
meeting_id UNINDEXED,
|
|
title,
|
|
transcript_text,
|
|
notes_text,
|
|
tokenize = 'porter unicode61'
|
|
);
|
|
|
|
CREATE INDEX idx_meetings_started ON meetings(started_at DESC);
|
|
CREATE INDEX idx_speakers_meeting ON speakers(meeting_id);
|
|
CREATE INDEX idx_action_meeting ON action_items(meeting_id);
|