-- ============================================================
-- nl-pms-api 初始化脚本（MySQL 5.7+ / 8.x）
-- 用法：mysql -u root -p < init.sql
-- 生产环境服务启动不执行任何建表/迁移（DDL），部署前必须先执行本脚本；
-- 仅 dev 环境（config.yaml 里 env: dev）启动时才 AutoMigrate。
-- 与 view 同步服务共用 code_count 库（该库由 view/init.sql 创建，这里兜底建库）。
-- ============================================================

CREATE DATABASE IF NOT EXISTS code_count DEFAULT CHARSET utf8mb4;
USE code_count;

-- 已上传文件元数据（文件内容落盘在 storage_dir，本表只存相对路径与摘要）
-- 归属按 (user_id, team_id) 记录：素材库据此划定"本人 / 团队管理员 / 超管 id=1"的管理范围。
-- 索引名与 gorm AutoMigrate 的默认命名保持一致，避免 dev/prod 两套 schema 漂移。
CREATE TABLE IF NOT EXISTS pms_files(
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(191) NOT NULL,                -- 存储相对路径，如 2026/08/13/<随机hex>.jpg
    original VARCHAR(255) NOT NULL DEFAULT '', -- 原始文件名（仅备查）
    mime VARCHAR(64) NOT NULL DEFAULT '',
    size BIGINT NOT NULL DEFAULT 0,
    sha256 CHAR(64) NOT NULL DEFAULT '',       -- 内容摘要，同归属秒传去重
    user_id BIGINT NOT NULL DEFAULT 0,         -- 上传者（code_count 库 users 表 id，0 为未知）
    team_id BIGINT NOT NULL DEFAULT 0,         -- 上传时所在团队（teams 表 id，0 为个人）
    kind VARCHAR(16) NOT NULL DEFAULT '',      -- avatar | content
    created_at VARCHAR(32) NOT NULL DEFAULT '',
    UNIQUE KEY idx_pms_files_name(name),
    KEY idx_pms_files_sha256(sha256),
    KEY idx_pms_files_user_id(user_id),
    KEY idx_pms_files_team_id(team_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 旧版本升级：补 team_id 归属列与 user_id/team_id 索引（不存在才添加，重复执行无副作用）。
SET @sql = IF((SELECT COUNT(*) FROM information_schema.COLUMNS
    WHERE TABLE_SCHEMA='code_count' AND TABLE_NAME='pms_files' AND COLUMN_NAME='team_id')=0,
    'ALTER TABLE pms_files ADD COLUMN team_id BIGINT NOT NULL DEFAULT 0 AFTER user_id', 'SELECT 1');
PREPARE st FROM @sql; EXECUTE st; DEALLOCATE PREPARE st;
SET @sql = IF((SELECT COUNT(*) FROM information_schema.STATISTICS
    WHERE TABLE_SCHEMA='code_count' AND TABLE_NAME='pms_files' AND INDEX_NAME='idx_pms_files_user_id')=0,
    'ALTER TABLE pms_files ADD KEY idx_pms_files_user_id(user_id)', 'SELECT 1');
PREPARE st FROM @sql; EXECUTE st; DEALLOCATE PREPARE st;
SET @sql = IF((SELECT COUNT(*) FROM information_schema.STATISTICS
    WHERE TABLE_SCHEMA='code_count' AND TABLE_NAME='pms_files' AND INDEX_NAME='idx_pms_files_team_id')=0,
    'ALTER TABLE pms_files ADD KEY idx_pms_files_team_id(team_id)', 'SELECT 1');
PREPARE st FROM @sql; EXECUTE st; DEALLOCATE PREPARE st;
