Files
WhispAssist/src-tauri/migrations/0001_init.sql
T

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