Просмотр исходного кода

fix: gender枚举校验+MindFortuneController空值防御
- UserService.updateUserInfo: gender 仅接受 male/female,修复 Data truncated 错误
- FortuneServiceImpl: generatePlaceholderFortune/getFamilyFortune 添加 familyId 空值校验
- MindFortuneController: 三个端点添加 familyId 空值检查,返回友好提示

Xiaogang Liao 3 месяцев назад
Родитель
Сommit
913754fc1b

+ 3 - 0
cfc-backend/src/main/java/com/etotem/cfc/controller/mind/MindFortuneController.java

@@ -37,6 +37,7 @@ public class MindFortuneController {
         if (userId == null) return Result.error("请先登录");
         Long familyId = membershipService.getUserFamilyId(userId);
         FamilyFortune fortune = fortuneService.getFamilyFortune(familyId, LocalDate.now());
+        if (fortune == null) return Result.error("暂无家庭运势数据");
         Map<String, Object> result = batchBuildFortuneResponse(fortune);
         return Result.success(result);
     }
@@ -48,6 +49,7 @@ public class MindFortuneController {
     public Result<FamilyFortune> refreshFortune(@RequestAttribute("userId") Long userId) {
         if (userId == null) return Result.error("请先登录");
         Long familyId = membershipService.getUserFamilyId(userId);
+        if (familyId == null) return Result.error("请先创建家庭");
         FamilyFortune fortune = fortuneService.getFamilyFortune(familyId, LocalDate.now());
         fortune.setLuckyDirection(fortuneService.calculateLuckyDirection(familyId, LocalDate.now()));
         fortuneService.saveFamilyFortune(fortune);
@@ -65,6 +67,7 @@ public class MindFortuneController {
             @RequestBody ExportReportRequest request) {
         if (userId == null) return Result.error("请先登录");
         Long familyId = membershipService.getUserFamilyId(userId);
+        if (familyId == null) return Result.error("请先创建家庭");
         try {
             // 文件大小校验
             if (request.imageBase64 == null || request.imageBase64.length() > 4 * 1024 * 1024) {

+ 3 - 0
cfc-backend/src/main/java/com/etotem/cfc/service/UserService.java

@@ -1049,6 +1049,9 @@ FamilyMember child = familyMemberMapper.selectById(memberId);
         }
         // 更新性别
         if (dto.getGender() != null) {
+            if (!"male".equals(dto.getGender()) && !"female".equals(dto.getGender())) {
+                throw new RuntimeException("性别取值非法,仅支持 male/female");
+            }
             user.setGender(dto.getGender());
         }
         // 更新生日(将字符串转换为Date)

+ 6 - 0
cfc-backend/src/main/java/com/etotem/cfc/service/impl/FortuneServiceImpl.java

@@ -19,6 +19,9 @@ public class FortuneServiceImpl implements FortuneService {
     
     @Override
     public FamilyFortune getFamilyFortune(Long familyId, LocalDate date) {
+        if (familyId == null) {
+            return null;
+        }
         FamilyFortune fortune = familyFortuneMapper.selectByFamilyAndDate(familyId, date);
         if (fortune == null) {
             // 如果没有数据,生成占位数据
@@ -264,6 +267,9 @@ public class FortuneServiceImpl implements FortuneService {
     }
     
     private FamilyFortune generatePlaceholderFortune(Long familyId, LocalDate date) {
+        if (familyId == null) {
+            return null;
+        }
         FamilyFortune fortune = new FamilyFortune();
         fortune.setFamilyId(familyId);
         fortune.setFortuneDate(date);