Преглед изворни кода

feat: 注册引导-注册路径不再自动创建家庭

Xiaogang Liao пре 1 месец
родитељ
комит
d610e66c20
1 измењених фајлова са 5 додато и 85 уклоњено
  1. 5 85
      cfc-backend/src/main/java/com/etotem/cfc/service/UserService.java

+ 5 - 85
cfc-backend/src/main/java/com/etotem/cfc/service/UserService.java

@@ -100,17 +100,9 @@ private FamilyInvitationService familyInvitationService;
                 // 5. 完全查不到 → 全新用户,自动创建
                 isNewUser = true;
 
-                Family family = new Family();
-                family.setName("我的家庭");
-                family.setInviteCode(generateInviteCode());
-                family.setCreatedAt(new Date());
-                family.setUpdatedAt(new Date());
-                familyMapper.insert(family);
-
                 user = new User();
                 user.setOpenid(openid);
                 user.setUnionid(unionid != null ? unionid : "");
-                user.setFamilyId(family.getId());
                 user.setRole("parent");
                 user.setNickname(dto.getNickname() != null ? dto.getNickname() : (phone != null ? "用户" + phone.substring(7) : "微信用户"));
                 user.setAvatar(dto.getAvatar());
@@ -139,9 +131,6 @@ private FamilyInvitationService familyInvitationService;
             userMapper.updateById(user);
         }
 
-        // P3: admin创建的用户可能 familyId=0L,懒创建家庭
-        ensureUserHasFamily(user);
-
         // 管理员不能登录小程序
         if ("admin".equals(user.getRole())) {
             throw new RuntimeException("该账号不允许登录小程序");
@@ -187,20 +176,12 @@ private FamilyInvitationService familyInvitationService;
   boolean isNewUser = false;
 
   if (user == null) {
-    // 新用户,创建新家庭和用户
+    // 新用户,仅创建用户(家庭待首次使用家庭功能时创建)
     isNewUser = true;
 
-    Family family = new Family();
-    family.setName("我的家庭");
-        family.setInviteCode(generateInviteCode());
-        family.setCreatedAt(new Date());
-        family.setUpdatedAt(new Date());
-        familyMapper.insert(family);
-
     user = new User();
     user.setOpenid("phone:" + phone);
     user.setUnionid("");
-    user.setFamilyId(family.getId());
     // 默认角色为家长,可以被覆盖
     user.setRole(dto.getRole() != null ? dto.getRole() : "parent");
     user.setNickname(dto.getNickname() != null ? dto.getNickname() : "用户" + phone.substring(7));
@@ -212,10 +193,6 @@ private FamilyInvitationService familyInvitationService;
     user.setCreatedAt(new Date());
     user.setUpdatedAt(new Date());
     userMapper.insert(user);
-
-    // 设置家庭创建者
-    family.setCreatorId(user.getId());
-    familyMapper.updateById(family);
     try { onboardingService.initForUser(user.getId()); onboardingService.completeTask(user.getId(), "REGISTER"); } catch (Exception e) { /* onboarding init failure should not block login */ }
   } else {
     // 老用户,更新信息(如果提供了)
@@ -225,7 +202,6 @@ private FamilyInvitationService familyInvitationService;
     if (dto.getAvatar() != null && !dto.getAvatar().isEmpty()) {
       user.setAvatar(dto.getAvatar());
     }
-    ensureUserHasFamily(user);  // P3: admin创建的用户可能 familyId=0L,懒创建家庭
     user.setUpdatedAt(new Date());
     userMapper.updateById(user);
   }
@@ -287,9 +263,6 @@ private FamilyInvitationService familyInvitationService;
         user.setUpdatedAt(new Date());
         userMapper.updateById(user);
 
-        // 3. 懒创建家庭(admin创建的用户可能 familyId=0L)
-        ensureUserHasFamily(user);
-
         // 4. 生成token
         String token = jwtConfig.generateToken(user.getId(), user.getRole());
 
@@ -324,9 +297,6 @@ private FamilyInvitationService familyInvitationService;
             return null;
         }
 
-        // 懒创建家庭(admin创建的用户可能 familyId=0L)
-        ensureUserHasFamily(user);
-
         String token = jwtConfig.generateToken(user.getId(), user.getRole());
 
         LoginResultDTO result = new LoginResultDTO();
@@ -384,19 +354,10 @@ private FamilyInvitationService familyInvitationService;
      * 直接注册(测试环境:不验证验证码)
      */
     public LoginResultDTO directRegister(DirectRegisterDTO dto) {
-        // 创建家庭
-        Family family = new Family();
-        family.setName("我的家庭");
-        family.setInviteCode(generateInviteCode());
-        family.setCreatedAt(new Date());
-        family.setUpdatedAt(new Date());
-        familyMapper.insert(family);
-
-        // 创建用户
+        // 创建用户(家庭待首次使用家庭功能时创建,或通过邀请码加入)
         User user = new User();
         user.setOpenid("phone:" + dto.getPhone());
         user.setUnionid("");
-        user.setFamilyId(family.getId());
         user.setRole(dto.getRole() != null ? dto.getRole() : "parent");
         user.setNickname(dto.getNickname() != null ? dto.getNickname() : "用户" + dto.getPhone().substring(7));
         user.setAvatar(dto.getAvatar());
@@ -413,7 +374,7 @@ private FamilyInvitationService familyInvitationService;
             try {
                 joinFamily(user.getId(), dto.getInviteCode());
             } catch (Exception e) {
-                // 忽略邀请码错误,继续使用创建的家庭
+                // 忽略邀请码错误
             }
         }
 
@@ -756,7 +717,6 @@ private FamilyInvitationService familyInvitationService;
         User existingUser = userMapper.selectOne(new LambdaQueryWrapper<User>()
                 .eq(User::getIdCard, dto.getIdCard()));
         
-        Family family;
         User user;
         
         if (existingUser != null) {
@@ -765,9 +725,8 @@ private FamilyInvitationService familyInvitationService;
                 throw new RuntimeException("该账号不允许登录小程序");
             }
 
-            // 如果存在相同身份证的用户,加入其家庭
+            // 如果存在相同身份证的用户,沿用其已有信息
             user = existingUser;
-            family = familyMapper.selectById(user.getFamilyId());
             
             // 更新用户信息(昵称和头像可以更新)
             user.setNickname(dto.getNickname());
@@ -777,18 +736,10 @@ private FamilyInvitationService familyInvitationService;
             user.setUpdatedAt(new Date());
             userMapper.updateById(user);
         } else {
-            // 创建新家庭和用户
-            family = new Family();
-            family.setName("我的家庭");
-            family.setInviteCode(generateInviteCode());
-            family.setCreatedAt(new Date());
-            family.setUpdatedAt(new Date());
-            familyMapper.insert(family);
-
+            // 新用户,仅创建用户(家庭待首次使用家庭功能时创建)
             user = new User();
             user.setOpenid("phone:" + dto.getPhone());
             user.setUnionid("");
-            user.setFamilyId(family.getId());
             user.setRole("parent");
             user.setNickname(dto.getNickname());
             user.setAvatar(dto.getAvatar());
@@ -921,29 +872,6 @@ FamilyMember child = familyMemberMapper.selectById(memberId);
         return UUID.randomUUID().toString().substring(0, 8).toUpperCase();
     }
 
-    /**
-     * 确保用户有有效的家庭(懒创建)。
-     * admin创建的用户可能 familyId=0L,需要在此自动创建家庭。
-     * 如果创建了家庭,会持久化 user.familyId 到数据库。
-     */
-    private void ensureUserHasFamily(User user) {
-        if (user.getFamilyId() == null || user.getFamilyId() == 0L) {
-            Family family = new Family();
-            family.setName("我的家庭");
-            family.setInviteCode(generateInviteCode());
-            family.setCreatedAt(new Date());
-            family.setUpdatedAt(new Date());
-            familyMapper.insert(family);
-
-            family.setCreatorId(user.getId());
-            familyMapper.updateById(family);
-
-            user.setFamilyId(family.getId());
-            user.setUpdatedAt(new Date());
-            userMapper.updateById(user);
-        }
-    }
-
     private ChildInfoDTO toChildInfoDTO(FamilyMember child) {
         ChildInfoDTO dto = new ChildInfoDTO();
         dto.setId(child.getId());
@@ -1193,17 +1121,9 @@ FamilyMember child = familyMemberMapper.selectById(memberId);
 
         Result<DistributionRelation> distResult = distributionService.findByInviteCode(inviteCode);
         if (distResult.getCode() == 200 && distResult.getData() != null) {
-            Family family = new Family();
-            family.setName("我的家庭");
-            family.setInviteCode(generateInviteCode());
-            family.setCreatedAt(new Date());
-            family.setUpdatedAt(new Date());
-            familyMapper.insert(family);
-
             User user = new User();
             user.setOpenid("phone:" + phone);
             user.setUnionid("");
-            user.setFamilyId(family.getId());
             user.setRole(role);
             user.setNickname(nickname);
             user.setPhone(phone);