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