gongxiangp2/docs/shadow-db-fix-report.md
chenpei ea9076df45 feat: 实现统一的下载错误处理系统并修复产品全案数据库Schema
- 创建统一的下载错误处理模块 (lib/download-errors.ts)
- 实现13种错误类型分类和中文错误消息
- 后端统一使用 createDownloadError 创建标准化错误响应
- 前端统一使用 parseDownloadError 解析错误并显示
- 修复正式系统数据库Schema,添加产品全案相关字段和表
- 执行数据库迁移:添加 task_no, task_status, task_fetched_at 字段
- 创建 material_assets, api_keys, api_call_logs 表
2026-01-05 17:52:42 +08:00

2.7 KiB
Raw Blame History

Shadow 数据库修复报告

📋 修复日期

2025-01-24

🔍 问题描述

错误信息:

Invalid `prisma.user.findUnique()` invocation: The column `users.employmentStatus` does not exist in the current database.

相关错误:

  • /api/system-settings 返回 500 错误
  • /api/auth/callback/credentials 返回 401 错误

✅ 修复内容

已添加的字段

在 lobechat_stage 数据库的 users 表中添加了以下字段:

  1. employmentStatus (TEXT)

    • 用途:人员状态(在职/请假/离职/转岗)
    • 默认值:'active'
    • 索引:已创建
  2. resignationDate (TIMESTAMP)

    • 用途:离职日期
  3. transferDate (TIMESTAMP)

    • 用途:转岗日期
  4. transferToDeptId (TEXT)

    • 用途:转岗目标部门ID
    • 索引:已创建
  5. employmentNote (TEXT)

    • 用途:人员状态备注
  6. statusChangedBy (TEXT)

    • 用途:状态变更操作人ID
  7. statusChangedAt (TIMESTAMP)

    • 用途:状态变更时间

📝 修复脚本

使用的修复脚本:

  • scripts/fix-shadow-db-users-fields.ps1

✅ 验证结果

字段验证查询结果:

   column_name    |          data_type          
------------------+-----------------------------
 employmentNote   | text
 employmentStatus | text
 resignationDate  | timestamp without time zone
 statusChangedAt  | timestamp without time zone
 statusChangedBy  | text
 transferDate     | timestamp without time zone
 transferToDeptId | text
(7 rows)

所有字段已成功添加

🔄 容器状态

  • ✅ 容器已重启:youyidian-3d-shadow
  • ✅ 容器运行正常

📝 后续步骤

  1. 测试登录功能

  2. 检查 API 状态

    • 验证 /api/system-settings 是否正常
    • 验证 /api/auth/callback/credentials 是否正常
  3. 可选优化

    • 如果需要,可以手动设置现有用户的 employmentStatus 默认值
    • 可以使用 Prisma Studio 验证数据

⚠️ 注意事项

  1. 默认值设置

    • employmentStatus 字段的默认值设置失败(PostgreSQL 限制)
    • 字段已存在,不影响使用
    • 新用户插入时会使用 Prisma schema 中定义的默认值
  2. 现有数据

    • 现有用户的 employmentStatus 字段为 NULL
    • 如果需要,可以手动更新:
      UPDATE users SET "employmentStatus" = 'active' WHERE "employmentStatus" IS NULL;
      

🔗 相关文档

  • prisma/schema.prisma - Prisma schema 定义
  • scripts/fix-shadow-db-users-fields.ps1 - 修复脚本
  • scripts/fix-shadow-db-users-fields.sql - SQL 脚本(参考)