add services/mam-api/src/db/schema.sql
This commit is contained in:
parent
9a9259628a
commit
44a5781f99
1 changed files with 135 additions and 0 deletions
135
services/mam-api/src/db/schema.sql
Normal file
135
services/mam-api/src/db/schema.sql
Normal file
|
|
@ -0,0 +1,135 @@
|
||||||
|
-- Wild Dragon MAM Platform - PostgreSQL Schema
|
||||||
|
|
||||||
|
-- Enable UUID extension
|
||||||
|
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
|
||||||
|
|
||||||
|
-- ENUM types
|
||||||
|
CREATE TYPE asset_status AS ENUM (
|
||||||
|
'ingesting',
|
||||||
|
'processing',
|
||||||
|
'ready',
|
||||||
|
'error',
|
||||||
|
'archived'
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TYPE media_type AS ENUM (
|
||||||
|
'video',
|
||||||
|
'audio',
|
||||||
|
'image',
|
||||||
|
'document'
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TYPE job_type AS ENUM (
|
||||||
|
'proxy_gen',
|
||||||
|
'thumbnail',
|
||||||
|
'conform',
|
||||||
|
'export'
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TYPE job_status AS ENUM (
|
||||||
|
'queued',
|
||||||
|
'processing',
|
||||||
|
'complete',
|
||||||
|
'failed'
|
||||||
|
);
|
||||||
|
|
||||||
|
-- Projects table
|
||||||
|
CREATE TABLE projects (
|
||||||
|
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
|
||||||
|
name TEXT NOT NULL,
|
||||||
|
description TEXT,
|
||||||
|
s3_prefix TEXT NOT NULL,
|
||||||
|
created_at TIMESTAMPTZ DEFAULT NOW(),
|
||||||
|
updated_at TIMESTAMPTZ DEFAULT NOW()
|
||||||
|
);
|
||||||
|
|
||||||
|
-- Bins table
|
||||||
|
CREATE TABLE bins (
|
||||||
|
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
|
||||||
|
project_id UUID NOT NULL REFERENCES projects ON DELETE CASCADE,
|
||||||
|
parent_id UUID REFERENCES bins ON DELETE SET NULL,
|
||||||
|
name TEXT NOT NULL,
|
||||||
|
created_at TIMESTAMPTZ DEFAULT NOW()
|
||||||
|
);
|
||||||
|
|
||||||
|
-- Assets table
|
||||||
|
CREATE TABLE assets (
|
||||||
|
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
|
||||||
|
project_id UUID NOT NULL REFERENCES projects ON DELETE CASCADE,
|
||||||
|
bin_id UUID REFERENCES bins ON DELETE SET NULL,
|
||||||
|
filename TEXT NOT NULL,
|
||||||
|
display_name TEXT,
|
||||||
|
status asset_status DEFAULT 'ingesting',
|
||||||
|
media_type media_type NOT NULL,
|
||||||
|
original_s3_key TEXT,
|
||||||
|
proxy_s3_key TEXT,
|
||||||
|
thumbnail_s3_key TEXT,
|
||||||
|
codec TEXT,
|
||||||
|
resolution TEXT,
|
||||||
|
fps NUMERIC(6,3),
|
||||||
|
duration_ms BIGINT,
|
||||||
|
start_tc TEXT,
|
||||||
|
file_size BIGINT,
|
||||||
|
tags TEXT[] DEFAULT '{}',
|
||||||
|
notes TEXT,
|
||||||
|
created_at TIMESTAMPTZ DEFAULT NOW(),
|
||||||
|
updated_at TIMESTAMPTZ DEFAULT NOW()
|
||||||
|
);
|
||||||
|
|
||||||
|
-- Jobs table
|
||||||
|
CREATE TABLE jobs (
|
||||||
|
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
|
||||||
|
type job_type NOT NULL,
|
||||||
|
asset_id UUID REFERENCES assets ON DELETE SET NULL,
|
||||||
|
status job_status DEFAULT 'queued',
|
||||||
|
payload JSONB DEFAULT '{}',
|
||||||
|
result JSONB DEFAULT '{}',
|
||||||
|
error TEXT,
|
||||||
|
progress INTEGER DEFAULT 0,
|
||||||
|
created_at TIMESTAMPTZ DEFAULT NOW(),
|
||||||
|
updated_at TIMESTAMPTZ DEFAULT NOW()
|
||||||
|
);
|
||||||
|
|
||||||
|
-- Capture Sessions table
|
||||||
|
CREATE TABLE capture_sessions (
|
||||||
|
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
|
||||||
|
project_id UUID NOT NULL REFERENCES projects,
|
||||||
|
bin_id UUID REFERENCES bins,
|
||||||
|
clip_name TEXT NOT NULL,
|
||||||
|
device TEXT NOT NULL,
|
||||||
|
started_at TIMESTAMPTZ DEFAULT NOW(),
|
||||||
|
stopped_at TIMESTAMPTZ,
|
||||||
|
asset_id UUID REFERENCES assets
|
||||||
|
);
|
||||||
|
|
||||||
|
-- Users table
|
||||||
|
CREATE TABLE users (
|
||||||
|
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
|
||||||
|
username TEXT UNIQUE NOT NULL,
|
||||||
|
password_hash TEXT NOT NULL,
|
||||||
|
display_name TEXT,
|
||||||
|
role TEXT DEFAULT 'editor',
|
||||||
|
created_at TIMESTAMPTZ DEFAULT NOW()
|
||||||
|
);
|
||||||
|
|
||||||
|
-- Sessions table (for connect-pg-simple session store)
|
||||||
|
CREATE TABLE sessions (
|
||||||
|
sid TEXT PRIMARY KEY,
|
||||||
|
sess JSONB NOT NULL,
|
||||||
|
expire TIMESTAMPTZ NOT NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
-- Indexes
|
||||||
|
CREATE INDEX idx_assets_project_id ON assets(project_id);
|
||||||
|
CREATE INDEX idx_assets_status ON assets(status);
|
||||||
|
CREATE INDEX idx_assets_created_at_desc ON assets(created_at DESC);
|
||||||
|
CREATE INDEX idx_assets_tags ON assets USING GIN(tags);
|
||||||
|
CREATE INDEX idx_assets_fulltext ON assets USING GIN(to_tsvector('english', COALESCE(display_name, '') || ' ' || COALESCE(filename, '') || ' ' || COALESCE(notes, '')));
|
||||||
|
|
||||||
|
CREATE INDEX idx_jobs_asset_id ON jobs(asset_id);
|
||||||
|
CREATE INDEX idx_jobs_status ON jobs(status);
|
||||||
|
CREATE INDEX idx_jobs_type ON jobs(type);
|
||||||
|
|
||||||
|
CREATE INDEX idx_bins_project_id ON bins(project_id);
|
||||||
|
|
||||||
|
CREATE INDEX idx_sessions_expire ON sessions(expire);
|
||||||
Loading…
Reference in a new issue