037_admin_backend_models.sql 4.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. -- 后台管理系统数据库模型扩展
  2. -- Requirements: 13.1, 13.2, 13.3, 13.4
  3. -- 1. 创建 admin_users 表(管理员用户)
  4. CREATE TABLE IF NOT EXISTS aigcspace.admin_users (
  5. id SERIAL PRIMARY KEY,
  6. username VARCHAR(50) NOT NULL UNIQUE,
  7. password_hash VARCHAR(255) NOT NULL,
  8. nickname VARCHAR(100) NOT NULL,
  9. status VARCHAR(20) NOT NULL DEFAULT 'active',
  10. created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  11. updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
  12. );
  13. CREATE INDEX IF NOT EXISTS idx_admin_users_username ON aigcspace.admin_users(username);
  14. CREATE INDEX IF NOT EXISTS idx_admin_users_status ON aigcspace.admin_users(status);
  15. COMMENT ON TABLE aigcspace.admin_users IS '管理员用户表';
  16. COMMENT ON COLUMN aigcspace.admin_users.id IS '主键ID';
  17. COMMENT ON COLUMN aigcspace.admin_users.username IS '用户名';
  18. COMMENT ON COLUMN aigcspace.admin_users.password_hash IS '密码哈希';
  19. COMMENT ON COLUMN aigcspace.admin_users.nickname IS '昵称';
  20. COMMENT ON COLUMN aigcspace.admin_users.status IS '状态:active/disabled';
  21. COMMENT ON COLUMN aigcspace.admin_users.created_at IS '创建时间';
  22. COMMENT ON COLUMN aigcspace.admin_users.updated_at IS '更新时间';
  23. -- 2. 创建 operation_log 表(操作日志)
  24. CREATE TABLE IF NOT EXISTS aigcspace.operation_log (
  25. id BIGSERIAL PRIMARY KEY,
  26. admin_id INTEGER NOT NULL REFERENCES aigcspace.admin_users(id),
  27. operation_type VARCHAR(50) NOT NULL,
  28. module VARCHAR(50) NOT NULL,
  29. target_id VARCHAR(100),
  30. detail TEXT,
  31. ip_address VARCHAR(50),
  32. created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
  33. );
  34. CREATE INDEX IF NOT EXISTS idx_operation_log_admin_id ON aigcspace.operation_log(admin_id);
  35. CREATE INDEX IF NOT EXISTS idx_operation_log_operation_type ON aigcspace.operation_log(operation_type);
  36. CREATE INDEX IF NOT EXISTS idx_operation_log_module ON aigcspace.operation_log(module);
  37. CREATE INDEX IF NOT EXISTS idx_operation_log_created_at ON aigcspace.operation_log(created_at);
  38. COMMENT ON TABLE aigcspace.operation_log IS '管理员操作日志表';
  39. COMMENT ON COLUMN aigcspace.operation_log.id IS '主键ID';
  40. COMMENT ON COLUMN aigcspace.operation_log.admin_id IS '管理员ID';
  41. COMMENT ON COLUMN aigcspace.operation_log.operation_type IS '操作类型:create/update/delete/login';
  42. COMMENT ON COLUMN aigcspace.operation_log.module IS '操作模块:user/model/config';
  43. COMMENT ON COLUMN aigcspace.operation_log.target_id IS '操作对象ID';
  44. COMMENT ON COLUMN aigcspace.operation_log.detail IS '操作详情(JSON格式)';
  45. COMMENT ON COLUMN aigcspace.operation_log.ip_address IS 'IP地址';
  46. COMMENT ON COLUMN aigcspace.operation_log.created_at IS '创建时间';
  47. -- 3. 创建 admin_login_attempt 表(登录尝试记录)
  48. CREATE TABLE IF NOT EXISTS aigcspace.admin_login_attempt (
  49. id SERIAL PRIMARY KEY,
  50. username VARCHAR(50) NOT NULL,
  51. success BOOLEAN NOT NULL,
  52. ip_address VARCHAR(50),
  53. created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
  54. );
  55. CREATE INDEX IF NOT EXISTS idx_admin_login_attempt_username ON aigcspace.admin_login_attempt(username);
  56. CREATE INDEX IF NOT EXISTS idx_admin_login_attempt_created_at ON aigcspace.admin_login_attempt(created_at);
  57. COMMENT ON TABLE aigcspace.admin_login_attempt IS '管理员登录尝试记录表';
  58. COMMENT ON COLUMN aigcspace.admin_login_attempt.id IS '主键ID';
  59. COMMENT ON COLUMN aigcspace.admin_login_attempt.username IS '用户名';
  60. COMMENT ON COLUMN aigcspace.admin_login_attempt.success IS '是否成功';
  61. COMMENT ON COLUMN aigcspace.admin_login_attempt.ip_address IS 'IP地址';
  62. COMMENT ON COLUMN aigcspace.admin_login_attempt.created_at IS '创建时间';
  63. -- 4. 在 users 表新增 status 字段
  64. ALTER TABLE aigcspace.users
  65. ADD COLUMN IF NOT EXISTS status VARCHAR(20) NOT NULL DEFAULT 'active';
  66. CREATE INDEX IF NOT EXISTS idx_users_status ON aigcspace.users(status);
  67. COMMENT ON COLUMN aigcspace.users.status IS '账户状态:active/disabled';
  68. -- 5. 在 balance_log 表新增 remark 和 admin_id 字段
  69. ALTER TABLE aigcspace.balance_log
  70. ADD COLUMN IF NOT EXISTS remark TEXT;
  71. ALTER TABLE aigcspace.balance_log
  72. ADD COLUMN IF NOT EXISTS admin_id VARCHAR(50);
  73. COMMENT ON COLUMN aigcspace.balance_log.remark IS '调整原因(admin_adjust类型使用)';
  74. COMMENT ON COLUMN aigcspace.balance_log.admin_id IS '操作管理员ID(admin_adjust类型使用)';