-- ============================================
-- 赛事管理模块数据库表结构
-- ============================================

-- 1. 赛事表
CREATE TABLE `t_contest` (
  `id` int NOT NULL AUTO_INCREMENT COMMENT '主键id',
  `contest_name` varchar(127) NOT NULL COMMENT '赛事名称',
  `contest_type` varchar(31) NOT NULL COMMENT '赛事类型，字典：contest_type：individual/team',
  `contest_state` varchar(31) NOT NULL DEFAULT 'unpublished' COMMENT '赛事状态（未发布：unpublished 已发布：published）',
  `start_time` datetime NOT NULL COMMENT '赛事开始时间',
  `end_time` datetime NOT NULL COMMENT '赛事结束时间',
  `address` varchar(512) DEFAULT NULL COMMENT '线下地址',
  `content` text COMMENT '赛事详情',
  `contest_tenants` json DEFAULT NULL COMMENT '赛事参赛范围（授权租户ID数组）',
  `cover_url` varchar(255) DEFAULT NULL COMMENT '封面url',
  `poster_url` varchar(255) DEFAULT NULL COMMENT '海报url',
  `contact_name` varchar(63) DEFAULT NULL COMMENT '联系人',
  `contact_phone` varchar(63) DEFAULT NULL COMMENT '联系电话',
  `contact_qrcode` varchar(255) DEFAULT NULL COMMENT '联系人二维码',
  `organizers` json DEFAULT NULL COMMENT '主办单位数组',
  `co_organizers` json DEFAULT NULL COMMENT '协办单位数组',
  `sponsors` json DEFAULT NULL COMMENT '赞助单位数组',
  `register_start_time` datetime NOT NULL COMMENT '报名开始时间',
  `register_end_time` datetime NOT NULL COMMENT '报名结束时间',
  `register_state` varchar(31) DEFAULT NULL COMMENT '报名任务状态，映射写死：启动(started)，已关闭(closed)',
  `submit_rule` varchar(31) NOT NULL DEFAULT 'once' COMMENT '提交规则：once/resubmit',
  `submit_start_time` datetime NOT NULL COMMENT '作品提交开始时间',
  `submit_end_time` datetime NOT NULL COMMENT '作品提交结束时间',
  `review_rule_id` int DEFAULT NULL COMMENT '评审规则id',
  `review_start_time` datetime NOT NULL COMMENT '评审开始时间',
  `review_end_time` datetime NOT NULL COMMENT '评审结束时间',
  `result_publish_time` datetime DEFAULT NULL COMMENT '结果发布时间',
  `creator` int DEFAULT NULL COMMENT '创建人ID',
  `modifier` int DEFAULT NULL COMMENT '修改人ID',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `modify_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `valid_state` int NOT NULL DEFAULT 1 COMMENT '有效状态（1-有效，2-失效）',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_contest_name` (`contest_name`),
  KEY `idx_contest_state` (`contest_state`),
  KEY `idx_contest_time` (`start_time`, `end_time`),
  KEY `idx_review_rule` (`review_rule_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='赛事表';

-- 2. 赛事附件表
CREATE TABLE `t_contest_attachment` (
  `id` int NOT NULL AUTO_INCREMENT COMMENT '主键id',
  `contest_id` int NOT NULL COMMENT '赛事id',
  `file_name` varchar(100) NOT NULL COMMENT '文件名',
  `file_url` varchar(255) NOT NULL COMMENT '文件路径',
  `format` varchar(255) DEFAULT NULL COMMENT '文件类型（png,mp4）',
  `file_type` varchar(255) DEFAULT NULL COMMENT '素材类型（image,video）',
  `size` varchar(255) DEFAULT '0' COMMENT '文件大小',
  `creator` int DEFAULT NULL COMMENT '创建人ID',
  `modifier` int DEFAULT NULL COMMENT '修改人ID',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `modify_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `valid_state` int NOT NULL DEFAULT 1 COMMENT '有效状态（1-有效，2-失效）',
  PRIMARY KEY (`id`),
  KEY `idx_contest` (`contest_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='赛事附件';

-- 3. 评审规则表
CREATE TABLE `t_contest_review_rule` (
  `id` int NOT NULL AUTO_INCREMENT COMMENT '主键id',
  `contest_id` int NOT NULL COMMENT '赛事id',
  `rule_name` varchar(127) NOT NULL COMMENT '规则名称',
  `dimensions` json NOT NULL COMMENT '评分维度配置JSON',
  `calculation_rule` varchar(31) DEFAULT 'average' COMMENT '计算规则：average/max/min/weighted',
  `creator` int DEFAULT NULL COMMENT '创建人ID',
  `modifier` int DEFAULT NULL COMMENT '修改人ID',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `modify_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `valid_state` int NOT NULL DEFAULT 1 COMMENT '有效状态（1-有效，2-失效）',
  PRIMARY KEY (`id`),
  KEY `idx_contest` (`contest_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='评审规则表';

-- 4. 赛事团队表
CREATE TABLE `t_contest_team` (
  `id` int NOT NULL AUTO_INCREMENT COMMENT '主键id',
  `tenant_id` int NOT NULL COMMENT '团队所属租户ID',
  `contest_id` int NOT NULL COMMENT '赛事id',
  `team_name` varchar(127) NOT NULL COMMENT '团队名称（租户内唯一）',
  `leader_user_id` int NOT NULL COMMENT '团队负责人用户id',
  `max_members` int DEFAULT NULL COMMENT '团队最大成员数',
  `creator` int DEFAULT NULL COMMENT '创建人ID',
  `modifier` int DEFAULT NULL COMMENT '修改人ID',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `modify_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `valid_state` int NOT NULL DEFAULT 1 COMMENT '有效状态（1-有效，2-失效）',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_team_name` (`tenant_id`,`contest_id`,`team_name`),
  KEY `idx_contest` (`contest_id`),
  KEY `idx_leader` (`leader_user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='赛事团队';

-- 5. 团队成员表
CREATE TABLE `t_contest_team_member` (
  `id` int NOT NULL AUTO_INCREMENT COMMENT '主键id',
  `tenant_id` int NOT NULL COMMENT '成员所属租户ID',
  `team_id` int NOT NULL COMMENT '团队id',
  `user_id` int NOT NULL COMMENT '成员用户id',
  `role` varchar(31) NOT NULL DEFAULT 'member' COMMENT '成员角色：member/leader/mentor',
  `creator` int DEFAULT NULL COMMENT '创建人ID',
  `modifier` int DEFAULT NULL COMMENT '修改人ID',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `modify_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_member_once` (`tenant_id`,`team_id`,`user_id`),
  KEY `idx_team` (`team_id`),
  KEY `idx_user` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='团队成员';

-- 6. 赛事报名表
CREATE TABLE `t_contest_registration` (
  `id` int NOT NULL AUTO_INCREMENT COMMENT '主键id',
  `contest_id` int NOT NULL COMMENT '赛事id',
  `tenant_id` int NOT NULL COMMENT '所属租户ID（学校/机构）',
  `registration_type` varchar(20) DEFAULT NULL COMMENT '报名类型：individual（个人）/team（团队）',
  `team_id` int DEFAULT NULL COMMENT '团队id',
  `team_name` varchar(255) DEFAULT NULL COMMENT '团队名称快照（团队赛）',
  `user_id` int NOT NULL COMMENT '账号id',
  `account_no` varchar(64) NOT NULL COMMENT '报名账号（记录报名快照）',
  `account_name` varchar(100) NOT NULL COMMENT '报名账号名称（记录报名快照）',
  `role` varchar(63) DEFAULT NULL COMMENT '报名角色快照：leader（队长）/member（队员）/mentor（指导教师）',
  `registration_state` varchar(31) NOT NULL DEFAULT 'pending' COMMENT '报名状态：pending（待审核）、passed（已通过）、rejected（已拒绝）、withdrawn（已撤回）',
  `registrant` int DEFAULT NULL COMMENT '实际报名人用户ID（老师报名填老师用户ID）',
  `registration_time` datetime NOT NULL COMMENT '报名时间',
  `reason` varchar(1023) DEFAULT NULL COMMENT '审核理由',
  `operator` int DEFAULT NULL COMMENT '审核人用户ID',
  `operation_date` datetime DEFAULT NULL COMMENT '审核时间',
  `creator` int DEFAULT NULL COMMENT '创建人ID',
  `modifier` int DEFAULT NULL COMMENT '修改人ID',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `modify_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  KEY `idx_contest_tenant` (`contest_id`, `tenant_id`),
  KEY `idx_user_contest` (`user_id`, `contest_id`),
  KEY `idx_team` (`team_id`),
  KEY `idx_registration_state` (`registration_state`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='赛事报名人员记录表';

-- 7. 参赛作品表
CREATE TABLE `t_contest_work` (
  `id` int NOT NULL AUTO_INCREMENT COMMENT '主键id',
  `tenant_id` int NOT NULL COMMENT '作品所属租户ID',
  `contest_id` int NOT NULL COMMENT '赛事id',
  `registration_id` int NOT NULL COMMENT '报名记录id（关联t_contest_registration.id）',
  `work_no` varchar(63) DEFAULT NULL COMMENT '作品编号（展示用唯一编号）',
  `title` varchar(255) NOT NULL COMMENT '作品标题',
  `description` text DEFAULT NULL COMMENT '作品说明',
  `files` json DEFAULT NULL COMMENT '作品文件列表（简易场景）',
  `version` int NOT NULL DEFAULT 1 COMMENT '作品版本号（递增）',
  `is_latest` tinyint(1) NOT NULL DEFAULT 1 COMMENT '是否最新版本：1是/0否',
  `status` varchar(31) NOT NULL DEFAULT 'submitted' COMMENT '作品状态：submitted/locked/reviewing/rejected/accepted',
  `submit_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '提交时间',
  `submitter_user_id` int DEFAULT NULL COMMENT '提交人用户id',
  `submitter_account_no` varchar(127) DEFAULT NULL COMMENT '提交人账号（手机号/学号）',
  `submit_source` varchar(31) NOT NULL DEFAULT 'teacher' COMMENT '提交来源：teacher/student/team_leader',
  `preview_url` varchar(255) DEFAULT NULL COMMENT '作品预览URL（3D/视频）',
  `ai_model_meta` json DEFAULT NULL COMMENT 'AI建模元数据（模型类型、版本、参数）',
  `creator` int DEFAULT NULL COMMENT '创建人ID',
  `modifier` int DEFAULT NULL COMMENT '修改人ID',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `modify_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `valid_state` int NOT NULL DEFAULT 1 COMMENT '有效状态（1-有效，2-失效）',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_work_no` (`work_no`),
  KEY `idx_work_contest_latest` (`tenant_id`,`contest_id`,`is_latest`),
  KEY `idx_work_registration` (`registration_id`),
  KEY `idx_submit_filter` (`tenant_id`,`contest_id`,`submit_time`,`status`),
  KEY `idx_contest_status` (`contest_id`, `status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='参赛作品';

-- 8. 作品附件文件表
CREATE TABLE `t_contest_work_attachment` (
  `id` int NOT NULL AUTO_INCREMENT COMMENT '主键id',
  `tenant_id` int NOT NULL COMMENT '所属租户ID',
  `contest_id` int NOT NULL COMMENT '赛事id',
  `work_id` int NOT NULL COMMENT '作品id',
  `file_name` varchar(255) NOT NULL COMMENT '文件名',
  `file_url` varchar(255) NOT NULL COMMENT '文件路径',
  `format` varchar(255) DEFAULT NULL COMMENT '文件类型（png,mp4）',
  `file_type` varchar(255) DEFAULT NULL COMMENT '素材类型（image,video）',
  `size` varchar(255) DEFAULT '0' COMMENT '文件大小',
  `creator` int DEFAULT NULL COMMENT '创建人ID',
  `modifier` int DEFAULT NULL COMMENT '修改人ID',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `modify_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  KEY `idx_work_file` (`tenant_id`,`contest_id`,`work_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='作品附件文件表';

-- 9. 比赛评委关联表（比赛与评委的多对多关系）
CREATE TABLE `t_contest_judge` (
  `id` int NOT NULL AUTO_INCREMENT COMMENT '主键id',
  `contest_id` int NOT NULL COMMENT '比赛id',
  `judge_id` int NOT NULL COMMENT '评委用户id',
  `specialty` varchar(255) DEFAULT NULL COMMENT '评审专业领域（可选）',
  `weight` decimal(3,2) DEFAULT NULL COMMENT '评审权重（可选，用于加权平均计算）',
  `description` text DEFAULT NULL COMMENT '评委在该比赛中的说明',
  `creator` int DEFAULT NULL COMMENT '创建人ID',
  `modifier` int DEFAULT NULL COMMENT '修改人ID',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `modify_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `valid_state` int NOT NULL DEFAULT 1 COMMENT '有效状态（1-有效，2-失效）',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_contest_judge` (`contest_id`, `judge_id`),
  KEY `idx_contest` (`contest_id`),
  KEY `idx_judge` (`judge_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='比赛评委关联表';

-- 10. 作品分配表（评委分配作品）
CREATE TABLE `t_contest_work_judge_assignment` (
  `id` int NOT NULL AUTO_INCREMENT COMMENT '主键id',
  `contest_id` int NOT NULL COMMENT '赛事id',
  `work_id` int NOT NULL COMMENT '作品id',
  `judge_id` int NOT NULL COMMENT '评委用户id',
  `assignment_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '分配时间',
  `status` varchar(31) NOT NULL DEFAULT 'assigned' COMMENT '分配状态：assigned/reviewing/completed',
  `creator` int DEFAULT NULL COMMENT '创建人ID',
  `modifier` int DEFAULT NULL COMMENT '修改人ID',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `modify_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_work_judge` (`work_id`, `judge_id`),
  KEY `idx_contest_judge` (`contest_id`, `judge_id`),
  KEY `idx_work` (`work_id`),
  KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='作品分配表';

-- 11. 作品评分表
CREATE TABLE `t_contest_work_score` (
  `id` int NOT NULL AUTO_INCREMENT COMMENT '主键id',
  `tenant_id` int NOT NULL COMMENT '所属租户ID',
  `contest_id` int NOT NULL COMMENT '赛事id',
  `work_id` int NOT NULL COMMENT '作品id',
  `assignment_id` int NOT NULL COMMENT '分配记录id（关联t_contest_work_judge_assignment）',
  `judge_id` int NOT NULL COMMENT '评委用户id',
  `judge_name` varchar(127) NOT NULL COMMENT '评委姓名',
  `dimension_scores` json NOT NULL COMMENT '各维度评分JSON，格式：{"dimension1": 85, "dimension2": 90, ...}',
  `total_score` decimal(10,2) NOT NULL COMMENT '总分（根据评审规则计算）',
  `comments` text DEFAULT NULL COMMENT '评语',
  `score_time` datetime NOT NULL COMMENT '评分时间',
  `creator` int DEFAULT NULL COMMENT '创建人ID',
  `modifier` int DEFAULT NULL COMMENT '修改人ID',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `modify_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `valid_state` int NOT NULL DEFAULT 1 COMMENT '有效状态（1-有效，2-失效）',
  PRIMARY KEY (`id`),
  KEY `idx_contest_work_judge` (`contest_id`, `work_id`, `judge_id`),
  KEY `idx_work` (`work_id`),
  KEY `idx_assignment` (`assignment_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='作品评分表';

-- 12. 赛事公告表
CREATE TABLE `t_contest_notice` (
  `id` int NOT NULL AUTO_INCREMENT COMMENT '主键id',
  `contest_id` int NOT NULL COMMENT '赛事id',
  `title` varchar(255) NOT NULL COMMENT '公告标题',
  `content` text NOT NULL COMMENT '公告内容',
  `notice_type` varchar(31) NOT NULL DEFAULT 'manual' COMMENT '公告类型：system/manual/urgent',
  `priority` int DEFAULT 0 COMMENT '优先级（数字越大优先级越高）',
  `publish_time` datetime DEFAULT NULL COMMENT '发布时间',
  `creator` int DEFAULT NULL COMMENT '创建人ID',
  `modifier` int DEFAULT NULL COMMENT '修改人ID',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `modify_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `valid_state` int NOT NULL DEFAULT 1 COMMENT '有效状态（1-有效，2-失效）',
  PRIMARY KEY (`id`),
  KEY `idx_contest` (`contest_id`),
  KEY `idx_publish_time` (`publish_time`),
  KEY `idx_notice_type` (`notice_type`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='赛事公告表';
