-- 竞赛/活动表
CREATE TABLE IF NOT EXISTS `t_biz_contest` (
    `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键 ID',
    `contest_name` VARCHAR(200) NOT NULL COMMENT '赛事名称',
    `contest_type` VARCHAR(50) NOT NULL COMMENT '赛事类型：individual/team',
    `contest_state` VARCHAR(50) DEFAULT 'unpublished' COMMENT '赛事状态：unpublished/published',
    `status` VARCHAR(50) DEFAULT 'ongoing' COMMENT '赛事进度状态：ongoing/finished',
    `start_time` DATETIME NOT NULL COMMENT '赛事开始时间',
    `end_time` DATETIME NOT NULL COMMENT '赛事结束时间',
    `address` VARCHAR(500) DEFAULT NULL COMMENT '线下地址',
    `content` TEXT DEFAULT NULL COMMENT '赛事详情',
    `contest_tenants` JSON DEFAULT NULL COMMENT '授权租户 ID 数组',
    `cover_url` VARCHAR(500) DEFAULT NULL COMMENT '封面 URL',
    `poster_url` VARCHAR(500) DEFAULT NULL COMMENT '海报 URL',
    `contact_name` VARCHAR(50) DEFAULT NULL COMMENT '联系人',
    `contact_phone` VARCHAR(50) DEFAULT NULL COMMENT '联系电话',
    `contact_qrcode` VARCHAR(500) 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(50) DEFAULT NULL COMMENT '报名任务状态：started/closed',
    `require_audit` TINYINT DEFAULT 1 COMMENT '报名是否需要审核',
    `allowed_grades` JSON DEFAULT NULL COMMENT '允许报名的年级 ID 数组',
    `allowed_classes` JSON DEFAULT NULL COMMENT '允许报名的班级 ID 数组',
    `team_min_members` INT DEFAULT NULL COMMENT '团队最少成员数',
    `team_max_members` INT DEFAULT NULL COMMENT '团队最多成员数',
    -- 定向推送条件
    `target_cities` JSON DEFAULT NULL COMMENT '目标城市列表',
    `age_min` INT DEFAULT NULL COMMENT '最小年龄限制',
    `age_max` INT DEFAULT NULL COMMENT '最大年龄限制',
    -- 作品配置
    `submit_rule` VARCHAR(50) DEFAULT 'once' COMMENT '提交规则：once/resubmit',
    `submit_start_time` DATETIME NOT NULL COMMENT '作品提交开始时间',
    `submit_end_time` DATETIME NOT NULL COMMENT '作品提交结束时间',
    `work_type` VARCHAR(50) DEFAULT NULL COMMENT '作品类型：image/video/document/code/other',
    `work_requirement` TEXT DEFAULT NULL COMMENT '作品要求说明',
    -- 评审配置
    `review_rule_id` BIGINT DEFAULT NULL COMMENT '评审规则 ID',
    `review_start_time` DATETIME DEFAULT NULL COMMENT '评审开始时间',
    `review_end_time` DATETIME DEFAULT NULL COMMENT '评审结束时间',
    -- 赛果配置
    `result_state` VARCHAR(50) DEFAULT 'unpublished' COMMENT '赛果状态：unpublished/published',
    `result_publish_time` DATETIME DEFAULT NULL COMMENT '结果发布时间',
    -- 可见范围
    `visibility` VARCHAR(50) DEFAULT 'designated' COMMENT '可见范围：public/designated/internal',
    `valid_state` TINYINT DEFAULT 1 COMMENT '有效状态：1-有效，2-失效',
    `creator` BIGINT DEFAULT NULL COMMENT '创建人 ID',
    `modifier` BIGINT DEFAULT NULL COMMENT '修改人 ID',
    `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `modify_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `deleted` TINYINT DEFAULT 0 COMMENT '逻辑删除标识（0-未删除，1-已删除）',
    PRIMARY KEY (`id`),
    UNIQUE KEY `uk_contest_name` (`contest_name`),
    KEY `idx_contest_state` (`contest_state`),
    KEY `idx_status` (`status`),
    KEY `idx_contest_type` (`contest_type`),
    KEY `idx_visibility` (`visibility`),
    KEY `idx_valid_state` (`valid_state`),
    KEY `idx_start_time` (`start_time`),
    KEY `idx_end_time` (`end_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='竞赛/活动表';

-- 竞赛附件表
CREATE TABLE IF NOT EXISTS `t_biz_contest_attachment` (
    `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键 ID',
    `contest_id` BIGINT NOT NULL COMMENT '竞赛 ID',
    `name` VARCHAR(100) NOT NULL COMMENT '附件名称',
    `url` VARCHAR(500) NOT NULL COMMENT '附件 URL',
    `type` VARCHAR(50) DEFAULT NULL COMMENT '附件类型',
    `size` BIGINT DEFAULT NULL COMMENT '文件大小（字节）',
    `sort` INT DEFAULT 0 COMMENT '排序',
    `valid_state` TINYINT DEFAULT 1 COMMENT '有效状态：1-有效，2-失效',
    `create_by` VARCHAR(50) DEFAULT NULL COMMENT '创建人',
    `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `update_by` VARCHAR(50) DEFAULT NULL COMMENT '更新人',
    `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `deleted` TINYINT DEFAULT 0 COMMENT '逻辑删除标识（0-未删除，1-已删除）',
    PRIMARY KEY (`id`),
    KEY `idx_contest_id` (`contest_id`),
    KEY `idx_sort` (`sort`),
    KEY `idx_valid_state` (`valid_state`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='竞赛附件表';
