630 lines
24 KiB
SQL
630 lines
24 KiB
SQL
-- CreateTable
|
|
CREATE TABLE `users` (
|
|
`id` BIGINT NOT NULL AUTO_INCREMENT,
|
|
`email` VARCHAR(191) NULL,
|
|
`phone` VARCHAR(50) NULL,
|
|
`password_hash` VARCHAR(255) NOT NULL,
|
|
`nickname` VARCHAR(100) NULL,
|
|
`avatar_url` VARCHAR(500) NULL,
|
|
`role` VARCHAR(50) NOT NULL DEFAULT 'user',
|
|
`status` VARCHAR(50) NOT NULL DEFAULT 'active',
|
|
`wechat_openid` VARCHAR(191) NULL,
|
|
`last_login_at` DATETIME(3) NULL,
|
|
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
`updated_at` DATETIME(3) NOT NULL,
|
|
|
|
UNIQUE INDEX `users_email_key`(`email`),
|
|
UNIQUE INDEX `users_phone_key`(`phone`),
|
|
UNIQUE INDEX `users_wechat_openid_key`(`wechat_openid`),
|
|
INDEX `users_role_status_idx`(`role`, `status`),
|
|
INDEX `users_created_at_idx`(`created_at`),
|
|
PRIMARY KEY (`id`)
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
-- CreateTable
|
|
CREATE TABLE `projects` (
|
|
`id` BIGINT NOT NULL AUTO_INCREMENT,
|
|
`user_id` BIGINT NOT NULL,
|
|
`title` VARCHAR(255) NULL,
|
|
`input_mode` VARCHAR(50) NOT NULL,
|
|
`genre` VARCHAR(100) NULL,
|
|
`style_code` VARCHAR(100) NULL,
|
|
`output_type` VARCHAR(50) NULL,
|
|
`target_episode_count` INTEGER NULL,
|
|
`episode_duration` INTEGER NULL,
|
|
`status` VARCHAR(80) NOT NULL DEFAULT 'draft',
|
|
`copyright_status` VARCHAR(80) NOT NULL DEFAULT 'pending',
|
|
`payment_status` VARCHAR(80) NOT NULL DEFAULT 'unpaid',
|
|
`quality_level` VARCHAR(50) NULL,
|
|
`is_long_series` BOOLEAN NOT NULL DEFAULT false,
|
|
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
`updated_at` DATETIME(3) NOT NULL,
|
|
`completed_at` DATETIME(3) NULL,
|
|
|
|
INDEX `projects_user_id_status_idx`(`user_id`, `status`),
|
|
INDEX `projects_genre_status_idx`(`genre`, `status`),
|
|
INDEX `projects_created_at_idx`(`created_at`),
|
|
PRIMARY KEY (`id`)
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
-- CreateTable
|
|
CREATE TABLE `novel_sources` (
|
|
`id` BIGINT NOT NULL AUTO_INCREMENT,
|
|
`project_id` BIGINT NOT NULL,
|
|
`source_type` VARCHAR(50) NOT NULL,
|
|
`title` VARCHAR(255) NULL,
|
|
`author_name` VARCHAR(100) NULL,
|
|
`raw_asset_id` BIGINT NULL,
|
|
`raw_text` LONGTEXT NULL,
|
|
`clean_text` LONGTEXT NULL,
|
|
`word_count` INTEGER NULL,
|
|
`chapter_count` INTEGER NULL,
|
|
`parse_status` VARCHAR(50) NOT NULL DEFAULT 'pending',
|
|
`parse_report` JSON NULL,
|
|
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
|
|
INDEX `novel_sources_project_id_idx`(`project_id`),
|
|
INDEX `novel_sources_parse_status_idx`(`parse_status`),
|
|
PRIMARY KEY (`id`)
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
-- CreateTable
|
|
CREATE TABLE `novel_chapters` (
|
|
`id` BIGINT NOT NULL AUTO_INCREMENT,
|
|
`project_id` BIGINT NOT NULL,
|
|
`novel_source_id` BIGINT NULL,
|
|
`chapter_no` INTEGER NOT NULL,
|
|
`title` VARCHAR(255) NULL,
|
|
`content` LONGTEXT NOT NULL,
|
|
`summary` TEXT NULL,
|
|
`visual_summary` TEXT NULL,
|
|
`word_count` INTEGER NULL,
|
|
`status` VARCHAR(50) NOT NULL DEFAULT 'draft',
|
|
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
|
|
INDEX `novel_chapters_project_id_chapter_no_idx`(`project_id`, `chapter_no`),
|
|
INDEX `novel_chapters_project_id_status_idx`(`project_id`, `status`),
|
|
UNIQUE INDEX `novel_chapters_novel_source_id_chapter_no_key`(`novel_source_id`, `chapter_no`),
|
|
PRIMARY KEY (`id`)
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
-- CreateTable
|
|
CREATE TABLE `copyright_records` (
|
|
`id` BIGINT NOT NULL AUTO_INCREMENT,
|
|
`project_id` BIGINT NOT NULL,
|
|
`user_id` BIGINT NOT NULL,
|
|
`authorization_type` VARCHAR(50) NOT NULL,
|
|
`statement_text` TEXT NOT NULL,
|
|
`ip` VARCHAR(80) NULL,
|
|
`user_agent` TEXT NULL,
|
|
`confirmed_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
|
|
INDEX `copyright_records_project_id_idx`(`project_id`),
|
|
INDEX `copyright_records_user_id_idx`(`user_id`),
|
|
INDEX `copyright_records_authorization_type_idx`(`authorization_type`),
|
|
PRIMARY KEY (`id`)
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
-- CreateTable
|
|
CREATE TABLE `story_bibles` (
|
|
`id` BIGINT NOT NULL AUTO_INCREMENT,
|
|
`project_id` BIGINT NOT NULL,
|
|
`title` VARCHAR(255) NULL,
|
|
`logline` TEXT NULL,
|
|
`main_plot` TEXT NULL,
|
|
`core_conflict` TEXT NULL,
|
|
`selling_points` TEXT NULL,
|
|
`tone` VARCHAR(100) NULL,
|
|
`world_summary` TEXT NULL,
|
|
`ending_direction` TEXT NULL,
|
|
`taboo_rules` TEXT NULL,
|
|
`version` INTEGER NOT NULL DEFAULT 1,
|
|
`status` VARCHAR(50) NOT NULL DEFAULT 'draft',
|
|
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
`updated_at` DATETIME(3) NOT NULL,
|
|
|
|
INDEX `story_bibles_project_id_status_idx`(`project_id`, `status`),
|
|
PRIMARY KEY (`id`)
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
-- CreateTable
|
|
CREATE TABLE `world_bibles` (
|
|
`id` BIGINT NOT NULL AUTO_INCREMENT,
|
|
`project_id` BIGINT NOT NULL,
|
|
`world_type` VARCHAR(100) NULL,
|
|
`setting_text` TEXT NULL,
|
|
`rules_text` TEXT NULL,
|
|
`power_system` TEXT NULL,
|
|
`social_structure` TEXT NULL,
|
|
`time_period` TEXT NULL,
|
|
`visual_rules` TEXT NULL,
|
|
`forbidden_rules` TEXT NULL,
|
|
`status` VARCHAR(50) NOT NULL DEFAULT 'draft',
|
|
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
|
|
INDEX `world_bibles_project_id_status_idx`(`project_id`, `status`),
|
|
PRIMARY KEY (`id`)
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
-- CreateTable
|
|
CREATE TABLE `characters` (
|
|
`id` BIGINT NOT NULL AUTO_INCREMENT,
|
|
`project_id` BIGINT NOT NULL,
|
|
`name` VARCHAR(100) NOT NULL,
|
|
`alias_names` JSON NULL,
|
|
`role_type` VARCHAR(50) NOT NULL,
|
|
`gender_label` VARCHAR(50) NULL,
|
|
`age_group` VARCHAR(50) NULL,
|
|
`identity_desc` TEXT NULL,
|
|
`appearance_desc` TEXT NULL,
|
|
`face_desc` TEXT NULL,
|
|
`hair_desc` TEXT NULL,
|
|
`eye_desc` TEXT NULL,
|
|
`body_desc` TEXT NULL,
|
|
`costume_rules` TEXT NULL,
|
|
`special_props` TEXT NULL,
|
|
`personality_desc` TEXT NULL,
|
|
`speech_style` TEXT NULL,
|
|
`relationship_desc` TEXT NULL,
|
|
`character_arc` TEXT NULL,
|
|
`negative_rules` TEXT NULL,
|
|
`anchor_asset_id` BIGINT NULL,
|
|
`importance_level` INTEGER NOT NULL DEFAULT 0,
|
|
`status` VARCHAR(50) NOT NULL DEFAULT 'draft',
|
|
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
`updated_at` DATETIME(3) NOT NULL,
|
|
|
|
INDEX `characters_project_id_role_type_idx`(`project_id`, `role_type`),
|
|
INDEX `characters_project_id_status_idx`(`project_id`, `status`),
|
|
PRIMARY KEY (`id`)
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
-- CreateTable
|
|
CREATE TABLE `character_images` (
|
|
`id` BIGINT NOT NULL AUTO_INCREMENT,
|
|
`project_id` BIGINT NOT NULL,
|
|
`character_id` BIGINT NOT NULL,
|
|
`asset_id` BIGINT NULL,
|
|
`image_type` VARCHAR(50) NOT NULL,
|
|
`prompt_text` TEXT NULL,
|
|
`negative_prompt` TEXT NULL,
|
|
`is_anchor` BOOLEAN NOT NULL DEFAULT false,
|
|
`quality_score` DECIMAL(5, 2) NULL,
|
|
`status` VARCHAR(50) NOT NULL DEFAULT 'pending',
|
|
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
|
|
INDEX `character_images_project_id_idx`(`project_id`),
|
|
INDEX `character_images_character_id_image_type_idx`(`character_id`, `image_type`),
|
|
INDEX `character_images_character_id_is_anchor_idx`(`character_id`, `is_anchor`),
|
|
PRIMARY KEY (`id`)
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
-- CreateTable
|
|
CREATE TABLE `character_memories` (
|
|
`id` BIGINT NOT NULL AUTO_INCREMENT,
|
|
`project_id` BIGINT NOT NULL,
|
|
`character_id` BIGINT NOT NULL,
|
|
`episode_id` BIGINT NULL,
|
|
`memory_type` VARCHAR(50) NOT NULL,
|
|
`content` TEXT NOT NULL,
|
|
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
|
|
INDEX `character_memories_project_id_character_id_idx`(`project_id`, `character_id`),
|
|
INDEX `character_memories_project_id_episode_id_idx`(`project_id`, `episode_id`),
|
|
INDEX `character_memories_memory_type_idx`(`memory_type`),
|
|
PRIMARY KEY (`id`)
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
-- CreateTable
|
|
CREATE TABLE `episodes` (
|
|
`id` BIGINT NOT NULL AUTO_INCREMENT,
|
|
`project_id` BIGINT NOT NULL,
|
|
`episode_no` INTEGER NOT NULL,
|
|
`source_chapter_ids` JSON NULL,
|
|
`title` VARCHAR(255) NULL,
|
|
`summary` TEXT NULL,
|
|
`opening_hook` TEXT NULL,
|
|
`middle_conflict` TEXT NULL,
|
|
`ending_hook` TEXT NULL,
|
|
`target_duration` INTEGER NULL,
|
|
`status` VARCHAR(50) NOT NULL DEFAULT 'draft',
|
|
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
`updated_at` DATETIME(3) NOT NULL,
|
|
|
|
INDEX `episodes_project_id_status_idx`(`project_id`, `status`),
|
|
UNIQUE INDEX `episodes_project_id_episode_no_key`(`project_id`, `episode_no`),
|
|
PRIMARY KEY (`id`)
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
-- CreateTable
|
|
CREATE TABLE `episode_scripts` (
|
|
`id` BIGINT NOT NULL AUTO_INCREMENT,
|
|
`project_id` BIGINT NOT NULL,
|
|
`episode_id` BIGINT NOT NULL,
|
|
`script_text` LONGTEXT NULL,
|
|
`narration_text` LONGTEXT NULL,
|
|
`dialogue_json` JSON NULL,
|
|
`version` INTEGER NOT NULL DEFAULT 1,
|
|
`status` VARCHAR(50) NOT NULL DEFAULT 'draft',
|
|
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
`updated_at` DATETIME(3) NOT NULL,
|
|
|
|
INDEX `episode_scripts_project_id_idx`(`project_id`),
|
|
INDEX `episode_scripts_episode_id_version_idx`(`episode_id`, `version`),
|
|
PRIMARY KEY (`id`)
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
-- CreateTable
|
|
CREATE TABLE `storyboard_shots` (
|
|
`id` BIGINT NOT NULL AUTO_INCREMENT,
|
|
`project_id` BIGINT NOT NULL,
|
|
`episode_id` BIGINT NOT NULL,
|
|
`shot_no` INTEGER NOT NULL,
|
|
`scene_name` VARCHAR(255) NULL,
|
|
`location_desc` TEXT NULL,
|
|
`characters_json` JSON NULL,
|
|
`visual_desc` TEXT NULL,
|
|
`action_desc` TEXT NULL,
|
|
`dialogue_text` TEXT NULL,
|
|
`narration_text` TEXT NULL,
|
|
`camera_motion` VARCHAR(100) NULL,
|
|
`effect_type` VARCHAR(100) NULL,
|
|
`duration` DECIMAL(6, 2) NULL,
|
|
`prompt_text` TEXT NULL,
|
|
`negative_prompt` TEXT NULL,
|
|
`status` VARCHAR(50) NOT NULL DEFAULT 'draft',
|
|
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
`updated_at` DATETIME(3) NOT NULL,
|
|
|
|
INDEX `storyboard_shots_project_id_episode_id_shot_no_idx`(`project_id`, `episode_id`, `shot_no`),
|
|
INDEX `storyboard_shots_project_id_status_idx`(`project_id`, `status`),
|
|
UNIQUE INDEX `storyboard_shots_episode_id_shot_no_key`(`episode_id`, `shot_no`),
|
|
PRIMARY KEY (`id`)
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
-- CreateTable
|
|
CREATE TABLE `shot_images` (
|
|
`id` BIGINT NOT NULL AUTO_INCREMENT,
|
|
`project_id` BIGINT NOT NULL,
|
|
`episode_id` BIGINT NULL,
|
|
`shot_id` BIGINT NOT NULL,
|
|
`asset_id` BIGINT NULL,
|
|
`image_type` VARCHAR(50) NOT NULL DEFAULT 'preview',
|
|
`prompt_text` TEXT NULL,
|
|
`negative_prompt` TEXT NULL,
|
|
`quality_score` DECIMAL(5, 2) NULL,
|
|
`status` VARCHAR(50) NOT NULL DEFAULT 'pending',
|
|
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
|
|
INDEX `shot_images_project_id_episode_id_idx`(`project_id`, `episode_id`),
|
|
INDEX `shot_images_shot_id_image_type_idx`(`shot_id`, `image_type`),
|
|
PRIMARY KEY (`id`)
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
-- CreateTable
|
|
CREATE TABLE `plot_memories` (
|
|
`id` BIGINT NOT NULL AUTO_INCREMENT,
|
|
`project_id` BIGINT NOT NULL,
|
|
`episode_id` BIGINT NULL,
|
|
`chapter_id` BIGINT NULL,
|
|
`memory_type` VARCHAR(50) NOT NULL,
|
|
`content` TEXT NOT NULL,
|
|
`importance_level` INTEGER NOT NULL DEFAULT 0,
|
|
`status` VARCHAR(50) NOT NULL DEFAULT 'active',
|
|
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
|
|
INDEX `plot_memories_project_id_episode_id_idx`(`project_id`, `episode_id`),
|
|
INDEX `plot_memories_project_id_memory_type_idx`(`project_id`, `memory_type`),
|
|
PRIMARY KEY (`id`)
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
-- CreateTable
|
|
CREATE TABLE `plot_threads` (
|
|
`id` BIGINT NOT NULL AUTO_INCREMENT,
|
|
`project_id` BIGINT NOT NULL,
|
|
`thread_name` VARCHAR(255) NOT NULL,
|
|
`thread_type` VARCHAR(80) NOT NULL,
|
|
`description` TEXT NULL,
|
|
`start_episode_no` INTEGER NULL,
|
|
`expected_resolve_episode_no` INTEGER NULL,
|
|
`resolved_episode_no` INTEGER NULL,
|
|
`status` VARCHAR(50) NOT NULL DEFAULT 'open',
|
|
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
`updated_at` DATETIME(3) NOT NULL,
|
|
|
|
INDEX `plot_threads_project_id_status_idx`(`project_id`, `status`),
|
|
INDEX `plot_threads_project_id_thread_type_idx`(`project_id`, `thread_type`),
|
|
PRIMARY KEY (`id`)
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
-- CreateTable
|
|
CREATE TABLE `continuity_checks` (
|
|
`id` BIGINT NOT NULL AUTO_INCREMENT,
|
|
`project_id` BIGINT NOT NULL,
|
|
`episode_id` BIGINT NULL,
|
|
`check_type` VARCHAR(80) NOT NULL,
|
|
`result_status` VARCHAR(50) NOT NULL,
|
|
`issue_text` TEXT NULL,
|
|
`suggestion_text` TEXT NULL,
|
|
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
|
|
INDEX `continuity_checks_project_id_episode_id_idx`(`project_id`, `episode_id`),
|
|
INDEX `continuity_checks_result_status_idx`(`result_status`),
|
|
PRIMARY KEY (`id`)
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
-- CreateTable
|
|
CREATE TABLE `assets` (
|
|
`id` BIGINT NOT NULL AUTO_INCREMENT,
|
|
`user_id` BIGINT NULL,
|
|
`project_id` BIGINT NULL,
|
|
`asset_type` VARCHAR(50) NOT NULL,
|
|
`file_path` VARCHAR(500) NOT NULL,
|
|
`file_url` VARCHAR(500) NULL,
|
|
`mime_type` VARCHAR(100) NULL,
|
|
`width` INTEGER NULL,
|
|
`height` INTEGER NULL,
|
|
`duration` DECIMAL(10, 2) NULL,
|
|
`size` BIGINT NULL,
|
|
`hash` VARCHAR(128) NULL,
|
|
`visibility` VARCHAR(30) NOT NULL DEFAULT 'private',
|
|
`status` VARCHAR(50) NOT NULL DEFAULT 'active',
|
|
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
|
|
INDEX `assets_project_id_asset_type_idx`(`project_id`, `asset_type`),
|
|
INDEX `assets_user_id_asset_type_idx`(`user_id`, `asset_type`),
|
|
INDEX `assets_hash_idx`(`hash`),
|
|
PRIMARY KEY (`id`)
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
-- CreateTable
|
|
CREATE TABLE `render_tasks` (
|
|
`id` BIGINT NOT NULL AUTO_INCREMENT,
|
|
`project_id` BIGINT NOT NULL,
|
|
`episode_id` BIGINT NULL,
|
|
`shot_id` BIGINT NULL,
|
|
`task_type` VARCHAR(80) NOT NULL,
|
|
`provider_id` BIGINT NULL,
|
|
`status` VARCHAR(50) NOT NULL DEFAULT 'pending',
|
|
`input_json` JSON NULL,
|
|
`input_hash` VARCHAR(128) NULL,
|
|
`idempotency_key` VARCHAR(191) NULL,
|
|
`output_asset_id` BIGINT NULL,
|
|
`provider_request_id` VARCHAR(255) NULL,
|
|
`retry_count` INTEGER NOT NULL DEFAULT 0,
|
|
`max_retry` INTEGER NOT NULL DEFAULT 0,
|
|
`cost_estimate` DECIMAL(12, 4) NULL,
|
|
`cost_actual` DECIMAL(12, 4) NULL,
|
|
`error_code` VARCHAR(100) NULL,
|
|
`error_message` TEXT NULL,
|
|
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
`started_at` DATETIME(3) NULL,
|
|
`finished_at` DATETIME(3) NULL,
|
|
|
|
UNIQUE INDEX `render_tasks_idempotency_key_key`(`idempotency_key`),
|
|
INDEX `render_tasks_project_id_status_idx`(`project_id`, `status`),
|
|
INDEX `render_tasks_task_type_status_idx`(`task_type`, `status`),
|
|
INDEX `render_tasks_project_id_episode_id_idx`(`project_id`, `episode_id`),
|
|
INDEX `render_tasks_input_hash_idx`(`input_hash`),
|
|
PRIMARY KEY (`id`)
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
-- CreateTable
|
|
CREATE TABLE `provider_configs` (
|
|
`id` BIGINT NOT NULL AUTO_INCREMENT,
|
|
`provider_type` VARCHAR(80) NOT NULL,
|
|
`provider_code` VARCHAR(100) NOT NULL,
|
|
`display_name` VARCHAR(100) NULL,
|
|
`mode` VARCHAR(50) NOT NULL DEFAULT 'mock',
|
|
`model_name` VARCHAR(100) NULL,
|
|
`config_json` JSON NULL,
|
|
`fallback_provider_id` BIGINT NULL,
|
|
`is_enabled` BOOLEAN NOT NULL DEFAULT true,
|
|
`priority` INTEGER NOT NULL DEFAULT 0,
|
|
`rate_limit_json` JSON NULL,
|
|
`cost_rule_json` JSON NULL,
|
|
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
`updated_at` DATETIME(3) NOT NULL,
|
|
|
|
INDEX `provider_configs_provider_type_is_enabled_idx`(`provider_type`, `is_enabled`),
|
|
UNIQUE INDEX `provider_configs_provider_type_provider_code_key`(`provider_type`, `provider_code`),
|
|
PRIMARY KEY (`id`)
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
-- CreateTable
|
|
CREATE TABLE `provider_logs` (
|
|
`id` BIGINT NOT NULL AUTO_INCREMENT,
|
|
`provider_id` BIGINT NULL,
|
|
`task_id` BIGINT NULL,
|
|
`project_id` BIGINT NULL,
|
|
`provider_type` VARCHAR(80) NOT NULL,
|
|
`provider_code` VARCHAR(100) NULL,
|
|
`model_name` VARCHAR(100) NULL,
|
|
`request_json` JSON NULL,
|
|
`response_json` JSON NULL,
|
|
`input_size` INTEGER NULL,
|
|
`output_size` INTEGER NULL,
|
|
`cost_estimate` DECIMAL(12, 4) NULL,
|
|
`cost_actual` DECIMAL(12, 4) NULL,
|
|
`status` VARCHAR(50) NOT NULL DEFAULT 'success',
|
|
`error_code` VARCHAR(100) NULL,
|
|
`error_message` TEXT NULL,
|
|
`started_at` DATETIME(3) NULL,
|
|
`finished_at` DATETIME(3) NULL,
|
|
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
|
|
INDEX `provider_logs_provider_type_status_idx`(`provider_type`, `status`),
|
|
INDEX `provider_logs_project_id_idx`(`project_id`),
|
|
INDEX `provider_logs_task_id_idx`(`task_id`),
|
|
INDEX `provider_logs_created_at_idx`(`created_at`),
|
|
PRIMARY KEY (`id`)
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
-- CreateTable
|
|
CREATE TABLE `orders` (
|
|
`id` BIGINT NOT NULL AUTO_INCREMENT,
|
|
`user_id` BIGINT NOT NULL,
|
|
`project_id` BIGINT NULL,
|
|
`order_no` VARCHAR(100) NOT NULL,
|
|
`package_code` VARCHAR(100) NULL,
|
|
`amount` DECIMAL(12, 2) NOT NULL DEFAULT 0,
|
|
`currency` VARCHAR(20) NOT NULL DEFAULT 'CNY',
|
|
`payment_method` VARCHAR(50) NULL,
|
|
`payment_status` VARCHAR(50) NOT NULL DEFAULT 'pending',
|
|
`paid_at` DATETIME(3) NULL,
|
|
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
`updated_at` DATETIME(3) NOT NULL,
|
|
|
|
UNIQUE INDEX `orders_order_no_key`(`order_no`),
|
|
INDEX `orders_user_id_payment_status_idx`(`user_id`, `payment_status`),
|
|
INDEX `orders_project_id_idx`(`project_id`),
|
|
PRIMARY KEY (`id`)
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
-- CreateTable
|
|
CREATE TABLE `quota_accounts` (
|
|
`id` BIGINT NOT NULL AUTO_INCREMENT,
|
|
`user_id` BIGINT NOT NULL,
|
|
`total_quota` DECIMAL(12, 2) NOT NULL DEFAULT 0,
|
|
`available_quota` DECIMAL(12, 2) NOT NULL DEFAULT 0,
|
|
`frozen_quota` DECIMAL(12, 2) NOT NULL DEFAULT 0,
|
|
`used_quota` DECIMAL(12, 2) NOT NULL DEFAULT 0,
|
|
`status` VARCHAR(50) NOT NULL DEFAULT 'active',
|
|
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
`updated_at` DATETIME(3) NOT NULL,
|
|
|
|
UNIQUE INDEX `quota_accounts_user_id_key`(`user_id`),
|
|
INDEX `quota_accounts_status_idx`(`status`),
|
|
PRIMARY KEY (`id`)
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
-- CreateTable
|
|
CREATE TABLE `quota_logs` (
|
|
`id` BIGINT NOT NULL AUTO_INCREMENT,
|
|
`user_id` BIGINT NOT NULL,
|
|
`project_id` BIGINT NULL,
|
|
`task_id` BIGINT NULL,
|
|
`change_type` VARCHAR(50) NOT NULL,
|
|
`amount` DECIMAL(12, 2) NOT NULL,
|
|
`balance_after` DECIMAL(12, 2) NULL,
|
|
`reason` VARCHAR(255) NULL,
|
|
`metadata_json` JSON NULL,
|
|
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
|
|
INDEX `quota_logs_user_id_created_at_idx`(`user_id`, `created_at`),
|
|
INDEX `quota_logs_project_id_idx`(`project_id`),
|
|
INDEX `quota_logs_task_id_idx`(`task_id`),
|
|
PRIMARY KEY (`id`)
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
-- CreateTable
|
|
CREATE TABLE `revision_requests` (
|
|
`id` BIGINT NOT NULL AUTO_INCREMENT,
|
|
`project_id` BIGINT NOT NULL,
|
|
`user_id` BIGINT NOT NULL,
|
|
`revision_type` VARCHAR(50) NOT NULL,
|
|
`target_type` VARCHAR(80) NULL,
|
|
`target_id` BIGINT NULL,
|
|
`description` TEXT NOT NULL,
|
|
`status` VARCHAR(50) NOT NULL DEFAULT 'pending',
|
|
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
`updated_at` DATETIME(3) NOT NULL,
|
|
|
|
INDEX `revision_requests_project_id_status_idx`(`project_id`, `status`),
|
|
INDEX `revision_requests_user_id_status_idx`(`user_id`, `status`),
|
|
PRIMARY KEY (`id`)
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
-- CreateTable
|
|
CREATE TABLE `content_reviews` (
|
|
`id` BIGINT NOT NULL AUTO_INCREMENT,
|
|
`project_id` BIGINT NULL,
|
|
`user_id` BIGINT NULL,
|
|
`target_type` VARCHAR(80) NOT NULL,
|
|
`target_id` BIGINT NULL,
|
|
`review_type` VARCHAR(80) NOT NULL,
|
|
`result_status` VARCHAR(50) NOT NULL DEFAULT 'pending',
|
|
`risk_level` VARCHAR(50) NULL,
|
|
`issue_text` TEXT NULL,
|
|
`suggestion_text` TEXT NULL,
|
|
`reviewer_id` BIGINT NULL,
|
|
`reviewed_at` DATETIME(3) NULL,
|
|
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
`updated_at` DATETIME(3) NOT NULL,
|
|
|
|
INDEX `content_reviews_project_id_result_status_idx`(`project_id`, `result_status`),
|
|
INDEX `content_reviews_target_type_target_id_idx`(`target_type`, `target_id`),
|
|
INDEX `content_reviews_review_type_result_status_idx`(`review_type`, `result_status`),
|
|
PRIMARY KEY (`id`)
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
-- CreateTable
|
|
CREATE TABLE `case_showcases` (
|
|
`id` BIGINT NOT NULL AUTO_INCREMENT,
|
|
`project_id` BIGINT NOT NULL,
|
|
`user_id` BIGINT NULL,
|
|
`title` VARCHAR(255) NOT NULL,
|
|
`cover_asset_id` BIGINT NULL,
|
|
`video_asset_id` BIGINT NULL,
|
|
`authorization_status` VARCHAR(50) NOT NULL DEFAULT 'pending',
|
|
`visibility` VARCHAR(30) NOT NULL DEFAULT 'private',
|
|
`sort_order` INTEGER NOT NULL DEFAULT 0,
|
|
`published_at` DATETIME(3) NULL,
|
|
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
`updated_at` DATETIME(3) NOT NULL,
|
|
|
|
INDEX `case_showcases_visibility_sort_order_idx`(`visibility`, `sort_order`),
|
|
INDEX `case_showcases_project_id_idx`(`project_id`),
|
|
PRIMARY KEY (`id`)
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
-- CreateTable
|
|
CREATE TABLE `analytics_events` (
|
|
`id` BIGINT NOT NULL AUTO_INCREMENT,
|
|
`project_id` BIGINT NOT NULL,
|
|
`episode_id` BIGINT NULL,
|
|
`event_type` VARCHAR(80) NOT NULL,
|
|
`platform` VARCHAR(80) NULL,
|
|
`metric_json` JSON NULL,
|
|
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
|
|
INDEX `analytics_events_project_id_idx`(`project_id`),
|
|
INDEX `analytics_events_episode_id_idx`(`episode_id`),
|
|
INDEX `analytics_events_event_type_created_at_idx`(`event_type`, `created_at`),
|
|
PRIMARY KEY (`id`)
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
-- CreateTable
|
|
CREATE TABLE `system_configs` (
|
|
`id` BIGINT NOT NULL AUTO_INCREMENT,
|
|
`config_key` VARCHAR(191) NOT NULL,
|
|
`config_value` JSON NULL,
|
|
`description` TEXT NULL,
|
|
`is_public` BOOLEAN NOT NULL DEFAULT false,
|
|
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
`updated_at` DATETIME(3) NOT NULL,
|
|
|
|
UNIQUE INDEX `system_configs_config_key_key`(`config_key`),
|
|
INDEX `system_configs_is_public_idx`(`is_public`),
|
|
PRIMARY KEY (`id`)
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
-- CreateTable
|
|
CREATE TABLE `operation_logs` (
|
|
`id` BIGINT NOT NULL AUTO_INCREMENT,
|
|
`user_id` BIGINT NULL,
|
|
`operator_role` VARCHAR(50) NULL,
|
|
`action` VARCHAR(100) NOT NULL,
|
|
`target_type` VARCHAR(80) NULL,
|
|
`target_id` BIGINT NULL,
|
|
`ip` VARCHAR(80) NULL,
|
|
`user_agent` TEXT NULL,
|
|
`metadata_json` JSON NULL,
|
|
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
|
|
INDEX `operation_logs_user_id_created_at_idx`(`user_id`, `created_at`),
|
|
INDEX `operation_logs_target_type_target_id_idx`(`target_type`, `target_id`),
|
|
INDEX `operation_logs_action_created_at_idx`(`action`, `created_at`),
|
|
PRIMARY KEY (`id`)
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|