-- CREATE DATABASE  serve;
-- USE serve;

-- 创建 schema（如果不存在）
CREATE SCHEMA IF NOT EXISTS dev;


-- 删除序列（如果存在）
-- DROP SEQUENCE IF EXISTS dev.user_id_seq;

-- 创建新序列
-- CREATE SEQUENCE dev.user_id_seq
--     START WITH 1
--     INCREMENT BY 1
--     NO MINVALUE
--     NO MAXVALUE
--     CACHE 1;

-- 添加注释
-- COMMENT ON SEQUENCE dev.user_seq IS '用户表ID序列';

DROP TABLE IF EXISTS dev.user;
-- 在 dev schema 下创建用户表
CREATE TABLE dev.user (
                          id SERIAL PRIMARY KEY,
                          account VARCHAR(50) NOT NULL UNIQUE,
                          password VARCHAR(255) NOT NULL,
                          username VARCHAR(100) NOT NULL,
                          role VARCHAR(20) NOT NULL DEFAULT 'user' CHECK ( role IN ('user','expert','admin') ),
                          avatar TEXT,
                          phone_number char(11),
                          enable INT NOT NULL DEFAULT 1,
                          delete_flag INT NOT NULL DEFAULT 0
);

-- 添加注释
COMMENT ON TABLE dev.user IS '用户表';
COMMENT ON COLUMN dev.user.id IS '用户ID，自增主键';
COMMENT ON COLUMN dev.user.account IS '账号，唯一';
COMMENT ON COLUMN dev.user.password IS '密码';
COMMENT ON COLUMN dev.user.username IS '用户名';
COMMENT ON COLUMN dev.user.role IS '角色';
COMMENT ON COLUMN dev.user.avatar IS '头像URL';
COMMENT ON COLUMN dev.user.phone_number IS '手机号码';
COMMENT ON COLUMN dev.user.enable IS '是否启用';
COMMENT ON COLUMN dev.user.delete_flag IS '删除标记';

-- 创建索引
CREATE INDEX idx_user_account ON dev.user(account);
CREATE INDEX idx_user_role ON dev.user(role);
CREATE INDEX idx_user_enable ON dev.user(enable);
CREATE INDEX idx_user_delete_flag ON dev.user(delete_flag);

-- 元数据
CREATE TABLE dev.meta (
                      id    SERIAL PRIMARY KEY,
                      key   VARCHAR(32) NOT NULL,
                      value JSONB
);

-- 2. 添加注释
COMMENT ON TABLE dev.meta IS '元数据表，用于存储键值对形式的配置或扩展属性';
COMMENT ON COLUMN dev.meta.id IS '自增主键，唯一标识一条元数据记录';
COMMENT ON COLUMN dev.meta.key IS '元数据的键，长度不超过32个字符，不可为空';
COMMENT ON COLUMN dev.meta.value IS '元数据的值，使用 JSONB 类型存储，支持结构化数据';

-- 3. 索引建议
-- 业务上 key 通常需要唯一约束，且频繁用于等值查询
CREATE UNIQUE INDEX idx_meta_key ON dev.meta (key);

-- 若经常对 value 内部字段进行查询或过滤，可添加 GIN 索引以加速 JSONB 操作
CREATE INDEX idx_meta_value_gin ON dev.meta USING GIN (value);

INSERT INTO dev.meta(key, value) VALUES
                                     ('website_config','{
                                       "title": "示例网站",
                                       "logo": "",
                                       "announcement": "欢迎访问我们的网站！",
                                       "statement": "版权所有 © 2025 示例网站"
                                     }');