ソースを参照

查登录用户信息

huangxiao 1 ヶ月 前
コミット
926dfae930

+ 2 - 1
service-user-adapter/src/main/java/com/hosea/service/adapter/web/UserControllerImpl.java

@@ -13,6 +13,7 @@ import com.hosea.service.user.client.dto.request.UserAddCmd;
 import com.hosea.service.user.client.dto.request.UserJoinTenantCmd;
 import com.hosea.service.user.client.dto.request.UserListByTenantPageQuery;
 import com.hosea.service.user.client.dto.request.UserUpdateCmd;
+import com.hosea.service.user.client.dto.response.UserInfoResponse;
 import jakarta.annotation.Resource;
 import org.springframework.web.bind.annotation.RestController;
 
@@ -29,7 +30,7 @@ public class UserControllerImpl implements UserApi {
     private UserService userService;
 
     @Override
-    public SingleResponse<UserDTO> get() {
+    public SingleResponse<UserInfoResponse> get() {
         return userService.of(JwtTokenUtil.getTokenOrElseThrow())
                 .map(SingleResponse::of)
                 .orElseGet(UserErrorCode.NOT_EXIST::toSingleResponse);

+ 4 - 2
service-user-app/src/main/java/com/hosea/service/app/user/UserService.java

@@ -14,6 +14,7 @@ import com.hosea.service.user.client.dto.request.UserAddCmd;
 import com.hosea.service.user.client.dto.request.UserJoinTenantCmd;
 import com.hosea.service.user.client.dto.request.UserListByTenantPageQuery;
 import com.hosea.service.user.client.dto.request.UserUpdateCmd;
+import com.hosea.service.user.client.dto.response.UserInfoResponse;
 import jakarta.annotation.Resource;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -34,11 +35,12 @@ public class UserService {
     @Resource
     private UserQueryExecute userQuery;
 
+
     /**
      * 查当前登录用户的信息
      */
-    public Optional<UserDTO> of(JwtToken token) {
-        return of(new UserUniqueDTO(null, token.getUser()));
+    public Optional<UserInfoResponse> of(JwtToken token) {
+        return userQuery.ofAndTenants(new UserUniqueDTO(null, token.getUser()));
     }
 
     /**

+ 18 - 0
service-user-app/src/main/java/com/hosea/service/app/user/executor/UserQueryExecute.java

@@ -1,11 +1,13 @@
 package com.hosea.service.app.user.executor;
 
 import com.alibaba.cola.dto.PageResponse;
+import com.hosea.service.app.tenant.TenantConversion;
 import com.hosea.service.app.user.UserConversion;
 import com.hosea.service.domain.user.UserDomainService;
 import com.hosea.service.user.client.dto.data.UserDTO;
 import com.hosea.service.user.client.dto.data.UserUniqueDTO;
 import com.hosea.service.user.client.dto.request.UserListByTenantPageQuery;
+import com.hosea.service.user.client.dto.response.UserInfoResponse;
 import jakarta.annotation.Resource;
 import org.springframework.stereotype.Component;
 
@@ -27,6 +29,22 @@ public class UserQueryExecute {
     /**
      * 查用户
      */
+    public Optional<UserInfoResponse> ofAndTenants(UserUniqueDTO unique) {
+        unique.validation();
+        return of(unique).map(user -> UserInfoResponse.builder()
+                .user(user)
+                .tenants(userDomainService
+                        .tenants(UserConversion.INSTANCE.toDomain(unique))
+                        .map(TenantConversion.INSTANCE::toDto)
+                        .toList()
+                )
+                .build()
+        );
+    }
+
+    /**
+     * 查用户
+     */
     public Optional<UserDTO> of(UserUniqueDTO unique) {
         unique.validation();
         return userDomainService.of(UserConversion.INSTANCE.toDomain(unique))

+ 2 - 1
service-user-client/src/main/java/com/hosea/service/user/client/api/UserApi.java

@@ -9,6 +9,7 @@ import com.hosea.service.user.client.dto.request.UserAddCmd;
 import com.hosea.service.user.client.dto.request.UserJoinTenantCmd;
 import com.hosea.service.user.client.dto.request.UserListByTenantPageQuery;
 import com.hosea.service.user.client.dto.request.UserUpdateCmd;
+import com.hosea.service.user.client.dto.response.UserInfoResponse;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -25,7 +26,7 @@ public interface UserApi {
      * 查当前登录用户的信息
      */
     @GetMapping
-    SingleResponse<UserDTO> get();
+    SingleResponse<UserInfoResponse> get();
 
     /**
      * 增加

+ 31 - 0
service-user-client/src/main/java/com/hosea/service/user/client/dto/response/UserInfoResponse.java

@@ -0,0 +1,31 @@
+package com.hosea.service.user.client.dto.response;
+
+import com.hosea.service.user.client.dto.data.TenantDTO;
+import com.hosea.service.user.client.dto.data.UserDTO;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+/**
+ * 用户详情的响应
+ *
+ * @author hx
+ * @date 2025-08-04
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class UserInfoResponse {
+    /**
+     * 用户
+     */
+    private UserDTO user;
+    /**
+     * 租户
+     */
+    private List<TenantDTO> tenants;
+}

+ 1 - 0
service-user-domain/src/main/java/com/hosea/service/domain/user/User.java

@@ -39,6 +39,7 @@ public class User {
     /**
      * 租户
      */
+    @Builder.Default
     private Set<TenantUnique> tenants = new HashSet<>();
     /**
      * 状态

+ 3 - 4
service-user-domain/src/main/java/com/hosea/service/domain/user/UserDomainService.java

@@ -47,7 +47,7 @@ public class UserDomainService {
      */
     public Optional<User> ofAndTenants(UserUnique user) {
         return of(user).map(u -> {
-            u.setTenants(tenants(u.getUnique()).collect(Collectors.toSet()));
+            u.setTenants(tenants(u.getUnique()).map(Tenant::getUnique).collect(Collectors.toSet()));
             return u;
         });
     }
@@ -55,12 +55,11 @@ public class UserDomainService {
     /**
      * 查用户的所有正常租户
      */
-    public Stream<TenantUnique> tenants(UserUnique user) {
+    public Stream<Tenant> tenants(UserUnique user) {
         return Optional.ofNullable(user)
                 .stream()
                 .flatMap(userRepository::tenants)
-                .filter(Tenant::statusNormal)
-                .map(Tenant::getUnique);
+                .filter(Tenant::statusNormal);
     }
 
     /**

+ 16 - 16
start/src/test/java/com/hosea/service/user/client/api/UserApiTest.java

@@ -40,21 +40,7 @@ class UserApiTest {
         Assertions.assertFalse(api.add(new UserAddCmd(dto)).isSuccess());
     }
 
-    @Test
     @Order(2)
-    void get() {
-        Assertions.assertFalse(api.get().isSuccess());
-        try (MockedStatic<JwtTokenUtil> jwt = Mockito.mockStatic(JwtTokenUtil.class)) {
-            jwt.when(JwtTokenUtil::getTokenOrElseThrow).thenReturn(JwtToken.builder().user("user5").build());
-            Assertions.assertTrue(api.get().isSuccess());
-            jwt.when(JwtTokenUtil::getTokenOrElseThrow).thenReturn(new JwtToken());
-            Assertions.assertFalse(api.get().isSuccess());
-            jwt.when(JwtTokenUtil::getTokenOrElseThrow).thenReturn(JwtToken.builder().user("xxx").build());
-            Assertions.assertFalse(api.get().isSuccess());
-        }
-    }
-
-    @Order(3)
     @RepeatedTest(value = TenantApiTest.TEST_NUM, name = "第{currentRepetition}次修改")
     void update(RepetitionInfo info) {
         int index = info.getCurrentRepetition();
@@ -71,7 +57,7 @@ class UserApiTest {
         Assertions.assertFalse(api.update(new UserUpdateCmd(dto)).isSuccess());
     }
 
-    @Order(4)
+    @Order(3)
     @Test
     void join() {
         UserUniqueDTO user = new UserUniqueDTO(null, "user1");
@@ -88,7 +74,7 @@ class UserApiTest {
         Assertions.assertTrue(api.join(new UserJoinTenantCmd(user, List.of(new TenantUniqueDTO(null, "xxxx")))).isSuccess());
     }
 
-    @Order(5)
+    @Order(4)
     @RepeatedTest(value = TenantApiTest.TEST_NUM, name = "第{currentRepetition}次加入")
     void joinAll(RepetitionInfo info) {
         List<TenantUniqueDTO> tenants = IntStream.range(1, TenantApiTest.TEST_NUM)
@@ -99,6 +85,20 @@ class UserApiTest {
     }
 
     @Test
+    @Order(5)
+    void get() {
+        Assertions.assertFalse(api.get().isSuccess());
+        try (MockedStatic<JwtTokenUtil> jwt = Mockito.mockStatic(JwtTokenUtil.class)) {
+            jwt.when(JwtTokenUtil::getTokenOrElseThrow).thenReturn(JwtToken.builder().user("user5").build());
+            Assertions.assertTrue(api.get().isSuccess());
+            jwt.when(JwtTokenUtil::getTokenOrElseThrow).thenReturn(new JwtToken());
+            Assertions.assertFalse(api.get().isSuccess());
+            jwt.when(JwtTokenUtil::getTokenOrElseThrow).thenReturn(JwtToken.builder().user("xxx").build());
+            Assertions.assertFalse(api.get().isSuccess());
+        }
+    }
+
+    @Test
     @Order(10)
     void list() {
         Integer size = 2;