-- =============================================
-- Week 5：学生管理系统 v2 数据库初始化
-- 新增：users 表（认证）+ 逻辑删除 + RBAC
-- =============================================

CREATE DATABASE IF NOT EXISTS week5_student
    DEFAULT CHARACTER SET utf8mb4
    DEFAULT COLLATE utf8mb4_unicode_ci;

USE week5_student;

-- 学生表（增加 deleted 字段用于逻辑删除，第 7 天）
DROP TABLE IF EXISTS student;
CREATE TABLE student (
    id          BIGINT       NOT NULL AUTO_INCREMENT  COMMENT '主键ID',
    name        VARCHAR(20)  NOT NULL                 COMMENT '姓名',
    age         INT          NOT NULL                 COMMENT '年龄',
    email       VARCHAR(50)  NOT NULL                 COMMENT '邮箱',
    score       INT          NOT NULL DEFAULT 0       COMMENT '成绩 0-100',
    deleted     TINYINT      NOT NULL DEFAULT 0       COMMENT '逻辑删除 0-未删 1-已删',
    create_time DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP,
    update_time DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (id),
    INDEX idx_name (name),
    INDEX idx_score (score)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='学生表';

-- 用户表（Spring Security 认证用，第 2-3 天）
DROP TABLE IF EXISTS users;
CREATE TABLE users (
    id          BIGINT       NOT NULL AUTO_INCREMENT,
    username    VARCHAR(50)  NOT NULL UNIQUE           COMMENT '用户名',
    password    VARCHAR(200) NOT NULL                  COMMENT 'BCrypt 加密后的密码',
    role        VARCHAR(20)  NOT NULL DEFAULT 'USER'   COMMENT '角色：ADMIN / USER',
    enabled     TINYINT      NOT NULL DEFAULT 1        COMMENT '是否启用',
    create_time DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表';

-- 预置学生数据
INSERT INTO student (name, age, email, score) VALUES
('张三', 20, 'zhangsan@mail.com', 85),
('李四', 22, 'lisi@mail.com',    92),
('王五', 19, 'wangwu@mail.com',  78),
('赵六', 21, 'zhaoliu@mail.com', 88),
('孙七', 23, 'sunqi@mail.com',   95),
('周八', 20, 'zhouba@mail.com',  73),
('吴九', 22, 'wujiu@mail.com',   81),
('郑十', 21, 'zhengshi@mail.com',90);

-- 用户数据由应用启动时通过 Java 代码自动初始化（保证 BCrypt 哈希正确）
-- 默认账号：admin / 123456（ADMIN）、user / 123456（USER）

SELECT 'student' AS tbl, COUNT(*) AS cnt FROM student
UNION ALL
SELECT 'users', COUNT(*) FROM users;
