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:
@ -68,7 +68,7 @@ public class JournalService(BaseRepository<JournalPage> JournalPageRepository,
|
||||
/// <returns>新杂志ID</returns>
|
||||
public async Task<BaseResponse<long>> AddAsync(JournalAddDto input)
|
||||
{
|
||||
BusinessException.ThrowIf(string.IsNullOrWhiteSpace(input.Name), "书籍名称不能为空");
|
||||
BusinessException.ThrowIf(string.IsNullOrWhiteSpace(input.Name), "书籍名称不能为空", ResultCode.BAD_REQUEST);
|
||||
|
||||
var journal = new Journal
|
||||
{
|
||||
@ -114,7 +114,7 @@ public class JournalService(BaseRepository<JournalPage> JournalPageRepository,
|
||||
var res = await base.InsertAsync(journal);
|
||||
if (!res)
|
||||
{
|
||||
new BusinessException("创建失败");
|
||||
new BusinessException("创建失败", ResultCode.GLOBAL_ERROR);
|
||||
}
|
||||
logger.LogInformation("杂志创建成功,ID: {Id}, 名称: {Name}", journal.Id, input.Name);
|
||||
return BaseResponse<long>.Success(journal.Id);
|
||||
@ -129,8 +129,8 @@ public class JournalService(BaseRepository<JournalPage> JournalPageRepository,
|
||||
{
|
||||
|
||||
var Journal = await base.GetByIdAsync(input.Id);
|
||||
BusinessException.ThrowIf(Journal.IsNull(), "不存在的Id");
|
||||
BusinessException.ThrowIf(Journal.Status == (int)JournalStatusEnum.Archive, "已归档不可编辑");
|
||||
BusinessException.ThrowIf(Journal.IsNull(), "不存在的Id", ResultCode.NOT_FOUND);
|
||||
BusinessException.ThrowIf(Journal.Status == (int)JournalStatusEnum.Archive, "已归档不可编辑", ResultCode.CONFLICT);
|
||||
if (string.IsNullOrWhiteSpace(input.Cover))
|
||||
{
|
||||
Journal.Cover = null;
|
||||
@ -204,8 +204,8 @@ public class JournalService(BaseRepository<JournalPage> JournalPageRepository,
|
||||
|
||||
public async Task<bool> DeleteAsync(List<long> ids)
|
||||
{
|
||||
BusinessException.ThrowIf(!base.Queryable().Any(w => ids.Contains(w.Id)), "ID不存在");
|
||||
BusinessException.ThrowIf(base.Queryable().Any(w => ids.Contains(w.Id) && w.Status == (int)JournalStatusEnum.Archive), "已归档不可删除");
|
||||
BusinessException.ThrowIf(!base.Queryable().Any(w => ids.Contains(w.Id)), "ID不存在", ResultCode.NOT_FOUND);
|
||||
BusinessException.ThrowIf(base.Queryable().Any(w => ids.Contains(w.Id) && w.Status == (int)JournalStatusEnum.Archive), "已归档不可删除", ResultCode.CONFLICT);
|
||||
var result = await UseTranAsync(async () =>
|
||||
{
|
||||
await base.DeleteAsync(d => ids.Contains(d.Id));
|
||||
@ -282,11 +282,11 @@ public class JournalService(BaseRepository<JournalPage> JournalPageRepository,
|
||||
public async Task<DotMatrixOutput> PrintCodeAsync(long id)
|
||||
{
|
||||
var Journal = await base.Queryable().Where(w => w.Id == id).FirstAsync();
|
||||
BusinessException.ThrowIf(Journal.IsNull(), "不存在书");
|
||||
BusinessException.ThrowIf(Journal.Status == (int)JournalStatusEnum.Codeing, "正在生成中...");
|
||||
BusinessException.ThrowIf(Journal.IsNull(), "不存在书", ResultCode.NOT_FOUND);
|
||||
BusinessException.ThrowIf(Journal.Status == (int)JournalStatusEnum.Codeing, "正在生成中...", ResultCode.CONFLICT);
|
||||
|
||||
var pages = await JournalPageRepository.Queryable().Where(w => w.JournalId == id).ToListAsync();
|
||||
BusinessException.ThrowIf(pages.IsNull(), "不存在页");
|
||||
BusinessException.ThrowIf(pages.IsNull(), "不存在页", ResultCode.NOT_FOUND);
|
||||
|
||||
var output = new DotMatrixOutput()
|
||||
{
|
||||
@ -315,8 +315,8 @@ public class JournalService(BaseRepository<JournalPage> JournalPageRepository,
|
||||
{
|
||||
var book = await base.GetByIdAsync(id);
|
||||
var tasks = await Context.Queryable<JournalPageTask>().Where(w => w.JournalId == id).ToListAsync();
|
||||
BusinessException.ThrowIf(tasks.Count == 0 && status == JournalStatusEnum.Archive, "未添加任何题目,无法归档");
|
||||
BusinessException.ThrowIf(tasks.Any(a => string.IsNullOrWhiteSpace(a.TaskUrl)) && status == JournalStatusEnum.Archive, $"{string.Join(',', tasks.Where(a => string.IsNullOrWhiteSpace(a.TaskUrl)).Select(a => a.No).ToList())}未保存,无法归档");
|
||||
BusinessException.ThrowIf(tasks.Count == 0 && status == JournalStatusEnum.Archive, "未添加任何题目,无法归档", ResultCode.UNPROCESSABLE_ENTITY);
|
||||
BusinessException.ThrowIf(tasks.Any(a => string.IsNullOrWhiteSpace(a.TaskUrl)) && status == JournalStatusEnum.Archive, $"{string.Join(',', tasks.Where(a => string.IsNullOrWhiteSpace(a.TaskUrl)).Select(a => a.No).ToList())}未保存,无法归档", ResultCode.UNPROCESSABLE_ENTITY);
|
||||
var res = await base.Updateable().SetColumns(s => s.Status, status).Where(w => w.Id == id).ExecuteCommandAsync() > 0;
|
||||
return res;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user