-- ============================================
-- 用户实名认证功能 - 数据库迁移脚本
-- 迁移文件: 051_add_user_verification_fields.sql
-- 描述: 为用户表添加实名认证相关字段
-- 数据库: PostgreSQL
-- Schema: aigcspace
-- ============================================

-- 设置 schema
SET search_path TO aigcspace;

-- ============================================
-- 正向迁移: 添加实名认证字段
-- ============================================

-- 1. 添加真实姓名字段
ALTER TABLE aigcspace.users 
ADD COLUMN IF NOT EXISTS real_name VARCHAR(100);

-- 2. 添加身份证号字段
ALTER TABLE aigcspace.users 
ADD COLUMN IF NOT EXISTS id_card VARCHAR(18);

-- 3. 添加认证状态字段
ALTER TABLE aigcspace.users 
ADD COLUMN IF NOT EXISTS is_verified VARCHAR(20) NOT NULL DEFAULT 'unverified';

-- 4. 添加认证通过时间字段
ALTER TABLE aigcspace.users 
ADD COLUMN IF NOT EXISTS verified_at TIMESTAMP;

-- ============================================
-- 添加字段注释
-- ============================================

COMMENT ON COLUMN aigcspace.users.real_name IS '真实姓名';
COMMENT ON COLUMN aigcspace.users.id_card IS '身份证号';
COMMENT ON COLUMN aigcspace.users.is_verified IS '实名认证状态：unverified-未认证, pending-待审核, verified-已认证, rejected-已拒绝';
COMMENT ON COLUMN aigcspace.users.verified_at IS '认证通过时间';

-- ============================================
-- 创建索引
-- ============================================

-- 为认证状态创建索引（用于筛选已认证/未认证用户）
CREATE INDEX IF NOT EXISTS idx_users_is_verified ON aigcspace.users(is_verified);

-- 为身份证号创建索引（用于查重和查询）
CREATE INDEX IF NOT EXISTS idx_users_id_card ON aigcspace.users(id_card);

-- ============================================
-- 添加约束（可选）
-- ============================================

-- 为已认证用户的身份证号添加唯一约束（防止一个身份证号被多个用户使用）
-- 注意：只对已认证的用户生效
CREATE UNIQUE INDEX IF NOT EXISTS idx_users_id_card_verified_unique 
    ON aigcspace.users(id_card) 
    WHERE is_verified = 'verified' AND id_card IS NOT NULL;

-- ============================================
-- 数据迁移（可选）
-- ============================================

-- 将现有用户的认证状态设置为未认证
UPDATE aigcspace.users 
SET is_verified = 'unverified' 
WHERE is_verified IS NULL;

-- ============================================
-- 回滚迁移（注释掉，需要时取消注释）
-- ============================================

-- 删除索引
-- DROP INDEX IF EXISTS aigcspace.idx_users_id_card_verified_unique;
-- DROP INDEX IF EXISTS aigcspace.idx_users_id_card;
-- DROP INDEX IF EXISTS aigcspace.idx_users_is_verified;

-- 删除字段
-- ALTER TABLE aigcspace.users DROP COLUMN IF EXISTS verified_at;
-- ALTER TABLE aigcspace.users DROP COLUMN IF EXISTS is_verified;
-- ALTER TABLE aigcspace.users DROP COLUMN IF EXISTS id_card;
-- ALTER TABLE aigcspace.users DROP COLUMN IF EXISTS real_name;

-- ============================================
-- 验证脚本
-- ============================================

-- 查看表结构
-- \d aigcspace.users

-- 查看新增字段
-- SELECT column_name, data_type, is_nullable, column_default 
-- FROM information_schema.columns 
-- WHERE table_schema = 'aigcspace' 
--   AND table_name = 'users' 
--   AND column_name IN ('real_name', 'id_card', 'is_verified', 'verified_at');

-- 查看索引
-- SELECT indexname, indexdef 
-- FROM pg_indexes 
-- WHERE schemaname = 'aigcspace' 
--   AND tablename = 'users' 
--   AND indexname LIKE '%verified%';

-- 统计认证状态分布
-- SELECT is_verified, COUNT(*) as count 
-- FROM aigcspace.users 
-- GROUP BY is_verified;

-- ============================================
-- 完成
-- ============================================
