2540 lines
94 KiB
PL/PgSQL
2540 lines
94 KiB
PL/PgSQL
--
|
|
-- PostgreSQL database dump
|
|
--
|
|
|
|
|
|
-- Dumped from database version 16.14
|
|
-- Dumped by pg_dump version 16.14
|
|
|
|
SET statement_timeout = 0;
|
|
SET lock_timeout = 0;
|
|
SET idle_in_transaction_session_timeout = 0;
|
|
SET client_encoding = 'UTF8';
|
|
SET standard_conforming_strings = on;
|
|
SELECT pg_catalog.set_config('search_path', '', false);
|
|
SET check_function_bodies = false;
|
|
SET xmloption = content;
|
|
SET client_min_messages = warning;
|
|
SET row_security = off;
|
|
|
|
--
|
|
-- Name: citext; Type: EXTENSION; Schema: -; Owner: -
|
|
--
|
|
|
|
CREATE EXTENSION IF NOT EXISTS citext WITH SCHEMA public;
|
|
|
|
|
|
--
|
|
-- Name: EXTENSION citext; Type: COMMENT; Schema: -; Owner: -
|
|
--
|
|
|
|
COMMENT ON EXTENSION citext IS 'data type for case-insensitive character strings';
|
|
|
|
|
|
--
|
|
-- Name: pgcrypto; Type: EXTENSION; Schema: -; Owner: -
|
|
--
|
|
|
|
CREATE EXTENSION IF NOT EXISTS pgcrypto WITH SCHEMA public;
|
|
|
|
|
|
--
|
|
-- Name: EXTENSION pgcrypto; Type: COMMENT; Schema: -; Owner: -
|
|
--
|
|
|
|
COMMENT ON EXTENSION pgcrypto IS 'cryptographic functions';
|
|
|
|
|
|
--
|
|
-- Name: set_updated_at(); Type: FUNCTION; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE FUNCTION public.set_updated_at() RETURNS trigger
|
|
LANGUAGE plpgsql
|
|
AS $$
|
|
BEGIN
|
|
NEW.updated_at = CURRENT_TIMESTAMP;
|
|
RETURN NEW;
|
|
END;
|
|
$$;
|
|
|
|
|
|
SET default_tablespace = '';
|
|
|
|
SET default_table_access_method = heap;
|
|
|
|
--
|
|
-- Name: admin_audit_logs; Type: TABLE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TABLE public.admin_audit_logs (
|
|
id bigint NOT NULL,
|
|
admin_id uuid,
|
|
admin_username text NOT NULL,
|
|
action character varying(64) NOT NULL,
|
|
resource_type character varying(64) NOT NULL,
|
|
resource_id text,
|
|
reason text,
|
|
detail jsonb DEFAULT '{}'::jsonb NOT NULL,
|
|
ip_address inet,
|
|
trace_id character varying(64),
|
|
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL
|
|
);
|
|
|
|
|
|
--
|
|
-- Name: admin_audit_logs_id_seq; Type: SEQUENCE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE SEQUENCE public.admin_audit_logs_id_seq
|
|
START WITH 1
|
|
INCREMENT BY 1
|
|
NO MINVALUE
|
|
NO MAXVALUE
|
|
CACHE 1;
|
|
|
|
|
|
--
|
|
-- Name: admin_audit_logs_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER SEQUENCE public.admin_audit_logs_id_seq OWNED BY public.admin_audit_logs.id;
|
|
|
|
|
|
--
|
|
-- Name: admin_refresh_tokens; Type: TABLE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TABLE public.admin_refresh_tokens (
|
|
id uuid DEFAULT gen_random_uuid() NOT NULL,
|
|
admin_id uuid NOT NULL,
|
|
token_hash character(64) NOT NULL,
|
|
expires_at timestamp with time zone NOT NULL,
|
|
revoked_at timestamp with time zone,
|
|
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL
|
|
);
|
|
|
|
|
|
--
|
|
-- Name: admin_users; Type: TABLE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TABLE public.admin_users (
|
|
id uuid DEFAULT gen_random_uuid() NOT NULL,
|
|
username public.citext NOT NULL,
|
|
password_hash text NOT NULL,
|
|
enabled boolean DEFAULT true NOT NULL,
|
|
last_login_at timestamp with time zone,
|
|
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
updated_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
deleted_at timestamp with time zone
|
|
);
|
|
|
|
|
|
--
|
|
-- Name: announcements; Type: TABLE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TABLE public.announcements (
|
|
id uuid DEFAULT gen_random_uuid() NOT NULL,
|
|
title character varying(200) NOT NULL,
|
|
content text NOT NULL,
|
|
status character varying(16) DEFAULT 'draft'::character varying NOT NULL,
|
|
pinned boolean DEFAULT false NOT NULL,
|
|
publish_at timestamp with time zone,
|
|
offline_at timestamp with time zone,
|
|
published_by uuid,
|
|
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
updated_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
deleted_at timestamp with time zone,
|
|
CONSTRAINT announcements_check CHECK (((publish_at IS NULL) OR (offline_at IS NULL) OR (offline_at > publish_at))),
|
|
CONSTRAINT announcements_status_check CHECK (((status)::text = ANY ((ARRAY['draft'::character varying, 'published'::character varying, 'offline'::character varying])::text[])))
|
|
);
|
|
|
|
|
|
--
|
|
-- Name: canvas_projects; Type: TABLE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TABLE public.canvas_projects (
|
|
id uuid DEFAULT gen_random_uuid() NOT NULL,
|
|
user_id uuid NOT NULL,
|
|
name public.citext NOT NULL,
|
|
schema_version smallint DEFAULT 1 NOT NULL,
|
|
document jsonb NOT NULL,
|
|
revision bigint DEFAULT 1 NOT NULL,
|
|
node_count integer DEFAULT 0 NOT NULL,
|
|
cover_url text,
|
|
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
updated_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
deleted_at timestamp with time zone,
|
|
CONSTRAINT canvas_projects_document_check CHECK ((jsonb_typeof(document) = 'object'::text)),
|
|
CONSTRAINT canvas_projects_node_count_check CHECK ((node_count >= 0)),
|
|
CONSTRAINT canvas_projects_revision_check CHECK ((revision > 0)),
|
|
CONSTRAINT canvas_projects_schema_version_check CHECK ((schema_version = 1))
|
|
);
|
|
|
|
|
|
--
|
|
-- Name: channel_asset_cache; Type: TABLE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TABLE public.channel_asset_cache (
|
|
id uuid DEFAULT gen_random_uuid() NOT NULL,
|
|
channel_id uuid NOT NULL,
|
|
media_asset_id uuid NOT NULL,
|
|
object_sha256 character(64),
|
|
upstream_url text NOT NULL,
|
|
expires_at timestamp with time zone,
|
|
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
updated_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL
|
|
);
|
|
|
|
|
|
--
|
|
-- Name: channel_balance_snapshots; Type: TABLE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TABLE public.channel_balance_snapshots (
|
|
id bigint NOT NULL,
|
|
channel_id uuid NOT NULL,
|
|
balance numeric(18,4) NOT NULL,
|
|
currency character varying(16) NOT NULL,
|
|
synced_at timestamp with time zone NOT NULL,
|
|
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL
|
|
);
|
|
|
|
|
|
--
|
|
-- Name: channel_balance_snapshots_id_seq; Type: SEQUENCE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE SEQUENCE public.channel_balance_snapshots_id_seq
|
|
START WITH 1
|
|
INCREMENT BY 1
|
|
NO MINVALUE
|
|
NO MAXVALUE
|
|
CACHE 1;
|
|
|
|
|
|
--
|
|
-- Name: channel_balance_snapshots_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER SEQUENCE public.channel_balance_snapshots_id_seq OWNED BY public.channel_balance_snapshots.id;
|
|
|
|
|
|
--
|
|
-- Name: channels; Type: TABLE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TABLE public.channels (
|
|
id uuid DEFAULT gen_random_uuid() NOT NULL,
|
|
name public.citext NOT NULL,
|
|
channel_type character varying(20) NOT NULL,
|
|
base_url text NOT NULL,
|
|
api_key_ciphertext text,
|
|
api_key_last4 character varying(4),
|
|
encryption_key_version character varying(32),
|
|
warning_threshold numeric(18,2) DEFAULT 500 NOT NULL,
|
|
enabled boolean DEFAULT true NOT NULL,
|
|
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
updated_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
deleted_at timestamp with time zone,
|
|
max_concurrency integer DEFAULT 500 NOT NULL,
|
|
max_user_concurrency integer DEFAULT 10 NOT NULL,
|
|
channel_points_per_cny numeric(18,6),
|
|
CONSTRAINT channels_channel_type_check CHECK (((channel_type)::text = ANY ((ARRAY['relay'::character varying, 'official'::character varying])::text[]))),
|
|
CONSTRAINT channels_max_concurrency_check CHECK (((max_concurrency >= 1) AND (max_concurrency <= 5000))),
|
|
CONSTRAINT channels_max_user_concurrency_check CHECK (((max_user_concurrency >= 1) AND (max_user_concurrency <= 500))),
|
|
CONSTRAINT channels_warning_threshold_check CHECK ((warning_threshold >= (0)::numeric)),
|
|
CONSTRAINT chk_channels_points_per_cny CHECK (((channel_points_per_cny IS NULL) OR (channel_points_per_cny > (0)::numeric))),
|
|
CONSTRAINT chk_channels_user_concurrency CHECK ((max_user_concurrency <= max_concurrency))
|
|
);
|
|
|
|
|
|
--
|
|
-- Name: creative_projects; Type: TABLE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TABLE public.creative_projects (
|
|
id uuid DEFAULT gen_random_uuid() NOT NULL,
|
|
user_id uuid NOT NULL,
|
|
project_type character varying(24) DEFAULT 'video_redraw'::character varying NOT NULL,
|
|
name public.citext NOT NULL,
|
|
cover_asset_id uuid,
|
|
style_id uuid NOT NULL,
|
|
era_type character varying(32) NOT NULL,
|
|
custom_era character varying(100),
|
|
aspect_ratio character varying(8) NOT NULL,
|
|
localization character varying(16),
|
|
source_video_asset_id uuid,
|
|
subtitle_asset_id uuid,
|
|
audio_source character varying(24) DEFAULT 'video_audio'::character varying NOT NULL,
|
|
source_language character varying(16),
|
|
redraw_status character varying(32) DEFAULT 'draft'::character varying NOT NULL,
|
|
analysis_message text,
|
|
redraw_script text,
|
|
short_drama_type character varying(100),
|
|
play_count character varying(100),
|
|
audience_profile text,
|
|
producer character varying(200),
|
|
cast_members jsonb DEFAULT '[]'::jsonb NOT NULL,
|
|
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
updated_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
deleted_at timestamp with time zone,
|
|
video_resolution character varying(8) DEFAULT '720p'::character varying NOT NULL,
|
|
CONSTRAINT creative_projects_aspect_ratio_check CHECK (((aspect_ratio)::text = ANY ((ARRAY['9:16'::character varying, '16:9'::character varying])::text[]))),
|
|
CONSTRAINT creative_projects_audio_source_check CHECK (((audio_source)::text = ANY ((ARRAY['video_audio'::character varying, 'subtitle_file'::character varying])::text[]))),
|
|
CONSTRAINT creative_projects_check CHECK (((((era_type)::text = 'other'::text) AND (NULLIF(TRIM(BOTH FROM custom_era), ''::text) IS NOT NULL)) OR (((era_type)::text <> 'other'::text) AND (custom_era IS NULL)))),
|
|
CONSTRAINT creative_projects_check1 CHECK (((((project_type)::text = 'video_redraw'::text) AND ((localization)::text = ANY ((ARRAY['china'::character varying, 'uk_us'::character varying, 'korea'::character varying, 'japan'::character varying, 'france'::character varying, 'russia'::character varying, 'vietnam'::character varying, 'thailand'::character varying, 'india'::character varying])::text[]))) OR (((project_type)::text = 'premium_drama'::text) AND (localization IS NULL)))),
|
|
CONSTRAINT creative_projects_era_type_check CHECK (((era_type)::text = ANY ((ARRAY['modern_city'::character varying, 'ancient_history'::character varying, 'ancient_fantasy'::character varying, 'ancient_xianxia'::character varying, 'future_scifi'::character varying, 'other'::character varying])::text[]))),
|
|
CONSTRAINT creative_projects_project_type_check CHECK (((project_type)::text = ANY ((ARRAY['premium_drama'::character varying, 'video_redraw'::character varying])::text[]))),
|
|
CONSTRAINT creative_projects_redraw_status_check CHECK (((redraw_status)::text = ANY ((ARRAY['draft'::character varying, 'uploaded'::character varying, 'analyzing'::character varying, 'review'::character varying, 'generating'::character varying, 'failed'::character varying])::text[]))),
|
|
CONSTRAINT creative_projects_cast_members_check CHECK ((jsonb_typeof(cast_members) = 'array'::text)),
|
|
CONSTRAINT creative_projects_video_resolution_check CHECK (((video_resolution)::text = ANY ((ARRAY['480p'::character varying, '720p'::character varying, '1080p'::character varying])::text[])))
|
|
);
|
|
|
|
COMMENT ON COLUMN public.creative_projects.cast_members IS 'JSON array of cast members; follower_count is stored as text when present.';
|
|
|
|
|
|
--
|
|
-- Name: drama_import_sessions; Type: TABLE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TABLE public.drama_import_sessions (
|
|
id uuid DEFAULT gen_random_uuid() NOT NULL,
|
|
user_id uuid NOT NULL,
|
|
project_id uuid NOT NULL,
|
|
source_type character varying(24) NOT NULL,
|
|
source_filename character varying(255),
|
|
raw_content text NOT NULL,
|
|
content_sha256 character(64) NOT NULL,
|
|
preview_data jsonb DEFAULT '{}'::jsonb NOT NULL,
|
|
expires_at timestamp with time zone NOT NULL,
|
|
consumed_at timestamp with time zone,
|
|
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
CONSTRAINT drama_import_sessions_source_type_check CHECK (((source_type)::text = ANY ((ARRAY['pasted_text'::character varying, 'txt'::character varying, 'doc'::character varying, 'docx'::character varying])::text[])))
|
|
);
|
|
|
|
|
|
--
|
|
-- Name: drama_parse_batches; Type: TABLE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TABLE public.drama_parse_batches (
|
|
id uuid DEFAULT gen_random_uuid() NOT NULL,
|
|
project_id uuid NOT NULL,
|
|
user_id uuid NOT NULL,
|
|
mode character varying(16) NOT NULL,
|
|
status character varying(24) DEFAULT 'queued'::character varying NOT NULL,
|
|
total_count integer DEFAULT 0 NOT NULL,
|
|
completed_count integer DEFAULT 0 NOT NULL,
|
|
failed_count integer DEFAULT 0 NOT NULL,
|
|
current_episode_id uuid,
|
|
cancel_requested_at timestamp with time zone,
|
|
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
finished_at timestamp with time zone,
|
|
CONSTRAINT drama_parse_batches_completed_count_check CHECK ((completed_count >= 0)),
|
|
CONSTRAINT drama_parse_batches_failed_count_check CHECK ((failed_count >= 0)),
|
|
CONSTRAINT drama_parse_batches_mode_check CHECK (((mode)::text = ANY ((ARRAY['all'::character varying, 'unparsed'::character varying, 'from_episode'::character varying])::text[]))),
|
|
CONSTRAINT drama_parse_batches_status_check CHECK (((status)::text = ANY ((ARRAY['queued'::character varying, 'running'::character varying, 'cancel_requested'::character varying, 'succeeded'::character varying, 'failed'::character varying, 'cancelled'::character varying])::text[]))),
|
|
CONSTRAINT drama_parse_batches_total_count_check CHECK ((total_count >= 0))
|
|
);
|
|
|
|
|
|
--
|
|
-- Name: drama_parse_tasks; Type: TABLE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TABLE public.drama_parse_tasks (
|
|
id uuid DEFAULT gen_random_uuid() NOT NULL,
|
|
request_id character varying(100) NOT NULL,
|
|
batch_id uuid,
|
|
user_id uuid NOT NULL,
|
|
project_id uuid NOT NULL,
|
|
episode_id uuid NOT NULL,
|
|
channel_id uuid NOT NULL,
|
|
model_id uuid NOT NULL,
|
|
source_sha256 character(64) NOT NULL,
|
|
status character varying(24) DEFAULT 'queued'::character varying NOT NULL,
|
|
attempt_count integer DEFAULT 0 NOT NULL,
|
|
model_snapshot jsonb DEFAULT '{}'::jsonb NOT NULL,
|
|
prompt_snapshot text NOT NULL,
|
|
context_snapshot jsonb DEFAULT '{}'::jsonb NOT NULL,
|
|
normalized_result jsonb,
|
|
input_tokens bigint,
|
|
output_tokens bigint,
|
|
total_tokens bigint,
|
|
token_count_source character varying(16),
|
|
usage_raw jsonb,
|
|
billing_snapshot jsonb DEFAULT '{}'::jsonb NOT NULL,
|
|
estimated_points numeric(20,2) DEFAULT 0 NOT NULL,
|
|
prepaid_points numeric(20,2) DEFAULT 0 NOT NULL,
|
|
actual_points numeric(20,2),
|
|
cost_refunded boolean DEFAULT false NOT NULL,
|
|
request_char_count bigint DEFAULT 0 NOT NULL,
|
|
response_char_count bigint DEFAULT 0 NOT NULL,
|
|
lease_owner character varying(120),
|
|
lease_until timestamp with time zone,
|
|
cancel_requested_at timestamp with time zone,
|
|
error_code character varying(100),
|
|
error_message text,
|
|
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
started_at timestamp with time zone,
|
|
finished_at timestamp with time zone,
|
|
CONSTRAINT drama_parse_tasks_attempt_count_check CHECK ((attempt_count >= 0)),
|
|
CONSTRAINT drama_parse_tasks_actual_points_check CHECK ((actual_points >= (0)::numeric)),
|
|
CONSTRAINT drama_parse_tasks_estimated_points_check CHECK ((estimated_points >= (0)::numeric)),
|
|
CONSTRAINT drama_parse_tasks_prepaid_points_check CHECK ((prepaid_points >= (0)::numeric)),
|
|
CONSTRAINT drama_parse_tasks_status_check CHECK (((status)::text = ANY ((ARRAY['queued'::character varying, 'running'::character varying, 'retry_wait'::character varying, 'succeeded'::character varying, 'failed'::character varying, 'cancel_requested'::character varying, 'cancelled'::character varying])::text[]))),
|
|
CONSTRAINT drama_parse_tasks_token_count_source_check CHECK (((token_count_source)::text = ANY ((ARRAY['upstream'::character varying, 'local'::character varying, 'mixed'::character varying])::text[])))
|
|
);
|
|
|
|
|
|
--
|
|
-- Name: episode_continuity_contexts; Type: TABLE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TABLE public.episode_continuity_contexts (
|
|
episode_id uuid NOT NULL,
|
|
parse_task_id uuid NOT NULL,
|
|
source_sha256 character(64) NOT NULL,
|
|
summary jsonb DEFAULT '{}'::jsonb NOT NULL,
|
|
stale boolean DEFAULT false NOT NULL,
|
|
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
updated_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL
|
|
);
|
|
|
|
|
|
--
|
|
-- Name: episode_sources; Type: TABLE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TABLE public.episode_sources (
|
|
id uuid DEFAULT gen_random_uuid() NOT NULL,
|
|
episode_id uuid NOT NULL,
|
|
title character varying(200),
|
|
raw_content text NOT NULL,
|
|
char_count integer NOT NULL,
|
|
source_type character varying(24) NOT NULL,
|
|
source_filename character varying(255),
|
|
content_sha256 character(64) NOT NULL,
|
|
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
updated_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
CONSTRAINT episode_sources_char_count_check CHECK ((char_count > 0)),
|
|
CONSTRAINT episode_sources_source_type_check CHECK (((source_type)::text = ANY ((ARRAY['pasted_text'::character varying, 'txt'::character varying, 'doc'::character varying, 'docx'::character varying])::text[])))
|
|
);
|
|
|
|
|
|
--
|
|
-- Name: episode_storyboards; Type: TABLE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TABLE public.episode_storyboards (
|
|
id uuid DEFAULT gen_random_uuid() NOT NULL,
|
|
episode_id uuid,
|
|
project_id uuid,
|
|
sequence_no integer NOT NULL,
|
|
stable_key character varying(80) NOT NULL,
|
|
start_ms bigint NOT NULL,
|
|
end_ms bigint NOT NULL,
|
|
duration_seconds integer NOT NULL,
|
|
title character varying(160),
|
|
thumbnail_asset_id uuid,
|
|
prompt_content text,
|
|
image_prompt text,
|
|
dialogue jsonb DEFAULT '[]'::jsonb NOT NULL,
|
|
asset_refs jsonb DEFAULT '[]'::jsonb NOT NULL,
|
|
locked boolean DEFAULT false NOT NULL,
|
|
active_output_id uuid,
|
|
status character varying(32) DEFAULT 'idle'::character varying NOT NULL,
|
|
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
updated_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
deleted_at timestamp with time zone,
|
|
script_content text,
|
|
source_excerpt text,
|
|
source_parse_task_id uuid,
|
|
user_edited boolean DEFAULT false NOT NULL,
|
|
CONSTRAINT episode_storyboards_check CHECK ((end_ms > start_ms)),
|
|
CONSTRAINT episode_storyboards_parent_check CHECK (((episode_id IS NOT NULL)::integer + (project_id IS NOT NULL)::integer = 1)),
|
|
CONSTRAINT episode_storyboards_duration_seconds_check CHECK (((duration_seconds >= 5) AND (duration_seconds <= 15))),
|
|
CONSTRAINT episode_storyboards_sequence_no_check CHECK ((sequence_no > 0)),
|
|
CONSTRAINT episode_storyboards_start_ms_check CHECK ((start_ms >= 0)),
|
|
CONSTRAINT episode_storyboards_status_check CHECK (((status)::text = ANY ((ARRAY['idle'::character varying, 'queued'::character varying, 'generating'::character varying, 'completed'::character varying, 'failed'::character varying])::text[])))
|
|
);
|
|
|
|
|
|
--
|
|
-- Name: generation_outputs; Type: TABLE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TABLE public.generation_outputs (
|
|
id uuid DEFAULT gen_random_uuid() NOT NULL,
|
|
task_id uuid NOT NULL,
|
|
media_asset_id uuid NOT NULL,
|
|
output_type character varying(16) NOT NULL,
|
|
sequence_no integer DEFAULT 1 NOT NULL,
|
|
metadata jsonb DEFAULT '{}'::jsonb NOT NULL,
|
|
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
CONSTRAINT generation_outputs_output_type_check CHECK (((output_type)::text = ANY ((ARRAY['image'::character varying, 'video'::character varying, 'subtitle'::character varying, 'text'::character varying])::text[])))
|
|
);
|
|
|
|
|
|
--
|
|
-- Name: generation_tasks; Type: TABLE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TABLE public.generation_tasks (
|
|
id uuid DEFAULT gen_random_uuid() NOT NULL,
|
|
request_id character varying(100) NOT NULL,
|
|
user_id uuid NOT NULL,
|
|
channel_id uuid,
|
|
model_id uuid,
|
|
project_id uuid,
|
|
episode_id uuid,
|
|
storyboard_id uuid,
|
|
script_analysis_id uuid,
|
|
task_type character varying(32) NOT NULL,
|
|
status character varying(32) DEFAULT 'pending_submission'::character varying NOT NULL,
|
|
upstream_task_id character varying(200),
|
|
input_data jsonb DEFAULT '{}'::jsonb NOT NULL,
|
|
prompt_snapshot text,
|
|
billing_snapshot jsonb DEFAULT '{}'::jsonb NOT NULL,
|
|
input_tokens bigint,
|
|
output_tokens bigint,
|
|
total_tokens bigint,
|
|
token_count_source character varying(16),
|
|
usage_raw jsonb,
|
|
estimated_points numeric(20,2) DEFAULT 0 NOT NULL,
|
|
actual_points numeric(20,2),
|
|
prepaid_points numeric(20,2) DEFAULT 0 NOT NULL,
|
|
cost_refunded boolean DEFAULT false NOT NULL,
|
|
slot_reserved boolean DEFAULT false NOT NULL,
|
|
slot_reserved_at timestamp with time zone,
|
|
slot_released_at timestamp with time zone,
|
|
submit_attempts integer DEFAULT 0 NOT NULL,
|
|
poll_attempts integer DEFAULT 0 NOT NULL,
|
|
download_attempts integer DEFAULT 0 NOT NULL,
|
|
next_submit_at timestamp with time zone,
|
|
next_poll_at timestamp with time zone,
|
|
lease_owner character varying(120),
|
|
lease_until timestamp with time zone,
|
|
upstream_result_url text,
|
|
error_code character varying(100),
|
|
error_message text,
|
|
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
submitted_at timestamp with time zone,
|
|
finished_at timestamp with time zone,
|
|
result_data jsonb DEFAULT '{}'::jsonb NOT NULL,
|
|
canvas_project_id uuid,
|
|
CONSTRAINT generation_tasks_actual_points_check CHECK ((actual_points >= (0)::numeric)),
|
|
CONSTRAINT generation_tasks_estimated_points_check CHECK ((estimated_points >= (0)::numeric)),
|
|
CONSTRAINT generation_tasks_prepaid_points_check CHECK ((prepaid_points >= (0)::numeric)),
|
|
CONSTRAINT generation_tasks_token_count_source_check CHECK (((token_count_source)::text = ANY ((ARRAY['upstream'::character varying, 'local'::character varying, 'mixed'::character varying])::text[]))),
|
|
CONSTRAINT generation_tasks_status_check CHECK (((status)::text = ANY ((ARRAY['pending_submission'::character varying, 'submitting'::character varying, 'submitted'::character varying, 'processing'::character varying, 'result_ready'::character varying, 'downloading'::character varying, 'succeeded'::character varying, 'failed'::character varying, 'cancel_requested'::character varying, 'cancelled'::character varying])::text[]))),
|
|
CONSTRAINT generation_tasks_task_type_check CHECK (((task_type)::text = ANY ((ARRAY['prompt_reverse'::character varying, 'image_generation'::character varying, 'video_generation'::character varying, 'script_analysis'::character varying])::text[])))
|
|
);
|
|
|
|
|
|
--
|
|
-- Name: media_assets; Type: TABLE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TABLE public.media_assets (
|
|
id uuid DEFAULT gen_random_uuid() NOT NULL,
|
|
owner_user_id uuid,
|
|
storage_provider character varying(16) DEFAULT 'cos'::character varying NOT NULL,
|
|
object_key text NOT NULL,
|
|
public_url text NOT NULL,
|
|
original_name text,
|
|
display_name text,
|
|
mime_type character varying(120) NOT NULL,
|
|
size_bytes bigint NOT NULL,
|
|
sha256 character(64),
|
|
width integer,
|
|
height integer,
|
|
duration_ms bigint,
|
|
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
deleted_at timestamp with time zone,
|
|
CONSTRAINT media_assets_size_bytes_check CHECK ((size_bytes >= 0)),
|
|
CONSTRAINT media_assets_storage_provider_check CHECK (((storage_provider)::text = 'cos'::text))
|
|
);
|
|
|
|
|
|
--
|
|
-- Name: model_prices; Type: TABLE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TABLE public.model_prices (
|
|
id uuid DEFAULT gen_random_uuid() NOT NULL,
|
|
model_id uuid NOT NULL,
|
|
price_key character varying(20) NOT NULL,
|
|
unit character varying(20) NOT NULL,
|
|
price numeric(18,4) NOT NULL,
|
|
CONSTRAINT model_prices_price_check CHECK ((price >= (0)::numeric))
|
|
);
|
|
|
|
|
|
--
|
|
-- Name: models; Type: TABLE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TABLE public.models (
|
|
id uuid DEFAULT gen_random_uuid() NOT NULL,
|
|
channel_id uuid NOT NULL,
|
|
name public.citext NOT NULL,
|
|
model_type character varying(16) NOT NULL,
|
|
multimodal boolean,
|
|
text_billing_mode character varying(16),
|
|
enabled boolean DEFAULT true NOT NULL,
|
|
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
updated_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
deleted_at timestamp with time zone,
|
|
CONSTRAINT models_model_type_check CHECK (((model_type)::text = ANY ((ARRAY['text'::character varying, 'image'::character varying, 'video'::character varying])::text[]))),
|
|
CONSTRAINT models_text_billing_mode_check CHECK (((((model_type)::text = 'text'::text) AND ((text_billing_mode)::text = ANY ((ARRAY['per_request'::character varying, 'per_token'::character varying])::text[]))) OR (((model_type)::text <> 'text'::text) AND (text_billing_mode IS NULL))))
|
|
);
|
|
|
|
|
|
--
|
|
-- Name: payment_configs; Type: TABLE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TABLE public.payment_configs (
|
|
id uuid DEFAULT gen_random_uuid() NOT NULL,
|
|
name public.citext NOT NULL,
|
|
payment_type character varying(32) NOT NULL,
|
|
provider_code character varying(64) NOT NULL,
|
|
merchant_no text,
|
|
app_id text,
|
|
gateway_url text,
|
|
callback_url text,
|
|
secret_ciphertext text,
|
|
encryption_key_version character varying(32),
|
|
enabled boolean DEFAULT true NOT NULL,
|
|
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
updated_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
deleted_at timestamp with time zone,
|
|
CONSTRAINT payment_configs_payment_type_check CHECK (((payment_type)::text = ANY ((ARRAY['wechat'::character varying, 'alipay'::character varying, 'aggregate'::character varying])::text[])))
|
|
);
|
|
|
|
|
|
--
|
|
-- Name: point_exchange_rate_settings; Type: TABLE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TABLE public.point_exchange_rate_settings (
|
|
id smallint DEFAULT 1 NOT NULL,
|
|
points_per_cny numeric(12,4) NOT NULL,
|
|
updated_by uuid,
|
|
updated_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
CONSTRAINT point_exchange_rate_settings_id_check CHECK ((id = 1)),
|
|
CONSTRAINT point_exchange_rate_settings_points_per_cny_check CHECK (((points_per_cny > (0)::numeric) AND (points_per_cny <= (1000000)::numeric)))
|
|
);
|
|
|
|
|
|
--
|
|
-- Name: point_ledger; Type: TABLE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TABLE public.point_ledger (
|
|
id bigint NOT NULL,
|
|
user_id uuid NOT NULL,
|
|
change_amount numeric(18,2) NOT NULL,
|
|
balance_after numeric(18,2) NOT NULL,
|
|
business_type character varying(32) NOT NULL,
|
|
business_id text,
|
|
remark text,
|
|
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
idempotency_key character varying(160)
|
|
);
|
|
|
|
|
|
--
|
|
-- Name: point_ledger_id_seq; Type: SEQUENCE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE SEQUENCE public.point_ledger_id_seq
|
|
START WITH 1
|
|
INCREMENT BY 1
|
|
NO MINVALUE
|
|
NO MAXVALUE
|
|
CACHE 1;
|
|
|
|
|
|
--
|
|
-- Name: point_ledger_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER SEQUENCE public.point_ledger_id_seq OWNED BY public.point_ledger.id;
|
|
|
|
|
|
--
|
|
-- Name: point_packages; Type: TABLE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TABLE public.point_packages (
|
|
id uuid DEFAULT gen_random_uuid() NOT NULL,
|
|
original_amount numeric(12,2) NOT NULL,
|
|
points numeric(18,2) NOT NULL,
|
|
discount_rate numeric(4,2) DEFAULT 1 NOT NULL,
|
|
discount_starts_at timestamp with time zone,
|
|
discount_ends_at timestamp with time zone,
|
|
enabled boolean DEFAULT true NOT NULL,
|
|
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
updated_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
deleted_at timestamp with time zone,
|
|
CONSTRAINT point_packages_check CHECK (((discount_starts_at IS NULL) OR (discount_ends_at IS NULL) OR (discount_ends_at > discount_starts_at))),
|
|
CONSTRAINT point_packages_discount_rate_check CHECK (((discount_rate >= 0.01) AND (discount_rate <= (1)::numeric))),
|
|
CONSTRAINT point_packages_original_amount_check CHECK ((original_amount > (0)::numeric)),
|
|
CONSTRAINT point_packages_points_check CHECK ((points > (0)::numeric))
|
|
);
|
|
|
|
|
|
--
|
|
-- Name: project_assets; Type: TABLE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TABLE public.project_assets (
|
|
id uuid DEFAULT gen_random_uuid() NOT NULL,
|
|
project_id uuid NOT NULL,
|
|
source_episode_id uuid,
|
|
asset_type character varying(20) NOT NULL,
|
|
name character varying(200) NOT NULL,
|
|
description text,
|
|
image_prompt text,
|
|
appearances jsonb DEFAULT '[]'::jsonb NOT NULL,
|
|
image_asset_id uuid,
|
|
audio_asset_id uuid,
|
|
user_edited boolean DEFAULT false NOT NULL,
|
|
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
updated_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
deleted_at timestamp with time zone,
|
|
aliases jsonb DEFAULT '[]'::jsonb NOT NULL,
|
|
attributes jsonb DEFAULT '{}'::jsonb NOT NULL,
|
|
ai_description text,
|
|
source_parse_task_id uuid,
|
|
CONSTRAINT project_assets_asset_type_check CHECK (((asset_type)::text = ANY ((ARRAY['character'::character varying, 'scene'::character varying, 'prop'::character varying, 'custom'::character varying])::text[])))
|
|
);
|
|
|
|
|
|
--
|
|
-- Name: project_episodes; Type: TABLE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TABLE public.project_episodes (
|
|
id uuid DEFAULT gen_random_uuid() NOT NULL,
|
|
project_id uuid NOT NULL,
|
|
episode_no integer NOT NULL,
|
|
name character varying(160) NOT NULL,
|
|
cover_asset_id uuid,
|
|
source_video_asset_id uuid,
|
|
subtitle_asset_id uuid,
|
|
audio_source character varying(24) DEFAULT 'video_audio'::character varying NOT NULL,
|
|
source_language character varying(16),
|
|
status character varying(32) DEFAULT 'draft'::character varying NOT NULL,
|
|
analysis_message text,
|
|
redraw_script text,
|
|
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
updated_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
deleted_at timestamp with time zone,
|
|
CONSTRAINT project_episodes_audio_source_check CHECK (((audio_source)::text = ANY ((ARRAY['video_audio'::character varying, 'subtitle_file'::character varying])::text[]))),
|
|
CONSTRAINT project_episodes_episode_no_check CHECK ((episode_no > 0)),
|
|
CONSTRAINT project_episodes_status_check CHECK (((status)::text = ANY ((ARRAY['draft'::character varying, 'uploaded'::character varying, 'analyzing'::character varying, 'review'::character varying, 'generating'::character varying, 'failed'::character varying])::text[])))
|
|
);
|
|
|
|
|
|
--
|
|
-- Name: project_model_configs; Type: TABLE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TABLE public.project_model_configs (
|
|
id uuid DEFAULT gen_random_uuid() NOT NULL,
|
|
project_id uuid NOT NULL,
|
|
purpose character varying(32) NOT NULL,
|
|
model_id uuid NOT NULL,
|
|
prompt_id uuid,
|
|
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
updated_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
settings jsonb DEFAULT '{}'::jsonb NOT NULL,
|
|
model_type character varying(16) NOT NULL,
|
|
CONSTRAINT project_model_configs_model_type_check CHECK (((model_type)::text = ANY ((ARRAY['text'::character varying, 'image'::character varying, 'video'::character varying])::text[]))),
|
|
CONSTRAINT project_model_configs_purpose_check CHECK (((purpose)::text = ANY ((ARRAY['prompt_reverse'::character varying, 'image_generation'::character varying, 'video_generation'::character varying])::text[])))
|
|
);
|
|
|
|
|
|
--
|
|
-- Name: project_styles; Type: TABLE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TABLE public.project_styles (
|
|
id uuid DEFAULT gen_random_uuid() NOT NULL,
|
|
name public.citext NOT NULL,
|
|
image_key text NOT NULL,
|
|
image_url text,
|
|
image_mime character varying(100),
|
|
image_size bigint,
|
|
image_width integer,
|
|
image_height integer,
|
|
deleted_at timestamp with time zone,
|
|
sort_order integer DEFAULT 0 NOT NULL
|
|
);
|
|
|
|
--
|
|
-- Name: inspiration_gallery_items; Type: TABLE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TABLE public.inspiration_gallery_items (
|
|
id uuid DEFAULT gen_random_uuid() NOT NULL,
|
|
media_type character varying(16) NOT NULL,
|
|
media_key text NOT NULL,
|
|
media_url text NOT NULL,
|
|
cover_key text NOT NULL,
|
|
cover_url text NOT NULL,
|
|
media_mime character varying(100) NOT NULL,
|
|
media_size bigint NOT NULL,
|
|
media_width integer NOT NULL,
|
|
media_height integer NOT NULL,
|
|
prompt text NOT NULL,
|
|
status character varying(16) DEFAULT 'draft'::character varying NOT NULL,
|
|
sort_order integer DEFAULT 0 NOT NULL,
|
|
published_at timestamp with time zone,
|
|
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
updated_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
deleted_at timestamp with time zone,
|
|
CONSTRAINT inspiration_gallery_items_media_height_check CHECK ((media_height > 0)),
|
|
CONSTRAINT inspiration_gallery_items_media_size_check CHECK ((media_size > 0)),
|
|
CONSTRAINT inspiration_gallery_items_media_type_check CHECK (((media_type)::text = ANY ((ARRAY['image'::character varying, 'video'::character varying])::text[]))),
|
|
CONSTRAINT inspiration_gallery_items_media_width_check CHECK ((media_width > 0)),
|
|
CONSTRAINT inspiration_gallery_items_prompt_check CHECK ((length(TRIM(BOTH FROM prompt)) > 0)),
|
|
CONSTRAINT inspiration_gallery_items_status_check CHECK (((status)::text = ANY ((ARRAY['draft'::character varying, 'published'::character varying])::text[])))
|
|
);
|
|
|
|
ALTER TABLE ONLY public.inspiration_gallery_items
|
|
ADD CONSTRAINT inspiration_gallery_items_pkey PRIMARY KEY (id);
|
|
|
|
CREATE INDEX idx_inspiration_gallery_public ON public.inspiration_gallery_items USING btree (status, sort_order, published_at DESC) WHERE (deleted_at IS NULL);
|
|
|
|
CREATE TRIGGER inspiration_gallery_items_updated_at BEFORE UPDATE ON public.inspiration_gallery_items FOR EACH ROW EXECUTE FUNCTION public.set_updated_at();
|
|
|
|
--
|
|
-- Name: inspiration_gallery_references; Type: TABLE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TABLE public.inspiration_gallery_references (
|
|
id uuid DEFAULT gen_random_uuid() NOT NULL,
|
|
inspiration_id uuid NOT NULL,
|
|
image_key text NOT NULL,
|
|
image_url text NOT NULL,
|
|
image_mime character varying(100) NOT NULL,
|
|
image_size bigint NOT NULL,
|
|
image_width integer NOT NULL,
|
|
image_height integer NOT NULL,
|
|
sort_order integer NOT NULL,
|
|
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
updated_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
CONSTRAINT inspiration_gallery_references_image_mime_check CHECK (((image_mime)::text ~~ 'image/%'::text)),
|
|
CONSTRAINT inspiration_gallery_references_image_size_check CHECK (((image_size > 0) AND (image_size <= 3145728))),
|
|
CONSTRAINT inspiration_gallery_references_image_width_check CHECK ((image_width > 0)),
|
|
CONSTRAINT inspiration_gallery_references_image_height_check CHECK ((image_height > 0)),
|
|
CONSTRAINT inspiration_gallery_references_sort_order_check CHECK (((sort_order >= 0) AND (sort_order < 3)))
|
|
);
|
|
|
|
ALTER TABLE ONLY public.inspiration_gallery_references
|
|
ADD CONSTRAINT inspiration_gallery_references_pkey PRIMARY KEY (id);
|
|
|
|
ALTER TABLE ONLY public.inspiration_gallery_references
|
|
ADD CONSTRAINT inspiration_gallery_references_item_sort_key UNIQUE (inspiration_id, sort_order);
|
|
|
|
ALTER TABLE ONLY public.inspiration_gallery_references
|
|
ADD CONSTRAINT inspiration_gallery_references_item_fkey FOREIGN KEY (inspiration_id) REFERENCES public.inspiration_gallery_items(id) ON DELETE CASCADE;
|
|
|
|
CREATE INDEX idx_inspiration_gallery_references_item ON public.inspiration_gallery_references USING btree (inspiration_id, sort_order);
|
|
|
|
CREATE TRIGGER inspiration_gallery_references_updated_at BEFORE UPDATE ON public.inspiration_gallery_references FOR EACH ROW EXECUTE FUNCTION public.set_updated_at();
|
|
|
|
|
|
--
|
|
-- Name: prompts; Type: TABLE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TABLE public.prompts (
|
|
id uuid DEFAULT gen_random_uuid() NOT NULL,
|
|
name public.citext NOT NULL,
|
|
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
updated_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
deleted_at timestamp with time zone,
|
|
type character varying(50) NOT NULL,
|
|
content text NOT NULL,
|
|
scope character varying(20) DEFAULT 'system'::character varying NOT NULL,
|
|
owner_user_id uuid,
|
|
CONSTRAINT prompts_scope_owner_check CHECK (((((scope)::text = 'system'::text) AND (owner_user_id IS NULL)) OR (((scope)::text = 'user'::text) AND (owner_user_id IS NOT NULL))))
|
|
);
|
|
|
|
--
|
|
-- Name: recharge_orders; Type: TABLE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TABLE public.recharge_orders (
|
|
id uuid DEFAULT gen_random_uuid() NOT NULL,
|
|
order_no character varying(40) NOT NULL,
|
|
user_id uuid NOT NULL,
|
|
user_uid character(8) NOT NULL,
|
|
package_id uuid,
|
|
payment_config_id uuid,
|
|
recharge_amount numeric(12,2) NOT NULL,
|
|
received_points numeric(18,2) NOT NULL,
|
|
status character varying(20) NOT NULL,
|
|
third_party_trade_no text,
|
|
original_amount_snapshot numeric(12,2),
|
|
discount_rate_snapshot numeric(4,2),
|
|
actual_amount_snapshot numeric(12,2),
|
|
points_snapshot numeric(18,2),
|
|
paid_at timestamp with time zone,
|
|
remark text,
|
|
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
updated_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
CONSTRAINT recharge_orders_received_points_check CHECK ((received_points >= (0)::numeric)),
|
|
CONSTRAINT recharge_orders_recharge_amount_check CHECK ((recharge_amount >= (0)::numeric)),
|
|
CONSTRAINT recharge_orders_status_check CHECK (((status)::text = ANY ((ARRAY['pending'::character varying, 'paid'::character varying, 'closed'::character varying, 'failed'::character varying, 'refunded'::character varying])::text[])))
|
|
);
|
|
|
|
|
|
--
|
|
-- Name: redemption_batches; Type: TABLE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TABLE public.redemption_batches (
|
|
id uuid DEFAULT gen_random_uuid() NOT NULL,
|
|
name public.citext NOT NULL,
|
|
points numeric(18,2) NOT NULL,
|
|
quantity integer NOT NULL,
|
|
expires_at timestamp with time zone,
|
|
created_by uuid NOT NULL,
|
|
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
CONSTRAINT redemption_batches_points_check CHECK (((points >= (1)::numeric) AND (points <= (100)::numeric))),
|
|
CONSTRAINT redemption_batches_quantity_check CHECK (((quantity >= 1) AND (quantity <= 10)))
|
|
);
|
|
|
|
|
|
--
|
|
-- Name: redemption_codes; Type: TABLE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TABLE public.redemption_codes (
|
|
id uuid DEFAULT gen_random_uuid() NOT NULL,
|
|
batch_id uuid NOT NULL,
|
|
code_hash character(64) NOT NULL,
|
|
code_mask character varying(32) NOT NULL,
|
|
code character varying(40),
|
|
points numeric(18,2) NOT NULL,
|
|
status character varying(16) DEFAULT 'unused'::character varying NOT NULL,
|
|
redeemed_by uuid,
|
|
redeemed_at timestamp with time zone,
|
|
expires_at timestamp with time zone,
|
|
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
CONSTRAINT redemption_codes_points_check CHECK (((points >= (1)::numeric) AND (points <= (100)::numeric))),
|
|
CONSTRAINT redemption_codes_status_check CHECK (((status)::text = ANY ((ARRAY['unused'::character varying, 'used'::character varying, 'expired'::character varying])::text[])))
|
|
);
|
|
|
|
|
|
--
|
|
-- Name: user_model_configs; Type: TABLE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TABLE public.user_model_configs (
|
|
id uuid DEFAULT gen_random_uuid() NOT NULL,
|
|
user_id uuid NOT NULL,
|
|
purpose character varying(32) NOT NULL,
|
|
model_id uuid NOT NULL,
|
|
prompt_id uuid,
|
|
settings jsonb DEFAULT '{}'::jsonb NOT NULL,
|
|
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
updated_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
project_type character varying(24) DEFAULT 'video_redraw'::character varying NOT NULL,
|
|
model_type character varying(16) NOT NULL,
|
|
CONSTRAINT user_model_configs_model_type_check CHECK (((model_type)::text = ANY ((ARRAY['text'::character varying, 'image'::character varying, 'video'::character varying])::text[]))),
|
|
CONSTRAINT user_model_configs_project_type_check CHECK (((project_type)::text = ANY ((ARRAY['premium_drama'::character varying, 'video_redraw'::character varying, 'script_analysis'::character varying])::text[]))),
|
|
CONSTRAINT user_model_configs_purpose_check CHECK (((purpose)::text = ANY ((ARRAY['prompt_reverse'::character varying, 'image_generation'::character varying, 'video_generation'::character varying])::text[])))
|
|
);
|
|
|
|
|
|
--
|
|
-- Name: user_prompt_preferences; Type: TABLE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TABLE public.user_prompt_preferences (
|
|
id uuid DEFAULT gen_random_uuid() NOT NULL,
|
|
user_id uuid NOT NULL,
|
|
prompt_id uuid NOT NULL,
|
|
prompt_type character varying(64) NOT NULL,
|
|
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
updated_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL
|
|
);
|
|
|
|
|
|
--
|
|
-- Name: web_refresh_tokens; Type: TABLE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TABLE public.web_refresh_tokens (
|
|
id uuid DEFAULT gen_random_uuid() NOT NULL,
|
|
user_id uuid NOT NULL,
|
|
token_hash character(64) NOT NULL,
|
|
session_version bigint NOT NULL,
|
|
expires_at timestamp with time zone NOT NULL,
|
|
revoked_at timestamp with time zone,
|
|
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL
|
|
);
|
|
|
|
|
|
--
|
|
-- Name: web_users; Type: TABLE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TABLE public.web_users (
|
|
id uuid DEFAULT gen_random_uuid() NOT NULL,
|
|
uid character(8) NOT NULL,
|
|
username public.citext NOT NULL,
|
|
password_hash text NOT NULL,
|
|
point_balance numeric(18,2) DEFAULT 0 NOT NULL,
|
|
daily_limit numeric(18,2) DEFAULT 9999 NOT NULL,
|
|
enabled boolean DEFAULT true NOT NULL,
|
|
session_version bigint DEFAULT 1 NOT NULL,
|
|
last_online_at timestamp with time zone,
|
|
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
updated_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
deleted_at timestamp with time zone,
|
|
account public.citext NOT NULL,
|
|
avatar_url text,
|
|
avatar_key text,
|
|
CONSTRAINT web_users_daily_limit_check CHECK ((daily_limit >= (0)::numeric)),
|
|
CONSTRAINT web_users_point_balance_check CHECK ((point_balance >= (0)::numeric)),
|
|
CONSTRAINT web_users_uid_check CHECK ((uid ~ '^[1-9][0-9]{7}$'::text))
|
|
);
|
|
|
|
|
|
--
|
|
-- Name: admin_audit_logs id; Type: DEFAULT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.admin_audit_logs ALTER COLUMN id SET DEFAULT nextval('public.admin_audit_logs_id_seq'::regclass);
|
|
|
|
|
|
--
|
|
-- Name: channel_balance_snapshots id; Type: DEFAULT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.channel_balance_snapshots ALTER COLUMN id SET DEFAULT nextval('public.channel_balance_snapshots_id_seq'::regclass);
|
|
|
|
|
|
--
|
|
-- Name: point_ledger id; Type: DEFAULT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.point_ledger ALTER COLUMN id SET DEFAULT nextval('public.point_ledger_id_seq'::regclass);
|
|
|
|
|
|
--
|
|
-- Name: admin_audit_logs admin_audit_logs_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.admin_audit_logs
|
|
ADD CONSTRAINT admin_audit_logs_pkey PRIMARY KEY (id);
|
|
|
|
|
|
--
|
|
-- Name: admin_refresh_tokens admin_refresh_tokens_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.admin_refresh_tokens
|
|
ADD CONSTRAINT admin_refresh_tokens_pkey PRIMARY KEY (id);
|
|
|
|
|
|
--
|
|
-- Name: admin_refresh_tokens admin_refresh_tokens_token_hash_key; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.admin_refresh_tokens
|
|
ADD CONSTRAINT admin_refresh_tokens_token_hash_key UNIQUE (token_hash);
|
|
|
|
|
|
--
|
|
-- Name: admin_users admin_users_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.admin_users
|
|
ADD CONSTRAINT admin_users_pkey PRIMARY KEY (id);
|
|
|
|
|
|
--
|
|
-- Name: admin_users admin_users_username_key; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.admin_users
|
|
ADD CONSTRAINT admin_users_username_key UNIQUE (username);
|
|
|
|
|
|
--
|
|
-- Name: announcements announcements_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.announcements
|
|
ADD CONSTRAINT announcements_pkey PRIMARY KEY (id);
|
|
|
|
|
|
--
|
|
-- Name: canvas_projects canvas_projects_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.canvas_projects
|
|
ADD CONSTRAINT canvas_projects_pkey PRIMARY KEY (id);
|
|
|
|
|
|
--
|
|
-- Name: channel_asset_cache channel_asset_cache_channel_id_media_asset_id_key; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.channel_asset_cache
|
|
ADD CONSTRAINT channel_asset_cache_channel_id_media_asset_id_key UNIQUE (channel_id, media_asset_id);
|
|
|
|
|
|
--
|
|
-- Name: channel_asset_cache channel_asset_cache_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.channel_asset_cache
|
|
ADD CONSTRAINT channel_asset_cache_pkey PRIMARY KEY (id);
|
|
|
|
|
|
--
|
|
-- Name: channel_balance_snapshots channel_balance_snapshots_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.channel_balance_snapshots
|
|
ADD CONSTRAINT channel_balance_snapshots_pkey PRIMARY KEY (id);
|
|
|
|
|
|
--
|
|
-- Name: channels channels_name_key; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.channels
|
|
ADD CONSTRAINT channels_name_key UNIQUE (name);
|
|
|
|
|
|
--
|
|
-- Name: channels channels_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.channels
|
|
ADD CONSTRAINT channels_pkey PRIMARY KEY (id);
|
|
|
|
|
|
--
|
|
-- Name: creative_projects creative_projects_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.creative_projects
|
|
ADD CONSTRAINT creative_projects_pkey PRIMARY KEY (id);
|
|
|
|
|
|
--
|
|
-- Name: drama_import_sessions drama_import_sessions_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.drama_import_sessions
|
|
ADD CONSTRAINT drama_import_sessions_pkey PRIMARY KEY (id);
|
|
|
|
|
|
--
|
|
-- Name: drama_parse_batches drama_parse_batches_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.drama_parse_batches
|
|
ADD CONSTRAINT drama_parse_batches_pkey PRIMARY KEY (id);
|
|
|
|
|
|
--
|
|
-- Name: drama_parse_tasks drama_parse_tasks_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.drama_parse_tasks
|
|
ADD CONSTRAINT drama_parse_tasks_pkey PRIMARY KEY (id);
|
|
|
|
|
|
--
|
|
-- Name: drama_parse_tasks drama_parse_tasks_request_id_key; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.drama_parse_tasks
|
|
ADD CONSTRAINT drama_parse_tasks_request_id_key UNIQUE (request_id);
|
|
|
|
|
|
--
|
|
-- Name: episode_continuity_contexts episode_continuity_contexts_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.episode_continuity_contexts
|
|
ADD CONSTRAINT episode_continuity_contexts_pkey PRIMARY KEY (episode_id);
|
|
|
|
|
|
--
|
|
-- Name: episode_sources episode_sources_episode_id_key; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.episode_sources
|
|
ADD CONSTRAINT episode_sources_episode_id_key UNIQUE (episode_id);
|
|
|
|
|
|
--
|
|
-- Name: episode_sources episode_sources_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.episode_sources
|
|
ADD CONSTRAINT episode_sources_pkey PRIMARY KEY (id);
|
|
|
|
|
|
--
|
|
-- Name: episode_storyboards episode_storyboards_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.episode_storyboards
|
|
ADD CONSTRAINT episode_storyboards_pkey PRIMARY KEY (id);
|
|
|
|
|
|
--
|
|
-- Name: generation_outputs generation_outputs_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.generation_outputs
|
|
ADD CONSTRAINT generation_outputs_pkey PRIMARY KEY (id);
|
|
|
|
|
|
--
|
|
-- Name: generation_outputs generation_outputs_task_id_sequence_no_key; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.generation_outputs
|
|
ADD CONSTRAINT generation_outputs_task_id_sequence_no_key UNIQUE (task_id, sequence_no);
|
|
|
|
|
|
--
|
|
-- Name: generation_tasks generation_tasks_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.generation_tasks
|
|
ADD CONSTRAINT generation_tasks_pkey PRIMARY KEY (id);
|
|
|
|
|
|
--
|
|
-- Name: generation_tasks generation_tasks_request_id_key; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.generation_tasks
|
|
ADD CONSTRAINT generation_tasks_request_id_key UNIQUE (request_id);
|
|
|
|
|
|
--
|
|
-- Name: media_assets media_assets_object_key_key; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.media_assets
|
|
ADD CONSTRAINT media_assets_object_key_key UNIQUE (object_key);
|
|
|
|
|
|
--
|
|
-- Name: media_assets media_assets_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.media_assets
|
|
ADD CONSTRAINT media_assets_pkey PRIMARY KEY (id);
|
|
|
|
|
|
--
|
|
-- Name: model_prices model_prices_model_id_price_key_key; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.model_prices
|
|
ADD CONSTRAINT model_prices_model_id_price_key_key UNIQUE (model_id, price_key);
|
|
|
|
|
|
--
|
|
-- Name: model_prices model_prices_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.model_prices
|
|
ADD CONSTRAINT model_prices_pkey PRIMARY KEY (id);
|
|
|
|
|
|
--
|
|
-- Name: models models_channel_id_name_key; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.models
|
|
ADD CONSTRAINT models_channel_id_name_key UNIQUE (channel_id, name);
|
|
|
|
|
|
--
|
|
-- Name: models models_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.models
|
|
ADD CONSTRAINT models_pkey PRIMARY KEY (id);
|
|
|
|
|
|
--
|
|
-- Name: payment_configs payment_configs_name_key; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.payment_configs
|
|
ADD CONSTRAINT payment_configs_name_key UNIQUE (name);
|
|
|
|
|
|
--
|
|
-- Name: payment_configs payment_configs_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.payment_configs
|
|
ADD CONSTRAINT payment_configs_pkey PRIMARY KEY (id);
|
|
|
|
|
|
--
|
|
-- Name: point_exchange_rate_settings point_exchange_rate_settings_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.point_exchange_rate_settings
|
|
ADD CONSTRAINT point_exchange_rate_settings_pkey PRIMARY KEY (id);
|
|
|
|
|
|
--
|
|
-- Name: point_ledger point_ledger_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.point_ledger
|
|
ADD CONSTRAINT point_ledger_pkey PRIMARY KEY (id);
|
|
|
|
|
|
--
|
|
-- Name: point_packages point_packages_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.point_packages
|
|
ADD CONSTRAINT point_packages_pkey PRIMARY KEY (id);
|
|
|
|
|
|
--
|
|
-- Name: project_assets project_assets_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.project_assets
|
|
ADD CONSTRAINT project_assets_pkey PRIMARY KEY (id);
|
|
|
|
|
|
--
|
|
-- Name: project_episodes project_episodes_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.project_episodes
|
|
ADD CONSTRAINT project_episodes_pkey PRIMARY KEY (id);
|
|
|
|
|
|
--
|
|
-- Name: project_model_configs project_model_configs_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.project_model_configs
|
|
ADD CONSTRAINT project_model_configs_pkey PRIMARY KEY (id);
|
|
|
|
|
|
--
|
|
-- Name: project_model_configs project_model_configs_project_id_purpose_key; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.project_model_configs
|
|
ADD CONSTRAINT project_model_configs_project_id_purpose_key UNIQUE (project_id, purpose);
|
|
|
|
|
|
--
|
|
-- Name: project_styles project_styles_name_key; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.project_styles
|
|
ADD CONSTRAINT project_styles_name_key UNIQUE (name);
|
|
|
|
|
|
--
|
|
-- Name: project_styles project_styles_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.project_styles
|
|
ADD CONSTRAINT project_styles_pkey PRIMARY KEY (id);
|
|
|
|
|
|
--
|
|
-- Name: prompts prompts_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.prompts
|
|
ADD CONSTRAINT prompts_pkey PRIMARY KEY (id);
|
|
|
|
|
|
--
|
|
-- Name: recharge_orders recharge_orders_order_no_key; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.recharge_orders
|
|
ADD CONSTRAINT recharge_orders_order_no_key UNIQUE (order_no);
|
|
|
|
|
|
--
|
|
-- Name: recharge_orders recharge_orders_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.recharge_orders
|
|
ADD CONSTRAINT recharge_orders_pkey PRIMARY KEY (id);
|
|
|
|
|
|
--
|
|
-- Name: redemption_batches redemption_batches_name_key; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.redemption_batches
|
|
ADD CONSTRAINT redemption_batches_name_key UNIQUE (name);
|
|
|
|
|
|
--
|
|
-- Name: redemption_batches redemption_batches_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.redemption_batches
|
|
ADD CONSTRAINT redemption_batches_pkey PRIMARY KEY (id);
|
|
|
|
|
|
--
|
|
-- Name: redemption_codes redemption_codes_code_hash_key; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.redemption_codes
|
|
ADD CONSTRAINT redemption_codes_code_hash_key UNIQUE (code_hash);
|
|
|
|
|
|
--
|
|
-- Name: redemption_codes redemption_codes_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.redemption_codes
|
|
ADD CONSTRAINT redemption_codes_pkey PRIMARY KEY (id);
|
|
|
|
|
|
--
|
|
-- Name: user_model_configs user_model_configs_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.user_model_configs
|
|
ADD CONSTRAINT user_model_configs_pkey PRIMARY KEY (id);
|
|
|
|
|
|
--
|
|
-- Name: user_prompt_preferences user_prompt_preferences_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.user_prompt_preferences
|
|
ADD CONSTRAINT user_prompt_preferences_pkey PRIMARY KEY (id);
|
|
|
|
|
|
--
|
|
-- Name: user_prompt_preferences user_prompt_preferences_user_id_prompt_type_key; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.user_prompt_preferences
|
|
ADD CONSTRAINT user_prompt_preferences_user_id_prompt_type_key UNIQUE (user_id, prompt_type);
|
|
|
|
|
|
--
|
|
-- Name: web_refresh_tokens web_refresh_tokens_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.web_refresh_tokens
|
|
ADD CONSTRAINT web_refresh_tokens_pkey PRIMARY KEY (id);
|
|
|
|
|
|
--
|
|
-- Name: web_refresh_tokens web_refresh_tokens_token_hash_key; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.web_refresh_tokens
|
|
ADD CONSTRAINT web_refresh_tokens_token_hash_key UNIQUE (token_hash);
|
|
|
|
|
|
--
|
|
-- Name: web_users web_users_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.web_users
|
|
ADD CONSTRAINT web_users_pkey PRIMARY KEY (id);
|
|
|
|
|
|
--
|
|
-- Name: web_users web_users_uid_key; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.web_users
|
|
ADD CONSTRAINT web_users_uid_key UNIQUE (uid);
|
|
|
|
|
|
--
|
|
-- Name: web_users web_users_username_key; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.web_users
|
|
ADD CONSTRAINT web_users_username_key UNIQUE (username);
|
|
|
|
|
|
--
|
|
-- Name: idx_admin_audit_logs_created_at; Type: INDEX; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE INDEX idx_admin_audit_logs_created_at ON public.admin_audit_logs USING btree (created_at DESC);
|
|
|
|
|
|
--
|
|
-- Name: idx_canvas_projects_user_updated; Type: INDEX; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE INDEX idx_canvas_projects_user_updated ON public.canvas_projects USING btree (user_id, updated_at DESC) WHERE (deleted_at IS NULL);
|
|
|
|
|
|
--
|
|
-- Name: idx_channel_balance_latest; Type: INDEX; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE INDEX idx_channel_balance_latest ON public.channel_balance_snapshots USING btree (channel_id, synced_at DESC);
|
|
|
|
|
|
--
|
|
-- Name: idx_creative_projects_user_updated; Type: INDEX; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE INDEX idx_creative_projects_user_updated ON public.creative_projects USING btree (user_id, updated_at DESC) WHERE (deleted_at IS NULL);
|
|
|
|
|
|
--
|
|
-- Name: idx_drama_import_sessions_expiry; Type: INDEX; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE INDEX idx_drama_import_sessions_expiry ON public.drama_import_sessions USING btree (expires_at) WHERE (consumed_at IS NULL);
|
|
|
|
|
|
--
|
|
-- Name: idx_drama_parse_tasks_recovery; Type: INDEX; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE INDEX idx_drama_parse_tasks_recovery ON public.drama_parse_tasks USING btree (status, lease_until) WHERE ((status)::text = ANY ((ARRAY['queued'::character varying, 'running'::character varying, 'retry_wait'::character varying])::text[]));
|
|
|
|
|
|
--
|
|
-- Name: idx_drama_parse_tasks_user_time; Type: INDEX; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE INDEX idx_drama_parse_tasks_user_time ON public.drama_parse_tasks USING btree (user_id, created_at DESC);
|
|
|
|
|
|
--
|
|
-- Name: idx_generation_tasks_active_capacity; Type: INDEX; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE INDEX idx_generation_tasks_active_capacity ON public.generation_tasks USING btree (channel_id, user_id) WHERE (slot_reserved AND (slot_released_at IS NULL));
|
|
|
|
|
|
--
|
|
-- Name: idx_generation_tasks_canvas_history; Type: INDEX; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE INDEX idx_generation_tasks_canvas_history ON public.generation_tasks USING btree (user_id, canvas_project_id, task_type, created_at DESC) WHERE (canvas_project_id IS NOT NULL);
|
|
|
|
|
|
--
|
|
-- Name: idx_generation_tasks_dispatch; Type: INDEX; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE INDEX idx_generation_tasks_dispatch ON public.generation_tasks USING btree (channel_id, status, next_submit_at, created_at) WHERE ((status)::text = 'pending_submission'::text);
|
|
|
|
|
|
--
|
|
-- Name: idx_generation_tasks_episode_time; Type: INDEX; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE INDEX idx_generation_tasks_episode_time ON public.generation_tasks USING btree (episode_id, created_at DESC) WHERE (episode_id IS NOT NULL);
|
|
|
|
|
|
--
|
|
-- Name: idx_generation_tasks_poll; Type: INDEX; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE INDEX idx_generation_tasks_poll ON public.generation_tasks USING btree (status, next_poll_at) WHERE ((status)::text = ANY ((ARRAY['submitted'::character varying, 'processing'::character varying, 'cancel_requested'::character varying])::text[]));
|
|
|
|
|
|
--
|
|
-- Name: idx_generation_tasks_user_time; Type: INDEX; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE INDEX idx_generation_tasks_user_time ON public.generation_tasks USING btree (user_id, created_at DESC);
|
|
|
|
|
|
--
|
|
-- Name: idx_media_assets_owner_time; Type: INDEX; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE INDEX idx_media_assets_owner_time ON public.media_assets USING btree (owner_user_id, created_at DESC);
|
|
|
|
|
|
--
|
|
-- Name: idx_point_ledger_user_time; Type: INDEX; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE INDEX idx_point_ledger_user_time ON public.point_ledger USING btree (user_id, created_at DESC);
|
|
|
|
|
|
--
|
|
-- Name: idx_project_assets_project_type; Type: INDEX; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE INDEX idx_project_assets_project_type ON public.project_assets USING btree (project_id, asset_type) WHERE (deleted_at IS NULL);
|
|
|
|
|
|
--
|
|
-- Name: idx_project_episodes_project_updated; Type: INDEX; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE INDEX idx_project_episodes_project_updated ON public.project_episodes USING btree (project_id, updated_at DESC) WHERE (deleted_at IS NULL);
|
|
|
|
|
|
--
|
|
-- Name: idx_prompts_owner; Type: INDEX; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE INDEX idx_prompts_owner ON public.prompts USING btree (owner_user_id) WHERE (owner_user_id IS NOT NULL);
|
|
|
|
|
|
--
|
|
-- Name: idx_prompts_type_scope; Type: INDEX; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE INDEX idx_prompts_type_scope ON public.prompts USING btree (type, scope);
|
|
|
|
|
|
--
|
|
-- Name: idx_recharge_orders_created_at; Type: INDEX; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE INDEX idx_recharge_orders_created_at ON public.recharge_orders USING btree (created_at DESC);
|
|
|
|
|
|
--
|
|
-- Name: idx_user_model_configs_user; Type: INDEX; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE INDEX idx_user_model_configs_user ON public.user_model_configs USING btree (user_id);
|
|
|
|
|
|
--
|
|
-- Name: idx_user_prompt_preferences_user; Type: INDEX; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE INDEX idx_user_prompt_preferences_user ON public.user_prompt_preferences USING btree (user_id);
|
|
|
|
|
|
--
|
|
-- Name: idx_web_refresh_tokens_user_active; Type: INDEX; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE INDEX idx_web_refresh_tokens_user_active ON public.web_refresh_tokens USING btree (user_id, expires_at) WHERE (revoked_at IS NULL);
|
|
|
|
|
|
--
|
|
-- Name: idx_web_users_account; Type: INDEX; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE UNIQUE INDEX idx_web_users_account ON public.web_users USING btree (account);
|
|
|
|
|
|
--
|
|
-- Name: idx_web_users_active; Type: INDEX; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE INDEX idx_web_users_active ON public.web_users USING btree (created_at DESC) WHERE (deleted_at IS NULL);
|
|
|
|
|
|
--
|
|
-- Name: uq_canvas_projects_user_name; Type: INDEX; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE UNIQUE INDEX uq_canvas_projects_user_name ON public.canvas_projects USING btree (user_id, lower((name)::text)) WHERE (deleted_at IS NULL);
|
|
|
|
|
|
--
|
|
-- Name: uq_creative_projects_user_type_name; Type: INDEX; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE UNIQUE INDEX uq_creative_projects_user_type_name ON public.creative_projects USING btree (user_id, project_type, lower((name)::text)) WHERE (deleted_at IS NULL);
|
|
|
|
|
|
--
|
|
-- Name: uq_drama_episode_active_parse; Type: INDEX; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE UNIQUE INDEX uq_drama_episode_active_parse ON public.drama_parse_tasks USING btree (episode_id) WHERE ((status)::text = ANY ((ARRAY['queued'::character varying, 'running'::character varying, 'retry_wait'::character varying, 'cancel_requested'::character varying])::text[]));
|
|
|
|
|
|
--
|
|
-- Name: uq_episode_storyboards_sequence; Type: INDEX; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE UNIQUE INDEX uq_episode_storyboards_sequence ON public.episode_storyboards USING btree (episode_id, sequence_no) WHERE (deleted_at IS NULL);
|
|
|
|
|
|
--
|
|
-- Name: uq_episode_storyboards_stable_key; Type: INDEX; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE UNIQUE INDEX uq_episode_storyboards_stable_key ON public.episode_storyboards USING btree (episode_id, stable_key) WHERE (deleted_at IS NULL);
|
|
|
|
CREATE UNIQUE INDEX uq_episode_storyboards_project_sequence ON public.episode_storyboards USING btree (project_id, sequence_no) WHERE ((project_id IS NOT NULL) AND (deleted_at IS NULL));
|
|
|
|
CREATE UNIQUE INDEX uq_episode_storyboards_project_stable_key ON public.episode_storyboards USING btree (project_id, stable_key) WHERE ((project_id IS NOT NULL) AND (deleted_at IS NULL));
|
|
|
|
CREATE INDEX idx_episode_storyboards_project_updated ON public.episode_storyboards USING btree (project_id, updated_at DESC) WHERE ((project_id IS NOT NULL) AND (deleted_at IS NULL));
|
|
|
|
|
|
--
|
|
-- Name: uq_point_ledger_idempotency; Type: INDEX; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE UNIQUE INDEX uq_point_ledger_idempotency ON public.point_ledger USING btree (idempotency_key) WHERE (idempotency_key IS NOT NULL);
|
|
|
|
|
|
--
|
|
-- Name: uq_project_assets_name_type; Type: INDEX; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE UNIQUE INDEX uq_project_assets_name_type ON public.project_assets USING btree (project_id, asset_type, lower((name)::text)) WHERE (deleted_at IS NULL);
|
|
|
|
|
|
--
|
|
-- Name: uq_project_episodes_number; Type: INDEX; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE UNIQUE INDEX uq_project_episodes_number ON public.project_episodes USING btree (project_id, episode_no) WHERE (deleted_at IS NULL);
|
|
|
|
|
|
--
|
|
-- Name: uq_project_model_configs_type; Type: INDEX; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE UNIQUE INDEX uq_project_model_configs_type ON public.project_model_configs USING btree (project_id, model_type);
|
|
|
|
|
|
--
|
|
-- Name: uq_user_model_configs_project_type; Type: INDEX; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE UNIQUE INDEX uq_user_model_configs_project_type ON public.user_model_configs USING btree (user_id, project_type, model_type);
|
|
|
|
|
|
--
|
|
-- Name: admin_users trg_admin_users_updated_at; Type: TRIGGER; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TRIGGER trg_admin_users_updated_at BEFORE UPDATE ON public.admin_users FOR EACH ROW EXECUTE FUNCTION public.set_updated_at();
|
|
|
|
|
|
--
|
|
-- Name: announcements trg_announcements_updated_at; Type: TRIGGER; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TRIGGER trg_announcements_updated_at BEFORE UPDATE ON public.announcements FOR EACH ROW EXECUTE FUNCTION public.set_updated_at();
|
|
|
|
|
|
--
|
|
-- Name: canvas_projects trg_canvas_projects_updated_at; Type: TRIGGER; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TRIGGER trg_canvas_projects_updated_at BEFORE UPDATE ON public.canvas_projects FOR EACH ROW EXECUTE FUNCTION public.set_updated_at();
|
|
|
|
|
|
--
|
|
-- Name: channel_asset_cache trg_channel_asset_cache_updated_at; Type: TRIGGER; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TRIGGER trg_channel_asset_cache_updated_at BEFORE UPDATE ON public.channel_asset_cache FOR EACH ROW EXECUTE FUNCTION public.set_updated_at();
|
|
|
|
|
|
--
|
|
-- Name: channels trg_channels_updated_at; Type: TRIGGER; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TRIGGER trg_channels_updated_at BEFORE UPDATE ON public.channels FOR EACH ROW EXECUTE FUNCTION public.set_updated_at();
|
|
|
|
|
|
--
|
|
-- Name: creative_projects trg_creative_projects_updated_at; Type: TRIGGER; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TRIGGER trg_creative_projects_updated_at BEFORE UPDATE ON public.creative_projects FOR EACH ROW EXECUTE FUNCTION public.set_updated_at();
|
|
|
|
|
|
--
|
|
-- Name: episode_continuity_contexts trg_episode_continuity_contexts_updated_at; Type: TRIGGER; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TRIGGER trg_episode_continuity_contexts_updated_at BEFORE UPDATE ON public.episode_continuity_contexts FOR EACH ROW EXECUTE FUNCTION public.set_updated_at();
|
|
|
|
|
|
--
|
|
-- Name: episode_sources trg_episode_sources_updated_at; Type: TRIGGER; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TRIGGER trg_episode_sources_updated_at BEFORE UPDATE ON public.episode_sources FOR EACH ROW EXECUTE FUNCTION public.set_updated_at();
|
|
|
|
|
|
--
|
|
-- Name: episode_storyboards trg_episode_storyboards_updated_at; Type: TRIGGER; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TRIGGER trg_episode_storyboards_updated_at BEFORE UPDATE ON public.episode_storyboards FOR EACH ROW EXECUTE FUNCTION public.set_updated_at();
|
|
|
|
|
|
--
|
|
-- Name: models trg_models_updated_at; Type: TRIGGER; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TRIGGER trg_models_updated_at BEFORE UPDATE ON public.models FOR EACH ROW EXECUTE FUNCTION public.set_updated_at();
|
|
|
|
|
|
--
|
|
-- Name: payment_configs trg_payment_configs_updated_at; Type: TRIGGER; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TRIGGER trg_payment_configs_updated_at BEFORE UPDATE ON public.payment_configs FOR EACH ROW EXECUTE FUNCTION public.set_updated_at();
|
|
|
|
|
|
--
|
|
-- Name: point_packages trg_point_packages_updated_at; Type: TRIGGER; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TRIGGER trg_point_packages_updated_at BEFORE UPDATE ON public.point_packages FOR EACH ROW EXECUTE FUNCTION public.set_updated_at();
|
|
|
|
|
|
--
|
|
-- Name: project_assets trg_project_assets_updated_at; Type: TRIGGER; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TRIGGER trg_project_assets_updated_at BEFORE UPDATE ON public.project_assets FOR EACH ROW EXECUTE FUNCTION public.set_updated_at();
|
|
|
|
|
|
--
|
|
-- Name: project_episodes trg_project_episodes_updated_at; Type: TRIGGER; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TRIGGER trg_project_episodes_updated_at BEFORE UPDATE ON public.project_episodes FOR EACH ROW EXECUTE FUNCTION public.set_updated_at();
|
|
|
|
|
|
--
|
|
-- Name: project_model_configs trg_project_model_configs_updated_at; Type: TRIGGER; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TRIGGER trg_project_model_configs_updated_at BEFORE UPDATE ON public.project_model_configs FOR EACH ROW EXECUTE FUNCTION public.set_updated_at();
|
|
|
|
|
|
--
|
|
-- Name: prompts trg_prompts_updated_at; Type: TRIGGER; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TRIGGER trg_prompts_updated_at BEFORE UPDATE ON public.prompts FOR EACH ROW EXECUTE FUNCTION public.set_updated_at();
|
|
|
|
|
|
--
|
|
-- Name: recharge_orders trg_recharge_orders_updated_at; Type: TRIGGER; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TRIGGER trg_recharge_orders_updated_at BEFORE UPDATE ON public.recharge_orders FOR EACH ROW EXECUTE FUNCTION public.set_updated_at();
|
|
|
|
|
|
--
|
|
-- Name: web_users trg_web_users_updated_at; Type: TRIGGER; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TRIGGER trg_web_users_updated_at BEFORE UPDATE ON public.web_users FOR EACH ROW EXECUTE FUNCTION public.set_updated_at();
|
|
|
|
|
|
--
|
|
-- Name: admin_audit_logs admin_audit_logs_admin_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.admin_audit_logs
|
|
ADD CONSTRAINT admin_audit_logs_admin_id_fkey FOREIGN KEY (admin_id) REFERENCES public.admin_users(id);
|
|
|
|
|
|
--
|
|
-- Name: admin_refresh_tokens admin_refresh_tokens_admin_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.admin_refresh_tokens
|
|
ADD CONSTRAINT admin_refresh_tokens_admin_id_fkey FOREIGN KEY (admin_id) REFERENCES public.admin_users(id);
|
|
|
|
|
|
--
|
|
-- Name: announcements announcements_published_by_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.announcements
|
|
ADD CONSTRAINT announcements_published_by_fkey FOREIGN KEY (published_by) REFERENCES public.admin_users(id);
|
|
|
|
|
|
--
|
|
-- Name: canvas_projects canvas_projects_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.canvas_projects
|
|
ADD CONSTRAINT canvas_projects_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.web_users(id) ON DELETE CASCADE;
|
|
|
|
|
|
--
|
|
-- Name: channel_asset_cache channel_asset_cache_channel_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.channel_asset_cache
|
|
ADD CONSTRAINT channel_asset_cache_channel_id_fkey FOREIGN KEY (channel_id) REFERENCES public.channels(id);
|
|
|
|
|
|
--
|
|
-- Name: channel_asset_cache channel_asset_cache_media_asset_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.channel_asset_cache
|
|
ADD CONSTRAINT channel_asset_cache_media_asset_id_fkey FOREIGN KEY (media_asset_id) REFERENCES public.media_assets(id);
|
|
|
|
|
|
--
|
|
-- Name: channel_balance_snapshots channel_balance_snapshots_channel_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.channel_balance_snapshots
|
|
ADD CONSTRAINT channel_balance_snapshots_channel_id_fkey FOREIGN KEY (channel_id) REFERENCES public.channels(id);
|
|
|
|
|
|
--
|
|
-- Name: creative_projects creative_projects_cover_asset_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.creative_projects
|
|
ADD CONSTRAINT creative_projects_cover_asset_id_fkey FOREIGN KEY (cover_asset_id) REFERENCES public.media_assets(id);
|
|
|
|
|
|
--
|
|
-- Name: creative_projects creative_projects_style_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.creative_projects
|
|
ADD CONSTRAINT creative_projects_style_id_fkey FOREIGN KEY (style_id) REFERENCES public.project_styles(id);
|
|
|
|
ALTER TABLE ONLY public.creative_projects
|
|
ADD CONSTRAINT creative_projects_source_video_asset_id_fkey FOREIGN KEY (source_video_asset_id) REFERENCES public.media_assets(id);
|
|
|
|
ALTER TABLE ONLY public.creative_projects
|
|
ADD CONSTRAINT creative_projects_subtitle_asset_id_fkey FOREIGN KEY (subtitle_asset_id) REFERENCES public.media_assets(id);
|
|
|
|
|
|
--
|
|
-- Name: creative_projects creative_projects_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.creative_projects
|
|
ADD CONSTRAINT creative_projects_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.web_users(id);
|
|
|
|
|
|
--
|
|
-- Name: drama_import_sessions drama_import_sessions_project_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.drama_import_sessions
|
|
ADD CONSTRAINT drama_import_sessions_project_id_fkey FOREIGN KEY (project_id) REFERENCES public.creative_projects(id) ON DELETE CASCADE;
|
|
|
|
|
|
--
|
|
-- Name: drama_import_sessions drama_import_sessions_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.drama_import_sessions
|
|
ADD CONSTRAINT drama_import_sessions_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.web_users(id);
|
|
|
|
|
|
--
|
|
-- Name: drama_parse_batches drama_parse_batches_current_episode_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.drama_parse_batches
|
|
ADD CONSTRAINT drama_parse_batches_current_episode_id_fkey FOREIGN KEY (current_episode_id) REFERENCES public.project_episodes(id);
|
|
|
|
|
|
--
|
|
-- Name: drama_parse_batches drama_parse_batches_project_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.drama_parse_batches
|
|
ADD CONSTRAINT drama_parse_batches_project_id_fkey FOREIGN KEY (project_id) REFERENCES public.creative_projects(id) ON DELETE CASCADE;
|
|
|
|
|
|
--
|
|
-- Name: drama_parse_batches drama_parse_batches_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.drama_parse_batches
|
|
ADD CONSTRAINT drama_parse_batches_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.web_users(id);
|
|
|
|
|
|
--
|
|
-- Name: drama_parse_tasks drama_parse_tasks_batch_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.drama_parse_tasks
|
|
ADD CONSTRAINT drama_parse_tasks_batch_id_fkey FOREIGN KEY (batch_id) REFERENCES public.drama_parse_batches(id) ON DELETE SET NULL;
|
|
|
|
|
|
--
|
|
-- Name: drama_parse_tasks drama_parse_tasks_channel_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.drama_parse_tasks
|
|
ADD CONSTRAINT drama_parse_tasks_channel_id_fkey FOREIGN KEY (channel_id) REFERENCES public.channels(id);
|
|
|
|
|
|
--
|
|
-- Name: drama_parse_tasks drama_parse_tasks_episode_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.drama_parse_tasks
|
|
ADD CONSTRAINT drama_parse_tasks_episode_id_fkey FOREIGN KEY (episode_id) REFERENCES public.project_episodes(id) ON DELETE CASCADE;
|
|
|
|
|
|
--
|
|
-- Name: drama_parse_tasks drama_parse_tasks_model_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.drama_parse_tasks
|
|
ADD CONSTRAINT drama_parse_tasks_model_id_fkey FOREIGN KEY (model_id) REFERENCES public.models(id);
|
|
|
|
|
|
--
|
|
-- Name: drama_parse_tasks drama_parse_tasks_project_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.drama_parse_tasks
|
|
ADD CONSTRAINT drama_parse_tasks_project_id_fkey FOREIGN KEY (project_id) REFERENCES public.creative_projects(id) ON DELETE CASCADE;
|
|
|
|
|
|
--
|
|
-- Name: drama_parse_tasks drama_parse_tasks_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.drama_parse_tasks
|
|
ADD CONSTRAINT drama_parse_tasks_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.web_users(id);
|
|
|
|
|
|
--
|
|
-- Name: episode_continuity_contexts episode_continuity_contexts_episode_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.episode_continuity_contexts
|
|
ADD CONSTRAINT episode_continuity_contexts_episode_id_fkey FOREIGN KEY (episode_id) REFERENCES public.project_episodes(id) ON DELETE CASCADE;
|
|
|
|
|
|
--
|
|
-- Name: episode_continuity_contexts episode_continuity_contexts_parse_task_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.episode_continuity_contexts
|
|
ADD CONSTRAINT episode_continuity_contexts_parse_task_id_fkey FOREIGN KEY (parse_task_id) REFERENCES public.drama_parse_tasks(id) ON DELETE CASCADE;
|
|
|
|
|
|
--
|
|
-- Name: episode_sources episode_sources_episode_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.episode_sources
|
|
ADD CONSTRAINT episode_sources_episode_id_fkey FOREIGN KEY (episode_id) REFERENCES public.project_episodes(id) ON DELETE CASCADE;
|
|
|
|
|
|
--
|
|
-- Name: episode_storyboards episode_storyboards_episode_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.episode_storyboards
|
|
ADD CONSTRAINT episode_storyboards_episode_id_fkey FOREIGN KEY (episode_id) REFERENCES public.project_episodes(id);
|
|
|
|
ALTER TABLE ONLY public.episode_storyboards
|
|
ADD CONSTRAINT episode_storyboards_project_id_fkey FOREIGN KEY (project_id) REFERENCES public.creative_projects(id);
|
|
|
|
|
|
--
|
|
-- Name: episode_storyboards episode_storyboards_source_parse_task_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.episode_storyboards
|
|
ADD CONSTRAINT episode_storyboards_source_parse_task_id_fkey FOREIGN KEY (source_parse_task_id) REFERENCES public.drama_parse_tasks(id) ON DELETE SET NULL;
|
|
|
|
|
|
--
|
|
-- Name: episode_storyboards episode_storyboards_thumbnail_asset_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.episode_storyboards
|
|
ADD CONSTRAINT episode_storyboards_thumbnail_asset_id_fkey FOREIGN KEY (thumbnail_asset_id) REFERENCES public.media_assets(id);
|
|
|
|
|
|
--
|
|
-- Name: episode_storyboards fk_storyboards_active_output; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.episode_storyboards
|
|
ADD CONSTRAINT fk_storyboards_active_output FOREIGN KEY (active_output_id) REFERENCES public.generation_outputs(id);
|
|
|
|
|
|
--
|
|
-- Name: generation_outputs generation_outputs_media_asset_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.generation_outputs
|
|
ADD CONSTRAINT generation_outputs_media_asset_id_fkey FOREIGN KEY (media_asset_id) REFERENCES public.media_assets(id);
|
|
|
|
|
|
--
|
|
-- Name: generation_outputs generation_outputs_task_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.generation_outputs
|
|
ADD CONSTRAINT generation_outputs_task_id_fkey FOREIGN KEY (task_id) REFERENCES public.generation_tasks(id);
|
|
|
|
|
|
--
|
|
-- Name: generation_tasks generation_tasks_canvas_project_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.generation_tasks
|
|
ADD CONSTRAINT generation_tasks_canvas_project_id_fkey FOREIGN KEY (canvas_project_id) REFERENCES public.canvas_projects(id);
|
|
|
|
|
|
--
|
|
-- Name: generation_tasks generation_tasks_channel_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.generation_tasks
|
|
ADD CONSTRAINT generation_tasks_channel_id_fkey FOREIGN KEY (channel_id) REFERENCES public.channels(id);
|
|
|
|
|
|
--
|
|
-- Name: generation_tasks generation_tasks_episode_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.generation_tasks
|
|
ADD CONSTRAINT generation_tasks_episode_id_fkey FOREIGN KEY (episode_id) REFERENCES public.project_episodes(id);
|
|
|
|
|
|
--
|
|
-- Name: generation_tasks generation_tasks_model_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.generation_tasks
|
|
ADD CONSTRAINT generation_tasks_model_id_fkey FOREIGN KEY (model_id) REFERENCES public.models(id);
|
|
|
|
|
|
--
|
|
-- Name: generation_tasks generation_tasks_project_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.generation_tasks
|
|
ADD CONSTRAINT generation_tasks_project_id_fkey FOREIGN KEY (project_id) REFERENCES public.creative_projects(id);
|
|
|
|
|
|
--
|
|
-- Name: generation_tasks generation_tasks_storyboard_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.generation_tasks
|
|
ADD CONSTRAINT generation_tasks_storyboard_id_fkey FOREIGN KEY (storyboard_id) REFERENCES public.episode_storyboards(id);
|
|
|
|
|
|
--
|
|
-- Name: generation_tasks generation_tasks_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.generation_tasks
|
|
ADD CONSTRAINT generation_tasks_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.web_users(id);
|
|
|
|
|
|
--
|
|
-- Name: media_assets media_assets_owner_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.media_assets
|
|
ADD CONSTRAINT media_assets_owner_user_id_fkey FOREIGN KEY (owner_user_id) REFERENCES public.web_users(id);
|
|
|
|
|
|
--
|
|
-- Name: model_prices model_prices_model_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.model_prices
|
|
ADD CONSTRAINT model_prices_model_id_fkey FOREIGN KEY (model_id) REFERENCES public.models(id) ON DELETE CASCADE;
|
|
|
|
|
|
--
|
|
-- Name: models models_channel_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.models
|
|
ADD CONSTRAINT models_channel_id_fkey FOREIGN KEY (channel_id) REFERENCES public.channels(id);
|
|
|
|
|
|
--
|
|
-- Name: point_exchange_rate_settings point_exchange_rate_settings_updated_by_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.point_exchange_rate_settings
|
|
ADD CONSTRAINT point_exchange_rate_settings_updated_by_fkey FOREIGN KEY (updated_by) REFERENCES public.admin_users(id);
|
|
|
|
|
|
--
|
|
-- Name: point_ledger point_ledger_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.point_ledger
|
|
ADD CONSTRAINT point_ledger_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.web_users(id);
|
|
|
|
|
|
--
|
|
-- Name: project_assets project_assets_audio_asset_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.project_assets
|
|
ADD CONSTRAINT project_assets_audio_asset_id_fkey FOREIGN KEY (audio_asset_id) REFERENCES public.media_assets(id);
|
|
|
|
|
|
--
|
|
-- Name: project_assets project_assets_image_asset_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.project_assets
|
|
ADD CONSTRAINT project_assets_image_asset_id_fkey FOREIGN KEY (image_asset_id) REFERENCES public.media_assets(id);
|
|
|
|
|
|
--
|
|
-- Name: project_assets project_assets_project_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.project_assets
|
|
ADD CONSTRAINT project_assets_project_id_fkey FOREIGN KEY (project_id) REFERENCES public.creative_projects(id);
|
|
|
|
|
|
--
|
|
-- Name: project_assets project_assets_source_episode_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.project_assets
|
|
ADD CONSTRAINT project_assets_source_episode_id_fkey FOREIGN KEY (source_episode_id) REFERENCES public.project_episodes(id);
|
|
|
|
|
|
--
|
|
-- Name: project_assets project_assets_source_parse_task_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.project_assets
|
|
ADD CONSTRAINT project_assets_source_parse_task_id_fkey FOREIGN KEY (source_parse_task_id) REFERENCES public.drama_parse_tasks(id) ON DELETE SET NULL;
|
|
|
|
|
|
--
|
|
-- Name: project_episodes project_episodes_cover_asset_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.project_episodes
|
|
ADD CONSTRAINT project_episodes_cover_asset_id_fkey FOREIGN KEY (cover_asset_id) REFERENCES public.media_assets(id);
|
|
|
|
|
|
--
|
|
-- Name: project_episodes project_episodes_project_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.project_episodes
|
|
ADD CONSTRAINT project_episodes_project_id_fkey FOREIGN KEY (project_id) REFERENCES public.creative_projects(id);
|
|
|
|
|
|
--
|
|
-- Name: project_episodes project_episodes_source_video_asset_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.project_episodes
|
|
ADD CONSTRAINT project_episodes_source_video_asset_id_fkey FOREIGN KEY (source_video_asset_id) REFERENCES public.media_assets(id);
|
|
|
|
|
|
--
|
|
-- Name: project_episodes project_episodes_subtitle_asset_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.project_episodes
|
|
ADD CONSTRAINT project_episodes_subtitle_asset_id_fkey FOREIGN KEY (subtitle_asset_id) REFERENCES public.media_assets(id);
|
|
|
|
|
|
--
|
|
-- Name: project_model_configs project_model_configs_model_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.project_model_configs
|
|
ADD CONSTRAINT project_model_configs_model_id_fkey FOREIGN KEY (model_id) REFERENCES public.models(id);
|
|
|
|
|
|
--
|
|
-- Name: project_model_configs project_model_configs_project_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.project_model_configs
|
|
ADD CONSTRAINT project_model_configs_project_id_fkey FOREIGN KEY (project_id) REFERENCES public.creative_projects(id);
|
|
|
|
|
|
--
|
|
-- Name: project_model_configs project_model_configs_prompt_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.project_model_configs
|
|
ADD CONSTRAINT project_model_configs_prompt_id_fkey FOREIGN KEY (prompt_id) REFERENCES public.prompts(id) ON DELETE SET NULL;
|
|
|
|
|
|
--
|
|
-- Name: prompts prompts_owner_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.prompts
|
|
ADD CONSTRAINT prompts_owner_user_id_fkey FOREIGN KEY (owner_user_id) REFERENCES public.web_users(id);
|
|
|
|
|
|
--
|
|
-- Name: recharge_orders recharge_orders_package_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.recharge_orders
|
|
ADD CONSTRAINT recharge_orders_package_id_fkey FOREIGN KEY (package_id) REFERENCES public.point_packages(id);
|
|
|
|
|
|
--
|
|
-- Name: recharge_orders recharge_orders_payment_config_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.recharge_orders
|
|
ADD CONSTRAINT recharge_orders_payment_config_id_fkey FOREIGN KEY (payment_config_id) REFERENCES public.payment_configs(id);
|
|
|
|
|
|
--
|
|
-- Name: recharge_orders recharge_orders_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.recharge_orders
|
|
ADD CONSTRAINT recharge_orders_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.web_users(id);
|
|
|
|
|
|
--
|
|
-- Name: redemption_batches redemption_batches_created_by_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.redemption_batches
|
|
ADD CONSTRAINT redemption_batches_created_by_fkey FOREIGN KEY (created_by) REFERENCES public.admin_users(id);
|
|
|
|
|
|
--
|
|
-- Name: redemption_codes redemption_codes_batch_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.redemption_codes
|
|
ADD CONSTRAINT redemption_codes_batch_id_fkey FOREIGN KEY (batch_id) REFERENCES public.redemption_batches(id);
|
|
|
|
|
|
--
|
|
-- Name: redemption_codes redemption_codes_redeemed_by_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.redemption_codes
|
|
ADD CONSTRAINT redemption_codes_redeemed_by_fkey FOREIGN KEY (redeemed_by) REFERENCES public.web_users(id);
|
|
|
|
|
|
--
|
|
-- Name: user_model_configs user_model_configs_model_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.user_model_configs
|
|
ADD CONSTRAINT user_model_configs_model_id_fkey FOREIGN KEY (model_id) REFERENCES public.models(id);
|
|
|
|
|
|
--
|
|
-- Name: user_model_configs user_model_configs_prompt_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.user_model_configs
|
|
ADD CONSTRAINT user_model_configs_prompt_id_fkey FOREIGN KEY (prompt_id) REFERENCES public.prompts(id);
|
|
|
|
|
|
--
|
|
-- Name: user_model_configs user_model_configs_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.user_model_configs
|
|
ADD CONSTRAINT user_model_configs_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.web_users(id);
|
|
|
|
|
|
--
|
|
-- Name: user_prompt_preferences user_prompt_preferences_prompt_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.user_prompt_preferences
|
|
ADD CONSTRAINT user_prompt_preferences_prompt_id_fkey FOREIGN KEY (prompt_id) REFERENCES public.prompts(id) ON DELETE CASCADE;
|
|
|
|
|
|
--
|
|
-- Name: user_prompt_preferences user_prompt_preferences_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.user_prompt_preferences
|
|
ADD CONSTRAINT user_prompt_preferences_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.web_users(id) ON DELETE CASCADE;
|
|
|
|
|
|
--
|
|
-- Name: web_refresh_tokens web_refresh_tokens_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.web_refresh_tokens
|
|
ADD CONSTRAINT web_refresh_tokens_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.web_users(id);
|
|
|
|
|
|
--
|
|
CREATE TABLE public.point_grants (
|
|
id uuid DEFAULT gen_random_uuid() NOT NULL PRIMARY KEY,
|
|
user_id uuid NOT NULL REFERENCES public.web_users(id),
|
|
source_type character varying(32) NOT NULL,
|
|
source_id text NOT NULL,
|
|
granted_amount numeric(18,2) NOT NULL CHECK (granted_amount > 0),
|
|
available_amount numeric(18,2) NOT NULL CHECK (available_amount >= 0 AND available_amount <= granted_amount),
|
|
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
UNIQUE(source_type, source_id)
|
|
);
|
|
|
|
COMMENT ON TABLE public.point_grants IS '用户积分入账批次,用于支持永久积分的顺序扣减和原批次退款';
|
|
COMMENT ON COLUMN public.point_grants.id IS '积分批次唯一标识';
|
|
COMMENT ON COLUMN public.point_grants.user_id IS '积分所属用户标识';
|
|
COMMENT ON COLUMN public.point_grants.source_type IS '积分来源业务类型';
|
|
COMMENT ON COLUMN public.point_grants.source_id IS '积分来源业务记录标识,与来源类型共同保证幂等';
|
|
COMMENT ON COLUMN public.point_grants.granted_amount IS '批次初始入账积分,必须大于零';
|
|
COMMENT ON COLUMN public.point_grants.available_amount IS '批次当前可用积分,不得小于零或超过初始积分';
|
|
COMMENT ON COLUMN public.point_grants.created_at IS '积分批次创建时间,用于确定扣减顺序';
|
|
|
|
CREATE INDEX idx_point_grants_user_available
|
|
ON public.point_grants(user_id, created_at, id)
|
|
WHERE available_amount > 0;
|
|
COMMENT ON INDEX public.idx_point_grants_user_available IS '加速按用户和创建顺序锁定可用积分批次';
|
|
|
|
CREATE TABLE public.point_ledger_allocations (
|
|
id bigserial PRIMARY KEY,
|
|
ledger_id bigint NOT NULL REFERENCES public.point_ledger(id),
|
|
grant_id uuid NOT NULL REFERENCES public.point_grants(id),
|
|
allocation_type character varying(16) NOT NULL CHECK (allocation_type IN ('consume','refund')),
|
|
amount numeric(18,2) NOT NULL CHECK (amount > 0),
|
|
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
UNIQUE(ledger_id, grant_id, allocation_type)
|
|
);
|
|
|
|
CREATE INDEX idx_point_ledger_allocations_grant
|
|
ON public.point_ledger_allocations(grant_id, created_at DESC);
|
|
|
|
ALTER TABLE public.generation_tasks
|
|
DROP CONSTRAINT IF EXISTS generation_tasks_canvas_project_id_fkey;
|
|
DROP INDEX IF EXISTS public.idx_generation_tasks_canvas_history;
|
|
ALTER TABLE public.generation_tasks
|
|
DROP COLUMN IF EXISTS canvas_project_id;
|
|
DELETE FROM public.user_model_configs WHERE project_type = 'image_workbench';
|
|
ALTER TABLE public.user_model_configs
|
|
DROP CONSTRAINT IF EXISTS user_model_configs_project_type_check;
|
|
ALTER TABLE public.user_model_configs
|
|
ADD CONSTRAINT user_model_configs_project_type_check
|
|
CHECK (project_type IN ('premium_drama', 'video_redraw', 'script_analysis'));
|
|
CREATE TABLE public.script_analyses (
|
|
id uuid DEFAULT gen_random_uuid() NOT NULL,
|
|
user_id uuid NOT NULL,
|
|
name public.citext NOT NULL,
|
|
source_content text DEFAULT ''::text NOT NULL,
|
|
result_content text DEFAULT ''::text NOT NULL,
|
|
analysis_result jsonb DEFAULT '{}'::jsonb NOT NULL,
|
|
analysis_status character varying(20) DEFAULT 'idle'::character varying NOT NULL,
|
|
analysis_message text,
|
|
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
updated_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
deleted_at timestamp with time zone,
|
|
CONSTRAINT script_analyses_pkey PRIMARY KEY (id),
|
|
CONSTRAINT script_analyses_status_check CHECK (((analysis_status)::text = ANY ((ARRAY['idle'::character varying, 'queued'::character varying, 'running'::character varying, 'succeeded'::character varying, 'failed'::character varying])::text[]))),
|
|
CONSTRAINT script_analyses_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.web_users(id) ON DELETE CASCADE
|
|
);
|
|
CREATE INDEX idx_script_analyses_user_updated ON public.script_analyses USING btree (user_id, updated_at DESC) WHERE (deleted_at IS NULL);
|
|
CREATE TRIGGER script_analyses_updated_at BEFORE UPDATE ON public.script_analyses FOR EACH ROW EXECUTE FUNCTION public.set_updated_at();
|
|
CREATE TABLE public.script_analysis_characters (
|
|
id uuid DEFAULT gen_random_uuid() NOT NULL,
|
|
script_analysis_id uuid NOT NULL,
|
|
name public.citext NOT NULL,
|
|
faction character varying(20) NOT NULL,
|
|
biography text DEFAULT ''::text NOT NULL,
|
|
motivation text DEFAULT ''::text NOT NULL,
|
|
relationship text DEFAULT ''::text NOT NULL,
|
|
sort_order integer DEFAULT 0 NOT NULL,
|
|
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
updated_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
CONSTRAINT script_analysis_characters_pkey PRIMARY KEY (id),
|
|
CONSTRAINT script_analysis_characters_faction_check CHECK (((faction)::text = ANY ((ARRAY[U&'\6B63\6D3E'::character varying, U&'\53CD\6D3E'::character varying, U&'\4E2D\7ACB\6D3E'::character varying])::text[]))),
|
|
CONSTRAINT script_analysis_characters_name_unique UNIQUE (script_analysis_id, name),
|
|
CONSTRAINT script_analysis_characters_analysis_id_fkey FOREIGN KEY (script_analysis_id) REFERENCES public.script_analyses(id) ON DELETE CASCADE
|
|
);
|
|
CREATE INDEX idx_script_analysis_characters_analysis ON public.script_analysis_characters USING btree (script_analysis_id, sort_order);
|
|
CREATE TRIGGER script_analysis_characters_updated_at BEFORE UPDATE ON public.script_analysis_characters FOR EACH ROW EXECUTE FUNCTION public.set_updated_at();
|
|
ALTER TABLE ONLY public.generation_tasks
|
|
ADD CONSTRAINT generation_tasks_script_analysis_id_fkey FOREIGN KEY (script_analysis_id) REFERENCES public.script_analyses(id) ON DELETE CASCADE;
|
|
CREATE INDEX idx_generation_tasks_script_analysis ON public.generation_tasks USING btree (script_analysis_id, created_at DESC) WHERE (script_analysis_id IS NOT NULL);
|
|
CREATE UNIQUE INDEX uq_script_analysis_active_task ON public.generation_tasks USING btree (script_analysis_id) WHERE ((script_analysis_id IS NOT NULL) AND ((status)::text = ANY ((ARRAY['pending_submission'::character varying, 'submitting'::character varying, 'submitted'::character varying, 'processing'::character varying, 'result_ready'::character varying, 'downloading'::character varying, 'cancel_requested'::character varying])::text[])));
|
|
DROP TABLE IF EXISTS public.inspiration_gallery_references;
|
|
DROP TABLE IF EXISTS public.inspiration_gallery_items;
|
|
DROP TABLE IF EXISTS public.canvas_projects;
|
|
DROP TABLE IF EXISTS public.announcements;
|
|
DROP TABLE IF EXISTS public.recharge_orders;
|
|
DROP TABLE IF EXISTS public.payment_configs;
|
|
DROP TABLE IF EXISTS public.point_packages;
|
|
DROP TABLE IF EXISTS public.point_exchange_rate_settings;
|
|
|
|
INSERT INTO public.prompts (id, name, type, content, scope, owner_user_id)
|
|
VALUES (
|
|
'2eb481cf-4a8f-4da4-a70e-ea977739c8d1',
|
|
'默认剧本分析提示词',
|
|
'剧本分析',
|
|
$prompt$你是一名资深短剧策划、编剧和商业化内容分析师。请严格依据用户提供的剧本原文进行结构化分析,不得把推测写成原文事实,不得编造原文不存在的关键人物、情节或台词。信息不足时使用空字符串或空数组。
|
|
|
|
分析目标:
|
|
1. 标签:分别提取短剧题材、风格、受众、情绪等短剧标签,以及适合山水景区、古镇景区、主题乐园、文博场馆、商业街区等文旅或商业落地场景的适用场景标签。只输出与剧本确实匹配的标签。
|
|
2. 核心看点与卖点:用一句话总结核心看点、卖点、爽点或痛点,并列出具体看点及其类型。
|
|
3. 剧情结构:输出短剧梗概、故事大纲、情绪大纲、分集大纲和人物小传。人物必须覆盖剧本中具有明确身份或剧情作用的正派、反派和中立人物;同一人物只返回一次。
|
|
4. 第一集黄金三秒:分别给出开篇第一个画面或场景、第一句台词,以及通过悬念前置、激烈冲突、视觉奇观等方式瞬间抓住观众的设计。若原稿开篇不够强,需要明确说明问题并给出不改变核心剧情的优化建议;第一句台词不得冒充原文台词,建议台词需明确标为建议。
|
|
5. 单集钩子:输出第1至第10集逐集钩子。原文无法识别某一集时保留该集编号并说明信息不足,不得虚构剧情。第10集除逐集钩子外,再提供3至5个付费卡点候选,每个候选需说明钩子类型、卡点内容和付费吸引力。$prompt$,
|
|
'system',
|
|
NULL
|
|
)
|
|
ON CONFLICT (id) DO NOTHING;
|
|
|
|
-- PostgreSQL database dump complete
|
|
--
|
|
|
|
CREATE TABLE IF NOT EXISTS public.jcf_schema_migrations (
|
|
version character varying(128) PRIMARY KEY,
|
|
applied_at timestamp with time zone NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
);
|