refactor: 统一业务异常处理,标准化结果码和错误响应

1.  新增并完善ResultCode枚举,补充标准HTTP状态码对应的业务状态码
2.  重构BusinessException,新增基于ResultCode的构造函数和ThrowIf扩展方法
3.  替换所有硬编码的HTTP状态码为统一的ResultCode枚举
4.  优化全局异常中间件,根据业务状态码映射对应HTTP状态码并规范化JSON响应
5.  修复OssImageHelper和AutoDotCodeConsumer中的OSS文件处理逻辑
6.  新增用户答题快照实体类
7.  清理废弃的宠物模块迁移脚本
This commit is contained in:
glz
2026-06-29 16:34:26 +08:00
parent 4579fefef9
commit bdaa6a0dc8
35 changed files with 693 additions and 364 deletions

View File

@ -0,0 +1,161 @@
using SqlSugar;
namespace QYZH.InteractiveMagazine.Models.Entity
{
/// <summary>
/// Snapshot record for a user answer.
/// </summary>
[SugarTable("JournalPageTaskUserAnswerSnapshot")]
public class JournalPageTaskUserAnswerSnapshot : SqlSugarBaseEntity
{
/// <summary>
/// Source JournalPageTaskUserAnswer record Id.
/// </summary>
public long JournalPageTaskUserAnswerId { get; set; }
/// <summary>
/// Journal Id.
/// </summary>
public long JournalId { get; set; }
/// <summary>
/// Journal page Id.
/// </summary>
public long JournalPageId { get; set; }
/// <summary>
/// Journal page task Id.
/// </summary>
public long JournalPageTaskId { get; set; }
/// <summary>
/// Journal page task group Id.
/// </summary>
public long JournalPageTaskGroupId { get; set; }
/// <summary>
/// User Id.
/// </summary>
public long UserId { get; set; }
/// <summary>
/// Answer result.
/// </summary>
public string? Result { get; set; }
/// <summary>
/// Points awarded.
/// </summary>
public float Points { get; set; }
/// <summary>
/// Growth points awarded.
/// </summary>
public float GrowthPoints { get; set; }
/// <summary>
/// Task score.
/// </summary>
public float Score { get; set; }
/// <summary>
/// Question answer image URL.
/// </summary>
public string? QuestionAnswerUrl { get; set; }
/// <summary>
/// Answer image URL.
/// </summary>
public string? AnswerUrl { get; set; }
/// <summary>
/// Page answer image URL.
/// </summary>
public string? PageAnswerUrl { get; set; }
/// <summary>
/// Optimistic concurrency revision.
/// </summary>
public int Revision { get; set; }
/// <summary>
/// Answer status.
/// </summary>
public int AnswerStatus { get; set; }
/// <summary>
/// Answer start time.
/// </summary>
public DateTime AnswerStartTime { get; set; }
/// <summary>
/// Answer end time.
/// </summary>
public DateTime AnswerEndTime { get; set; }
/// <summary>
/// Answer duration in seconds.
/// </summary>
public int AnswerSeconds { get; set; }
/// <summary>
/// Image recognition result.
/// </summary>
public int ImageRecognition { get; set; }
/// <summary>
/// Journal page number.
/// </summary>
public int JournalPageNum { get; set; }
/// <summary>
/// Modify count.
/// </summary>
public int Modify { get; set; }
/// <summary>
/// Last tag Id.
/// </summary>
public long LastTag { get; set; }
/// <summary>
/// Dot page number.
/// </summary>
public int DotPageNum { get; set; }
/// <summary>
/// Page result image URL.
/// </summary>
public string? PageResultUrl { get; set; }
/// <summary>
/// Question type.
/// </summary>
public string? Type { get; set; }
/// <summary>
/// Dot page number text.
/// </summary>
public string? DotPageNo { get; set; }
/// <summary>
/// Page answer dot image URL.
/// </summary>
public string? PageAnswerDotUrl { get; set; }
/// <summary>
/// Break count.
/// </summary>
public int BreakCount { get; set; }
/// <summary>
/// Break time records.
/// </summary>
public string? BreakTimes { get; set; }
/// <summary>
/// Assignment status.
/// </summary>
public string? AssignmentStatus { get; set; }
}
}