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:
@ -31,14 +31,14 @@ public class UserJournalService(
|
||||
// 校验参数
|
||||
if (input.JournalId <= 0|| input.Id <= 0)
|
||||
{
|
||||
throw new BusinessException("参数错误,未获取到期刊", 400);
|
||||
throw new BusinessException("参数错误,未获取到期刊", ResultCode.BAD_REQUEST);
|
||||
}
|
||||
// 校验用户是否存在
|
||||
var user = await usersRepository.GetByIdAsync(userId);
|
||||
if (user == null || user.IsDeleted)
|
||||
{
|
||||
logger.LogWarning("绑定期刊失败,用户不存在,UserId: {UserId}", userId);
|
||||
throw new BusinessException("用户不存在", 404);
|
||||
throw new BusinessException("用户不存在", ResultCode.NOT_FOUND);
|
||||
}
|
||||
|
||||
// 校验期刊是否存在
|
||||
@ -46,14 +46,14 @@ public class UserJournalService(
|
||||
if (journal == null || journal.IsDeleted)
|
||||
{
|
||||
logger.LogWarning("绑定期刊失败,期刊不存在,JournalId: {JournalId}", input.JournalId);
|
||||
throw new BusinessException("期刊不存在", 404);
|
||||
throw new BusinessException("期刊不存在", ResultCode.NOT_FOUND);
|
||||
}
|
||||
|
||||
// 校验期刊状态
|
||||
if (journal.Status != (int)JournalStatusEnum.Published)
|
||||
{
|
||||
logger.LogWarning("绑定期刊失败,期刊未发布,JournalId: {JournalId}, Status: {Status}", input.JournalId, journal.Status);
|
||||
throw new BusinessException("该期刊暂未发布,无法绑定", 400);
|
||||
throw new BusinessException("该期刊暂未发布,无法绑定", ResultCode.UNPROCESSABLE_ENTITY);
|
||||
}
|
||||
|
||||
// 防重复绑定:同一用户 + 期刊 + 实例 + 类型
|
||||
@ -63,7 +63,7 @@ public class UserJournalService(
|
||||
if (isExist)
|
||||
{
|
||||
logger.LogWarning("重复绑定期刊,UserId: {UserId}, JournalId: {JournalId}, Type: {Type}", userId, input.JournalId, input.Type);
|
||||
throw new BusinessException("该期刊已被绑定", 400);
|
||||
throw new BusinessException("该期刊已被绑定", ResultCode.BAD_REQUEST);
|
||||
}
|
||||
|
||||
// 检查是否为首次绑定期刊(用于激活宠物)
|
||||
@ -89,7 +89,7 @@ public class UserJournalService(
|
||||
if (!result)
|
||||
{
|
||||
logger.LogError("绑定期刊失败,写入数据库失败,UserId: {UserId}, JournalId: {JournalId}", userId, input.JournalId);
|
||||
throw new BusinessException("绑定期刊失败,请稍后重试", 500);
|
||||
throw new BusinessException("绑定期刊失败,请稍后重试", ResultCode.GLOBAL_ERROR);
|
||||
}
|
||||
|
||||
logger.LogInformation("用户绑定期刊成功,UserId: {UserId}, JournalId: {JournalId}, Id: {Id}", userId, input.JournalId, userJournal.Id);
|
||||
@ -129,12 +129,12 @@ public class UserJournalService(
|
||||
|
||||
if (input.PageIndex <= 0)
|
||||
{
|
||||
throw new BusinessException("页码必须大于0", 400);
|
||||
throw new BusinessException("页码必须大于0", ResultCode.BAD_REQUEST);
|
||||
}
|
||||
|
||||
if (input.PageSize <= 0 || input.PageSize > 100)
|
||||
{
|
||||
throw new BusinessException("每页条数必须在1-100之间", 400);
|
||||
throw new BusinessException("每页条数必须在1-100之间", ResultCode.BAD_REQUEST);
|
||||
}
|
||||
|
||||
RefAsync<int> totalNumber = 0;
|
||||
@ -167,21 +167,21 @@ public class UserJournalService(
|
||||
if (userJournal == null || userJournal.IsDeleted)
|
||||
{
|
||||
logger.LogWarning("取消绑定失败,记录不存在,Id: {Id}", id);
|
||||
throw new BusinessException("绑定记录不存在", 404);
|
||||
throw new BusinessException("绑定记录不存在", ResultCode.NOT_FOUND);
|
||||
}
|
||||
|
||||
// 校验归属权:只能取消自己的绑定
|
||||
if (userJournal.UserId != userId)
|
||||
{
|
||||
logger.LogWarning("取消绑定失败,无权操作,UserId: {UserId}, RecordUserId: {RecordUserId}", userId, userJournal.UserId);
|
||||
throw new BusinessException("无权取消该绑定", 403);
|
||||
throw new BusinessException("无权取消该绑定", ResultCode.FORBIDDEN);
|
||||
}
|
||||
|
||||
var result = await userJournalRepository.DeleteByIdAsync(id);
|
||||
if (!result)
|
||||
{
|
||||
logger.LogError("取消绑定失败,Id: {Id}", id);
|
||||
throw new BusinessException("取消绑定失败,请稍后重试", 500);
|
||||
throw new BusinessException("取消绑定失败,请稍后重试", ResultCode.GLOBAL_ERROR);
|
||||
}
|
||||
|
||||
logger.LogInformation("取消期刊绑定成功,UserId: {UserId}, Id: {Id}", userId, id);
|
||||
|
||||
Reference in New Issue
Block a user