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:
@ -3,6 +3,7 @@ using QYZH.InteractiveMagazine.Common.Extensions;
|
||||
using QYZH.InteractiveMagazine.Infrastructure.OSS;
|
||||
using QYZH.InteractiveMagazine.IService;
|
||||
using QYZH.InteractiveMagazine.Models.Common;
|
||||
using QYZH.InteractiveMagazine.Models.Dto;
|
||||
using QYZH.InteractiveMagazine.Models.Dto.Journal;
|
||||
using QYZH.InteractiveMagazine.Models.Entity;
|
||||
using QYZH.InteractiveMagazine.Models.Enum;
|
||||
@ -18,7 +19,7 @@ public class JournalPageTaskService(BaseRepository<Journal> journalRepository, O
|
||||
public async Task<long?> InsertAsync(JournalPageTaskAddInput input)
|
||||
{
|
||||
var JournalStatus = await journalRepository.Queryable().Where(w => w.Id == input.JournalId).Select(s => s.Status).FirstAsync();
|
||||
BusinessException.ThrowIf(JournalStatus == (int)JournalStatusEnum.Archive, "书籍已归档不能添加题目");
|
||||
BusinessException.ThrowIf(JournalStatus == (int)JournalStatusEnum.Archive, "书籍已归档不能添加题目", ResultCode.CONFLICT);
|
||||
|
||||
var map = input.Adapt<JournalPageTask>();
|
||||
map.Id = YitIdHelper.NextId();
|
||||
@ -28,7 +29,7 @@ public class JournalPageTaskService(BaseRepository<Journal> journalRepository, O
|
||||
{
|
||||
var startNo = $"{no[0]}-{no[1]}-{no[2]}-1";
|
||||
var groupTask = await Queryable().Where(w => w.No == startNo && w.JournalId == input.JournalId).FirstAsync();
|
||||
BusinessException.ThrowIf(groupTask.IsNull(), "未找到关联跨页的第一部分");
|
||||
BusinessException.ThrowIf(groupTask.IsNull(), "未找到关联跨页的第一部分", ResultCode.NOT_FOUND);
|
||||
map.GroupId = groupTask.GroupId;
|
||||
map.Type = groupTask.Type;
|
||||
}
|
||||
@ -42,13 +43,13 @@ public class JournalPageTaskService(BaseRepository<Journal> journalRepository, O
|
||||
public async Task<bool> UpdateAsync(JournalPageTaskUpdateInput input)
|
||||
{
|
||||
var JournalStatus = await journalRepository.Queryable().Where(w => w.Id == input.JournalId).Select(s => s.Status).FirstAsync();
|
||||
BusinessException.ThrowIf(JournalStatus == (int)JournalStatusEnum.Archive, "书籍已归档不能修改题目");
|
||||
BusinessException.ThrowIf(JournalStatus == (int)JournalStatusEnum.Archive, "书籍已归档不能修改题目", ResultCode.CONFLICT);
|
||||
|
||||
var task = await base.Queryable().Where(w => w.Id == input.Id).FirstAsync();
|
||||
BusinessException.ThrowIf(task.IsNull(), "未找到关联的题号");
|
||||
BusinessException.ThrowIf(task.IsNull(), "未找到关联的题号", ResultCode.NOT_FOUND);
|
||||
|
||||
var sameTask = await base.Queryable().Where(w => w.No == input.No && w.JournalId == input.JournalId && w.Id != input.Id).FirstAsync();
|
||||
BusinessException.ThrowIf(sameTask.IsNotEmpty(), "已经存在相同题号题目");
|
||||
BusinessException.ThrowIf(sameTask.IsNotEmpty(), "已经存在相同题号题目", ResultCode.CONFLICT);
|
||||
|
||||
|
||||
var key = $"journal/{task.JournalId}/{task.JournalPageId}/{task.GroupId}";
|
||||
@ -74,7 +75,7 @@ public class JournalPageTaskService(BaseRepository<Journal> journalRepository, O
|
||||
{
|
||||
var startNo = $"{no[0]}-{no[1]}-{no[2]}-1";
|
||||
var groupTask = await Queryable().Where(w => w.No == startNo && w.JournalId == input.JournalId).FirstAsync();
|
||||
BusinessException.ThrowIf(groupTask.IsNull(), "未找到关联跨页的第一部分");
|
||||
BusinessException.ThrowIf(groupTask.IsNull(), "未找到关联跨页的第一部分", ResultCode.NOT_FOUND);
|
||||
task.GroupId = groupTask.GroupId;
|
||||
task.Type = groupTask.Type;
|
||||
}
|
||||
@ -124,7 +125,7 @@ public class JournalPageTaskService(BaseRepository<Journal> journalRepository, O
|
||||
public async Task<bool> DeleteAsync(long id)
|
||||
{
|
||||
var task = await base.Queryable().Where(w => w.Id == id).FirstAsync();
|
||||
BusinessException.ThrowIf(task.IsNull(), "问题不存在");
|
||||
BusinessException.ThrowIf(task.IsNull(), "问题不存在", ResultCode.NOT_FOUND);
|
||||
|
||||
var key = $"journal/{task.JournalId}/{task.JournalPageId}/{id}";
|
||||
|
||||
@ -139,7 +140,7 @@ public class JournalPageTaskService(BaseRepository<Journal> journalRepository, O
|
||||
public async Task<bool> ComplementAsync(JournalPageTaskComplementInput input)
|
||||
{
|
||||
var task = await base.Queryable().Where(w => w.Id == input.Id).FirstAsync();
|
||||
BusinessException.ThrowIf(task.IsNull(), "问题不存在");
|
||||
BusinessException.ThrowIf(task.IsNull(), "问题不存在", ResultCode.NOT_FOUND);
|
||||
|
||||
if (input.AudioUrl.NotNull())
|
||||
{
|
||||
@ -159,7 +160,7 @@ public class JournalPageTaskService(BaseRepository<Journal> journalRepository, O
|
||||
public async Task<long> AddAnswerAsync(JournalTaskAnswerAddInput input)
|
||||
{
|
||||
var task = await base.Queryable().Where(w => w.Id == input.JournalPageTaskId).FirstAsync();
|
||||
BusinessException.ThrowIf(task.IsNull(), "问题不存在");
|
||||
BusinessException.ThrowIf(task.IsNull(), "问题不存在", ResultCode.NOT_FOUND);
|
||||
|
||||
var key = $"journal/{task.JournalId}/{task.JournalPageId}/{task.GroupId}";
|
||||
input.Answer = Deal(null, input.Answer, key, "answer");
|
||||
@ -181,7 +182,7 @@ public class JournalPageTaskService(BaseRepository<Journal> journalRepository, O
|
||||
public async Task<bool> UpdateAnswerAsync(JournalTaskAnswerUpdateInput input)
|
||||
{
|
||||
var answer = await answerRepository.Queryable().Where(a => a.Id == input.Id).FirstAsync();
|
||||
BusinessException.ThrowIf(answer.IsNull(), "答案不存在");
|
||||
BusinessException.ThrowIf(answer.IsNull(), "答案不存在", ResultCode.NOT_FOUND);
|
||||
|
||||
var task = await base.Queryable().Where(w => w.Id == answer.JournalPageTaskId).FirstAsync();
|
||||
var key = $"journal/{task.JournalId}/{task.JournalPageId}/{task.GroupId}";
|
||||
@ -199,7 +200,7 @@ public class JournalPageTaskService(BaseRepository<Journal> journalRepository, O
|
||||
public async Task<bool> DeleteAnswerAsync(long id)
|
||||
{
|
||||
var answer = await answerRepository.Queryable().Where(a => a.Id == id).FirstAsync();
|
||||
BusinessException.ThrowIf(answer.IsNull(), "答案不存在");
|
||||
BusinessException.ThrowIf(answer.IsNull(), "答案不存在", ResultCode.NOT_FOUND);
|
||||
|
||||
var task = await base.Queryable().Where(w => w.Id == answer.JournalPageTaskId).FirstAsync();
|
||||
var key = $"journal/{task.JournalId}/{task.JournalPageId}/{task.GroupId}";
|
||||
|
||||
Reference in New Issue
Block a user