-- ====================================================
-- 工作日志服务平台 - 数据库初始化脚本
-- ====================================================
-- 版本：V1.0
-- 创建日期：2026-02-24
-- 说明：本脚本用于创建工作日志平台所需的数据库表结构
-- ====================================================

-- 设置字符集
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ====================================================
-- 1. 创建数据库（如果不存在）
-- ====================================================
CREATE DATABASE IF NOT EXISTS `worklog` 
    DEFAULT CHARACTER SET utf8mb4 
    DEFAULT COLLATE utf8mb4_general_ci;

USE `worklog`;

-- ====================================================
-- 2. 创建数据库用户（如果需要）
-- ====================================================
-- 注意：需要以 root 用户或具有用户管理权限的用户执行以下语句

-- 创建数据库用户
-- CREATE USER IF NOT EXISTS 'worklog'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'Wlog@123';
-- CREATE USER IF NOT EXISTS 'worklog'@'%' IDENTIFIED WITH caching_sha2_password BY 'Wlog@123';

-- 授予权限
-- GRANT ALL PRIVILEGES ON worklog.* TO 'worklog'@'localhost';
-- GRANT ALL PRIVILEGES ON worklog.* TO 'worklog'@'%';

-- 刷新权限
-- FLUSH PRIVILEGES;

-- ====================================================
-- 3. 系统用户表 (sys_user)
-- ====================================================
-- 功能：存储系统用户基础信息，包括登录凭证、个人信息、角色权限等
-- 主键策略：VARCHAR(20) 存储雪花算法生成的19位数字ID
DROP TABLE IF EXISTS `sys_user`;
CREATE TABLE `sys_user` (
    `id`              VARCHAR(20)     NOT NULL COMMENT '用户ID（雪花算法生成）',
    `username`        VARCHAR(50)     NOT NULL COMMENT '登录账号',
    `password`        VARCHAR(100)    NOT NULL COMMENT '登录密码（BCrypt加密）',
    `name`            VARCHAR(50)     NOT NULL COMMENT '姓名',
    `phone`           VARCHAR(20)     DEFAULT NULL COMMENT '联系方式',
    `email`           VARCHAR(100)    DEFAULT NULL COMMENT '电子邮箱',
    `position`        VARCHAR(50)     DEFAULT NULL COMMENT '职位',
    `description`     VARCHAR(500)    DEFAULT NULL COMMENT '描述',
    `status`          TINYINT(1)      NOT NULL DEFAULT 1 COMMENT '状态（0-禁用，1-启用）',
    `role`            VARCHAR(20)     NOT NULL DEFAULT 'USER' COMMENT '角色（USER-普通用户，ADMIN-管理员）',
    `created_by`      VARCHAR(20)     NOT NULL COMMENT '创建人ID',
    `created_time`    DATETIME        NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `updated_by`      VARCHAR(20)     NOT NULL COMMENT '更新人ID',
    `updated_time`    DATETIME        NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `deleted`         TINYINT(1)      NOT NULL DEFAULT 0 COMMENT '逻辑删除（0-未删除，1-已删除）',
    PRIMARY KEY (`id`),
    UNIQUE KEY `uk_username` (`username`),
    KEY `idx_status` (`status`),
    KEY `idx_deleted` (`deleted`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='系统用户表';

-- ====================================================
-- 4. 日志模板表 (log_template)
-- ====================================================
-- 功能：存储工作日志模板，提供标准化的日志格式
DROP TABLE IF EXISTS `log_template`;
CREATE TABLE `log_template` (
    `id`                VARCHAR(20)     NOT NULL COMMENT '模板ID（雪花算法生成）',
    `template_name`     VARCHAR(100)    NOT NULL COMMENT '模板名称',
    `template_content`  TEXT            NOT NULL COMMENT '模板内容（Markdown格式）',
    `instruction`       VARCHAR(500)    DEFAULT NULL COMMENT '使用说明',
    `status`            TINYINT(1)      NOT NULL DEFAULT 1 COMMENT '状态（0-禁用，1-启用）',
    `created_by`        VARCHAR(20)     NOT NULL COMMENT '创建人ID',
    `created_time`      DATETIME        NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `updated_by`        VARCHAR(20)     NOT NULL COMMENT '更新人ID',
    `updated_time`      DATETIME        NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `deleted`           TINYINT(1)      NOT NULL DEFAULT 0 COMMENT '逻辑删除（0-未删除，1-已删除）',
    PRIMARY KEY (`id`),
    UNIQUE KEY `uk_template_name` (`template_name`),
    KEY `idx_status` (`status`),
    KEY `idx_deleted` (`deleted`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='日志模板表';

-- ====================================================
-- 5. 工作日志表 (work_log)
-- ====================================================
-- 功能：存储员工每日工作日志记录
DROP TABLE IF EXISTS `work_log`;
CREATE TABLE `work_log` (
    `id`            VARCHAR(20)     NOT NULL COMMENT '日志ID（雪花算法生成）',
    `user_id`       VARCHAR(20)     NOT NULL COMMENT '记录人ID',
    `log_date`      DATE            NOT NULL COMMENT '日志日期',
    `title`         VARCHAR(200)    DEFAULT NULL COMMENT '日志标题',
    `record_time`   DATETIME        NOT NULL COMMENT '记录时间',
    `content`       TEXT            NOT NULL COMMENT '日志内容（Markdown格式，最大2000汉字）',
    `template_id`   VARCHAR(20)     DEFAULT NULL COMMENT '使用模板ID',
    `created_by`    VARCHAR(20)     NOT NULL COMMENT '创建人ID',
    `created_time`  DATETIME        NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `updated_by`    VARCHAR(20)     NOT NULL COMMENT '更新人ID',
    `updated_time`  DATETIME        NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `deleted`       TINYINT(1)      NOT NULL DEFAULT 0 COMMENT '逻辑删除（0-未删除，1-已删除）',
    PRIMARY KEY (`id`),
    KEY `idx_user_id` (`user_id`),
    KEY `idx_log_date` (`log_date`),
    KEY `idx_deleted` (`deleted`),
    KEY `idx_user_date` (`user_id`, `log_date`),
    CONSTRAINT `fk_work_log_user` FOREIGN KEY (`user_id`) REFERENCES `sys_user` (`id`),
    CONSTRAINT `fk_work_log_template` FOREIGN KEY (`template_id`) REFERENCES `log_template` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='工作日志表';

-- ====================================================
-- 6. 初始化数据
-- ====================================================

-- 6.1 创建默认管理员账号
-- 密码：admin123（BCrypt加密后的值，实际使用时需要通过程序生成）
-- 注意：以下密码哈希值仅为示例，实际部署时应通过程序生成
INSERT INTO `sys_user` (
    `id`, `username`, `password`, `name`, `phone`, `email`, 
    `position`, `description`, `status`, `role`, 
    `created_by`, `updated_by`
) VALUES (
    '1000000000000000001', 
    'admin', 
    '$2a$10$N.zmdr9k7uOCQb376NoUnuTJ8iAt6Z5EHsM8lE9lBOsl7iAt6Z5EH', 
    '系统管理员', 
    NULL, 
    'admin@example.com',
    '系统管理员', 
    '系统默认管理员账号', 
    1, 
    'ADMIN',
    '1000000000000000001', 
    '1000000000000000001'
);

-- 6.2 创建默认日志模板
INSERT INTO `log_template` (
    `id`, `template_name`, `template_content`, `instruction`, 
    `status`, `created_by`, `updated_by`
) VALUES 
(
    '2000000000000000001',
    '每日工作日志',
    '## 今日工作内容\n\n### 1. 已完成工作\n- \n\n### 2. 进行中工作\n- \n\n### 3. 遇到的问题\n- \n\n### 4. 明日计划\n- ',
    '适用于记录每日工作内容、进度和计划',
    1,
    '1000000000000000001',
    '1000000000000000001'
),
(
    '2000000000000000002',
    '研发日报',
    '## 研发日报\n\n### 开发任务\n- **任务名称**：\n- **完成进度**：\n- **技术方案**：\n\n### 代码提交\n- **提交次数**：\n- **主要功能**：\n\n### Bug修复\n- **问题描述**：\n- **解决方案**：\n\n### 技术难点\n- \n\n### 明日计划\n- ',
    '适用于研发人员记录每日开发工作',
    1,
    '1000000000000000001',
    '1000000000000000001'
),
(
    '2000000000000000003',
    '周报模板',
    '## 本周工作总结\n\n### 本周完成工作\n1. \n\n### 工作亮点\n- \n\n### 存在问题\n- \n\n### 下周工作计划\n1. \n\n### 需要协调的资源\n- ',
    '适用于周度工作总结和计划',
    1,
    '1000000000000000001',
    '1000000000000000001'
);

-- ====================================================
-- 7. 数据库说明
-- ====================================================
-- 
-- 数据库配置：
-- - 数据库名：worklog
-- - 数据库用户：worklog
-- - 数据库密码：Wlog@123
-- - 字符集：utf8mb4
-- - 排序规则：utf8mb4_general_ci
--
-- 设计原则：
-- 1. 主键策略：所有表主键使用 VARCHAR(20) 存储雪花算法生成的19位数字ID
-- 2. 审计字段：统一包含 created_by、created_time、updated_by、updated_time、deleted
-- 3. 逻辑删除：使用 deleted 字段实现软删除，保留历史数据
-- 4. 索引设计：为常用查询字段建立索引，提升查询性能
-- 5. 字符集：统一使用 utf8mb4，支持 emoji 等特殊字符
-- 6. 唯一性约束：username 和 template_name 建立唯一索引
--
-- 外键关系：
-- - work_log.user_id -> sys_user.id
-- - work_log.template_id -> log_template.id
--
-- 注意事项：
-- 1. 默认管理员密码需要在实际部署时通过程序使用 BCrypt 算法重新生成
-- 2. 雪花算法ID需要在应用层实现，数据库仅存储
-- 3. 日志内容限制为2000汉字，需在应用层进行校验
--

SET FOREIGN_KEY_CHECKS = 1;

-- ====================================================
-- 脚本执行完成
-- ====================================================
