-- =====================================================
-- 幼儿园阅读平台数据库初始化脚本
-- 版本: V1
-- 创建时间: 2026-03-14
-- 描述: 基于 ORM 实体类构建完整的数据库表结构
-- =====================================================

-- -----------------------------------------------------
-- 公共字段说明：
-- id: 雪花算法生成的主键
-- create_by: 创建人
-- created_at: 创建时间
-- update_by: 更新人
-- updated_at: 更新时间
-- deleted: 逻辑删除标识 (0-未删除, 1-已删除)
-- -----------------------------------------------------

-- -----------------------------------------------------
-- 表1: 管理员用户表 (admin_user)
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `admin_user` (
    `id` BIGINT NOT NULL COMMENT '主键ID',
    `username` VARCHAR(50) NOT NULL COMMENT '用户名',
    `password` VARCHAR(255) NOT NULL COMMENT '密码',
    `name` VARCHAR(100) COMMENT '姓名',
    `email` VARCHAR(100) COMMENT '邮箱',
    `phone` VARCHAR(20) COMMENT '手机号',
    `avatar_url` VARCHAR(500) COMMENT '头像URL',
    `status` VARCHAR(20) DEFAULT 'ACTIVE' COMMENT '状态',
    `last_login_at` DATETIME COMMENT '最后登录时间',
    `create_by` VARCHAR(50) COMMENT '创建人',
    `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `update_by` VARCHAR(50) COMMENT '更新人',
    `updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `deleted` TINYINT DEFAULT 0 COMMENT '删除标识(0-未删除,1-已删除)',
    PRIMARY KEY (`id`),
    UNIQUE KEY `uk_username` (`username`),
    KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='管理员用户表';

-- -----------------------------------------------------
-- 表2: 租户表 (tenant)
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `tenant` (
    `id` BIGINT NOT NULL COMMENT '主键ID',
    `name` VARCHAR(100) NOT NULL COMMENT '租户名称',
    `code` VARCHAR(50) NOT NULL COMMENT '租户编码',
    `username` VARCHAR(50) NOT NULL COMMENT '用户名',
    `password` VARCHAR(255) NOT NULL COMMENT '密码',
    `contact_name` VARCHAR(100) COMMENT '联系人姓名',
    `contact_phone` VARCHAR(20) COMMENT '联系人手机号',
    `contact_email` VARCHAR(100) COMMENT '联系人邮箱',
    `address` VARCHAR(500) COMMENT '地址',
    `logo_url` VARCHAR(500) COMMENT 'Logo URL',
    `status` VARCHAR(20) DEFAULT 'ACTIVE' COMMENT '状态',
    `expire_at` DATETIME COMMENT '过期时间',
    `max_students` INT DEFAULT 0 COMMENT '最大学生数',
    `max_teachers` INT DEFAULT 0 COMMENT '最大教师数',
    `create_by` VARCHAR(50) COMMENT '创建人',
    `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `update_by` VARCHAR(50) COMMENT '更新人',
    `updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `deleted` TINYINT DEFAULT 0 COMMENT '删除标识(0-未删除,1-已删除)',
    PRIMARY KEY (`id`),
    UNIQUE KEY `uk_code` (`code`),
    UNIQUE KEY `uk_username` (`username`),
    KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='租户表';

-- -----------------------------------------------------
-- 表3: 教师表 (teacher)
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `teacher` (
    `id` BIGINT NOT NULL COMMENT '主键ID',
    `tenant_id` BIGINT NOT NULL COMMENT '租户ID',
    `username` VARCHAR(50) NOT NULL COMMENT '用户名',
    `password` VARCHAR(255) NOT NULL COMMENT '密码',
    `name` VARCHAR(100) NOT NULL COMMENT '姓名',
    `phone` VARCHAR(20) COMMENT '手机号',
    `email` VARCHAR(100) COMMENT '邮箱',
    `avatar_url` VARCHAR(500) COMMENT '头像URL',
    `gender` VARCHAR(10) COMMENT '性别',
    `bio` TEXT COMMENT '个人简介',
    `status` VARCHAR(20) DEFAULT 'ACTIVE' COMMENT '状态',
    `last_login_at` DATETIME COMMENT '最后登录时间',
    `create_by` VARCHAR(50) COMMENT '创建人',
    `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `update_by` VARCHAR(50) COMMENT '更新人',
    `updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `deleted` TINYINT DEFAULT 0 COMMENT '删除标识(0-未删除,1-已删除)',
    PRIMARY KEY (`id`),
    KEY `idx_tenant_id` (`tenant_id`),
    KEY `idx_username` (`username`),
    KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='教师表';

-- -----------------------------------------------------
-- 表4: 学生表 (student)
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `student` (
    `id` BIGINT NOT NULL COMMENT '主键ID',
    `tenant_id` BIGINT NOT NULL COMMENT '租户ID',
    `name` VARCHAR(100) NOT NULL COMMENT '姓名',
    `gender` VARCHAR(10) COMMENT '性别',
    `birth_date` DATE COMMENT '出生日期',
    `avatar_url` VARCHAR(500) COMMENT '头像URL',
    `grade` VARCHAR(50) COMMENT '年级',
    `student_no` VARCHAR(50) COMMENT '学号',
    `reading_level` VARCHAR(50) COMMENT '阅读水平',
    `interests` VARCHAR(500) COMMENT '兴趣爱好',
    `notes` TEXT COMMENT '备注',
    `status` VARCHAR(20) DEFAULT 'ACTIVE' COMMENT '状态',
    `create_by` VARCHAR(50) COMMENT '创建人',
    `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `update_by` VARCHAR(50) COMMENT '更新人',
    `updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `deleted` TINYINT DEFAULT 0 COMMENT '删除标识(0-未删除,1-已删除)',
    PRIMARY KEY (`id`),
    KEY `idx_tenant_id` (`tenant_id`),
    KEY `idx_student_no` (`student_no`),
    KEY `idx_grade` (`grade`),
    KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='学生表';

-- -----------------------------------------------------
-- 表5: 家长表 (parent)
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `parent` (
    `id` BIGINT NOT NULL COMMENT '主键ID',
    `tenant_id` BIGINT NOT NULL COMMENT '租户ID',
    `username` VARCHAR(50) NOT NULL COMMENT '用户名',
    `password` VARCHAR(255) NOT NULL COMMENT '密码',
    `name` VARCHAR(100) NOT NULL COMMENT '姓名',
    `phone` VARCHAR(20) COMMENT '手机号',
    `email` VARCHAR(100) COMMENT '邮箱',
    `avatar_url` VARCHAR(500) COMMENT '头像URL',
    `gender` VARCHAR(10) COMMENT '性别',
    `status` VARCHAR(20) DEFAULT 'ACTIVE' COMMENT '状态',
    `last_login_at` DATETIME COMMENT '最后登录时间',
    `create_by` VARCHAR(50) COMMENT '创建人',
    `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `update_by` VARCHAR(50) COMMENT '更新人',
    `updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `deleted` TINYINT DEFAULT 0 COMMENT '删除标识(0-未删除,1-已删除)',
    PRIMARY KEY (`id`),
    KEY `idx_tenant_id` (`tenant_id`),
    KEY `idx_username` (`username`),
    KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='家长表';

-- -----------------------------------------------------
-- 表6: 班级表 (clazz)
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `clazz` (
    `id` BIGINT NOT NULL COMMENT '主键ID',
    `tenant_id` BIGINT NOT NULL COMMENT '租户ID',
    `name` VARCHAR(100) NOT NULL COMMENT '班级名称',
    `grade` VARCHAR(50) COMMENT '年级',
    `description` TEXT COMMENT '班级描述',
    `capacity` INT DEFAULT 30 COMMENT '容纳人数',
    `status` VARCHAR(20) DEFAULT 'ACTIVE' COMMENT '状态',
    `create_by` VARCHAR(50) COMMENT '创建人',
    `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `update_by` VARCHAR(50) COMMENT '更新人',
    `updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `deleted` TINYINT DEFAULT 0 COMMENT '删除标识(0-未删除,1-已删除)',
    PRIMARY KEY (`id`),
    KEY `idx_tenant_id` (`tenant_id`),
    KEY `idx_grade` (`grade`),
    KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='班级表';

-- -----------------------------------------------------
-- 表7: 班级教师关联表 (class_teacher)
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `class_teacher` (
    `id` BIGINT NOT NULL COMMENT '主键ID',
    `class_id` BIGINT NOT NULL COMMENT '班级ID',
    `teacher_id` BIGINT NOT NULL COMMENT '教师ID',
    `role` VARCHAR(50) COMMENT '角色',
    `create_by` VARCHAR(50) COMMENT '创建人',
    `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `update_by` VARCHAR(50) COMMENT '更新人',
    `updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `deleted` TINYINT DEFAULT 0 COMMENT '删除标识(0-未删除,1-已删除)',
    PRIMARY KEY (`id`),
    KEY `idx_class_id` (`class_id`),
    KEY `idx_teacher_id` (`teacher_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='班级教师关联表';

-- -----------------------------------------------------
-- 表8: 课程表 (course)
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `course` (
    `id` BIGINT NOT NULL COMMENT '主键ID',
    `tenant_id` BIGINT COMMENT '租户ID',
    `name` VARCHAR(200) NOT NULL COMMENT '课程名称',
    `code` VARCHAR(50) COMMENT '课程编码',
    `description` TEXT COMMENT '课程描述',
    `cover_url` VARCHAR(500) COMMENT '封面URL',
    `category` VARCHAR(50) COMMENT '课程类别',
    `age_range` VARCHAR(50) COMMENT '适用年龄范围',
    `difficulty_level` VARCHAR(20) COMMENT '难度等级',
    `duration_minutes` INT COMMENT '课程时长(分钟)',
    `objectives` TEXT COMMENT '课程目标',
    `status` VARCHAR(20) DEFAULT 'DRAFT' COMMENT '状态',
    `is_system` TINYINT DEFAULT 0 COMMENT '是否系统课程',
    `core_content` TEXT COMMENT '核心内容',
    `intro_summary` TEXT COMMENT '课程介绍-概要',
    `intro_highlights` TEXT COMMENT '课程介绍-亮点',
    `intro_goals` TEXT COMMENT '课程介绍-目标',
    `intro_schedule` TEXT COMMENT '课程介绍-进度安排',
    `intro_key_points` TEXT COMMENT '课程介绍-重点',
    `intro_methods` TEXT COMMENT '课程介绍-方法',
    `intro_evaluation` TEXT COMMENT '课程介绍-评估',
    `intro_notes` TEXT COMMENT '课程介绍-注意事项',
    `schedule_ref_data` JSON COMMENT '进度计划参考数据(JSON)',
    `environment_construction` TEXT COMMENT '环境创设(步骤7)',
    `theme_id` BIGINT COMMENT '主题ID',
    `picture_book_name` VARCHAR(200) COMMENT '绘本名称',
    `cover_image_path` VARCHAR(500) COMMENT '封面图片路径',
    `ebook_paths` JSON COMMENT '电子绘本路径(JSON数组)',
    `audio_paths` JSON COMMENT '音频资源路径(JSON数组)',
    `video_paths` JSON COMMENT '视频资源路径(JSON数组)',
    `other_resources` JSON COMMENT '其他资源(JSON数组)',
    `ppt_path` VARCHAR(500) COMMENT 'PPT课件路径',
    `ppt_name` VARCHAR(200) COMMENT 'PPT课件名称',
    `poster_paths` VARCHAR(500) COMMENT '海报图片路径',
    `tools` VARCHAR(500) COMMENT '教学工具',
    `student_materials` VARCHAR(500) COMMENT '学生材料',
    `lesson_plan_data` JSON COMMENT '教案数据(JSON)',
    `activities_data` JSON COMMENT '活动数据(JSON)',
    `assessment_data` JSON COMMENT '评估数据(JSON)',
    `grade_tags` JSON COMMENT '年级标签(JSON数组)',
    `domain_tags` JSON COMMENT '领域标签(JSON数组)',
    `has_collective_lesson` TINYINT DEFAULT 0 COMMENT '是否有集体课',
    `version` VARCHAR(20) COMMENT '版本号',
    `parent_id` BIGINT COMMENT '父版本ID',
    `is_latest` TINYINT DEFAULT 1 COMMENT '是否最新版本',
    `submitted_at` DATETIME COMMENT '提交时间',
    `submitted_by` BIGINT COMMENT '提交人ID',
    `reviewed_at` DATETIME COMMENT '审核时间',
    `reviewed_by` BIGINT COMMENT '审核人ID',
    `review_comment` TEXT COMMENT '审核意见',
    `review_checklist` TEXT COMMENT '审核检查清单',
    `published_at` DATETIME COMMENT '发布时间',
    `usage_count` INT DEFAULT 0 COMMENT '使用次数',
    `teacher_count` INT DEFAULT 0 COMMENT '教师数量',
    `avg_rating` DECIMAL(3,2) COMMENT '平均评分',
    `create_by` VARCHAR(50) COMMENT '创建人',
    `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `update_by` VARCHAR(50) COMMENT '更新人',
    `updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `deleted` TINYINT DEFAULT 0 COMMENT '删除标识(0-未删除,1-已删除)',
    PRIMARY KEY (`id`),
    KEY `idx_tenant_id` (`tenant_id`),
    KEY `idx_theme_id` (`theme_id`),
    KEY `idx_status` (`status`),
    KEY `idx_category` (`category`),
    KEY `idx_is_system` (`is_system`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='课程表';

-- -----------------------------------------------------
-- 表9: 课程套餐表 (course_package)
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `course_package` (
    `id` BIGINT NOT NULL COMMENT '主键ID',
    `name` VARCHAR(200) NOT NULL COMMENT '套餐名称',
    `description` TEXT COMMENT '套餐描述',
    `price` BIGINT COMMENT '价格(分)',
    `discount_price` BIGINT COMMENT '折后价格(分)',
    `discount_type` VARCHAR(20) COMMENT '折扣类型:PERCENTAGE、FIXED',
    `grade_levels` JSON COMMENT '适用年级(JSON数组)',
    `course_count` INT DEFAULT 0 COMMENT '课程数量',
    `status` VARCHAR(30) DEFAULT 'DRAFT' COMMENT '状态',
    `submitted_at` DATETIME COMMENT '提交时间',
    `submitted_by` BIGINT COMMENT '提交人ID',
    `reviewed_at` DATETIME COMMENT '审核时间',
    `reviewed_by` BIGINT COMMENT '审核人ID',
    `review_comment` TEXT COMMENT '审核意见',
    `published_at` DATETIME COMMENT '发布时间',
    `create_by` VARCHAR(50) COMMENT '创建人',
    `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `update_by` VARCHAR(50) COMMENT '更新人',
    `updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `deleted` TINYINT DEFAULT 0 COMMENT '删除标识(0-未删除,1-已删除)',
    PRIMARY KEY (`id`),
    KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='课程套餐表';

-- -----------------------------------------------------
-- 表10: 套餐课程关联表 (course_package_course)
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `course_package_course` (
    `id` BIGINT NOT NULL COMMENT '主键ID',
    `package_id` BIGINT NOT NULL COMMENT '套餐ID',
    `course_id` BIGINT NOT NULL COMMENT '课程ID',
    `grade_level` VARCHAR(50) COMMENT '适用年级',
    `sort_order` INT DEFAULT 0 COMMENT '排序号',
    `create_by` VARCHAR(50) COMMENT '创建人',
    `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `update_by` VARCHAR(50) COMMENT '更新人',
    `updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `deleted` TINYINT DEFAULT 0 COMMENT '删除标识(0-未删除,1-已删除)',
    PRIMARY KEY (`id`),
    KEY `idx_package_id` (`package_id`),
    KEY `idx_course_id` (`course_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='套餐课程关联表';

-- 插入默认管理员账号 (密码: 123456)
INSERT INTO `admin_user` (`id`, `username`, `password`, `name`, `status`) VALUES
(1, 'admin', '$2a$10$6IxzxTnEzVj6YglSVD3tdOCxMIfM7wxJRo.SiFeA1HAYkoZXLf0FK', '系统管理员', 'ACTIVE');

-- 插入测试租户 (密码: 123456)
INSERT INTO `tenant` (`id`, `name`, `code`, `username`, `password`, `contact_name`, `contact_phone`, `status`, `max_students`, `max_teachers`) VALUES
(1, '测试幼儿园', 'school1', 'school1', '$2a$10$6IxzxTnEzVj6YglSVD3tdOCxMIfM7wxJRo.SiFeA1HAYkoZXLf0FK', '张老师', '13800138000', 'ACTIVE', 500, 50);

-- 插入测试教师 (密码: 123456)
INSERT INTO `teacher` (`id`, `tenant_id`, `username`, `password`, `name`, `phone`, `status`) VALUES
(1, 1, 'teacher1', '$2a$10$6IxzxTnEzVj6YglSVD3tdOCxMIfM7wxJRo.SiFeA1HAYkoZXLf0FK', '李老师', '13800138001', 'ACTIVE');

-- 插入测试家长 (密码: 123456)
INSERT INTO `parent` (`id`, `tenant_id`, `username`, `password`, `name`, `phone`, `status`) VALUES
(1, 1, 'parent1', '$2a$10$6IxzxTnEzVj6YglSVD3tdOCxMIfM7wxJRo.SiFeA1HAYkoZXLf0FK', '王妈妈', '13800138002', 'ACTIVE');