From 358d0c49ee63253ab4027f928285d39daa023f07 Mon Sep 17 00:00:00 2001 From: jihwan2da Date: Fri, 19 Jan 2024 18:01:30 +0900 Subject: [PATCH 1/3] =?UTF-8?q?feat:=20User=20In=20id=20=EC=BF=BC=EB=A6=AC?= =?UTF-8?q?=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../handler/impl/UserQueryHandlerImpl.java | 9 ++++++++ .../custom/UserJpaRepositoryCustom.java | 5 +++++ .../impl/UserJpaRepositoryImpl.java | 22 ++++++++++++++++++- 3 files changed, 35 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/gloddy/server/user/domain/handler/impl/UserQueryHandlerImpl.java b/src/main/java/com/gloddy/server/user/domain/handler/impl/UserQueryHandlerImpl.java index 572a23f4..f4293b37 100644 --- a/src/main/java/com/gloddy/server/user/domain/handler/impl/UserQueryHandlerImpl.java +++ b/src/main/java/com/gloddy/server/user/domain/handler/impl/UserQueryHandlerImpl.java @@ -1,6 +1,7 @@ package com.gloddy.server.user.domain.handler.impl; import com.gloddy.server.user.application.internal.dto.UserPreviewResponse; +import com.gloddy.server.user.application.internal.dto.UserPreviewsResponse; import com.gloddy.server.user.domain.User; import com.gloddy.server.user.domain.vo.Phone; import com.gloddy.server.user.domain.dto.PraiseResponse; @@ -11,6 +12,8 @@ import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Repository; +import java.util.Collection; +import java.util.List; import java.util.Optional; @Repository @@ -56,4 +59,10 @@ public UserPreviewResponse findUserPreviewById(Long userId) { return userJpaRepository.findUserPreviewById(userId) .orElseThrow(() -> new UserBusinessException(ErrorCode.USER_NOT_FOUND)); } + + @Override + public UserPreviewsResponse findUserPreviewsByInId(Collection userIds) { + List userPreviews = userJpaRepository.findUserPreviewsByInId(userIds); + return new UserPreviewsResponse(userPreviews); + } } diff --git a/src/main/java/com/gloddy/server/user/infra/repository/custom/UserJpaRepositoryCustom.java b/src/main/java/com/gloddy/server/user/infra/repository/custom/UserJpaRepositoryCustom.java index 5509c8ef..d5a4c1d5 100644 --- a/src/main/java/com/gloddy/server/user/infra/repository/custom/UserJpaRepositoryCustom.java +++ b/src/main/java/com/gloddy/server/user/infra/repository/custom/UserJpaRepositoryCustom.java @@ -6,7 +6,10 @@ import com.gloddy.server.user.domain.vo.kind.Status; import com.gloddy.server.user.domain.dto.PraiseResponse; +import java.util.Collection; +import java.util.List; import java.util.Optional; +import java.util.Set; public interface UserJpaRepositoryCustom { @@ -19,4 +22,6 @@ public interface UserJpaRepositoryCustom { PraiseResponse.GetPraiseForUser findPraiseByUserId(Long userId); Optional findUserPreviewById(Long id); + + List findUserPreviewsByInId(Collection ids); } diff --git a/src/main/java/com/gloddy/server/user/infra/repository/impl/UserJpaRepositoryImpl.java b/src/main/java/com/gloddy/server/user/infra/repository/impl/UserJpaRepositoryImpl.java index d06737f2..72149136 100644 --- a/src/main/java/com/gloddy/server/user/infra/repository/impl/UserJpaRepositoryImpl.java +++ b/src/main/java/com/gloddy/server/user/infra/repository/impl/UserJpaRepositoryImpl.java @@ -12,7 +12,7 @@ import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Repository; -import java.util.Optional; +import java.util.*; import static com.gloddy.server.user.domain.QUser.*; import static com.gloddy.server.user.domain.QPraise.*; @@ -76,6 +76,22 @@ public Optional findUserPreviewById(Long id) { .fetchOne()); } + @Override + public List findUserPreviewsByInId(Collection ids) { + return query.select(new QUserPreviewResponse( + user.id, + user.school.isCertifiedStudent, + user.profile.imageUrl, + user.profile.nickname, + user.profile.country.name, + user.profile.country.image, + reliability.level + )).from(user) + .innerJoin(user.reliability, reliability) + .where(inId(ids)) + .fetch(); + } + private BooleanExpression eqPhone(Phone phone) { return user.phone.eq(phone); } @@ -87,4 +103,8 @@ private BooleanExpression eqEmail(String email) { private BooleanExpression eqId(Long id) { return user.id.eq(id); } + + private BooleanExpression inId(Collection ids) { + return user.id.in(ids); + } } From 959b00d456944df2b11d1180832c49d902a33932 Mon Sep 17 00:00:00 2001 From: jihwan2da Date: Fri, 19 Jan 2024 18:03:36 +0900 Subject: [PATCH 2/3] =?UTF-8?q?feat:=20User=20Intenal=20=EC=9D=BC=EA=B4=84?= =?UTF-8?q?=20=EC=A1=B0=ED=9A=8C=20Service=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../application/internal/UserInternalQueryService.java | 7 +++++++ .../application/internal/dto/UserPreviewsResponse.java | 8 ++++++++ .../server/user/domain/handler/UserQueryHandler.java | 4 ++++ 3 files changed, 19 insertions(+) create mode 100644 src/main/java/com/gloddy/server/user/application/internal/dto/UserPreviewsResponse.java diff --git a/src/main/java/com/gloddy/server/user/application/internal/UserInternalQueryService.java b/src/main/java/com/gloddy/server/user/application/internal/UserInternalQueryService.java index 076a89ed..4d9304d3 100644 --- a/src/main/java/com/gloddy/server/user/application/internal/UserInternalQueryService.java +++ b/src/main/java/com/gloddy/server/user/application/internal/UserInternalQueryService.java @@ -1,11 +1,14 @@ package com.gloddy.server.user.application.internal; import com.gloddy.server.user.application.internal.dto.UserPreviewResponse; +import com.gloddy.server.user.application.internal.dto.UserPreviewsResponse; import com.gloddy.server.user.domain.handler.UserQueryHandler; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.Collection; + @Service @RequiredArgsConstructor @Transactional(readOnly = true) @@ -16,4 +19,8 @@ public class UserInternalQueryService { public UserPreviewResponse getUserPreview(Long userId) { return userQueryHandler.findUserPreviewById(userId); } + + public UserPreviewsResponse getUserPreviews(Collection ids) { + return userQueryHandler.findUserPreviewsByInId(ids); + } } diff --git a/src/main/java/com/gloddy/server/user/application/internal/dto/UserPreviewsResponse.java b/src/main/java/com/gloddy/server/user/application/internal/dto/UserPreviewsResponse.java new file mode 100644 index 00000000..d4c43ebe --- /dev/null +++ b/src/main/java/com/gloddy/server/user/application/internal/dto/UserPreviewsResponse.java @@ -0,0 +1,8 @@ +package com.gloddy.server.user.application.internal.dto; + +import java.util.List; + +public record UserPreviewsResponse( + List users +) { +} diff --git a/src/main/java/com/gloddy/server/user/domain/handler/UserQueryHandler.java b/src/main/java/com/gloddy/server/user/domain/handler/UserQueryHandler.java index 0301061e..eed719cc 100644 --- a/src/main/java/com/gloddy/server/user/domain/handler/UserQueryHandler.java +++ b/src/main/java/com/gloddy/server/user/domain/handler/UserQueryHandler.java @@ -1,10 +1,12 @@ package com.gloddy.server.user.domain.handler; import com.gloddy.server.user.application.internal.dto.UserPreviewResponse; +import com.gloddy.server.user.application.internal.dto.UserPreviewsResponse; import com.gloddy.server.user.domain.User; import com.gloddy.server.user.domain.vo.Phone; import com.gloddy.server.user.domain.dto.PraiseResponse; +import java.util.Collection; import java.util.Optional; public interface UserQueryHandler { @@ -20,4 +22,6 @@ public interface UserQueryHandler { PraiseResponse.GetPraiseForUser findPraiseDtoByUserId(Long userId); UserPreviewResponse findUserPreviewById(Long userId); + + UserPreviewsResponse findUserPreviewsByInId(Collection userIds); } From 86f7b737601f4c6c00d47de6385b88548ba38a0d Mon Sep 17 00:00:00 2001 From: jihwan2da Date: Fri, 19 Jan 2024 18:04:08 +0900 Subject: [PATCH 3/3] =?UTF-8?q?feat:=20User=20Internal=20=EC=9D=BC?= =?UTF-8?q?=EA=B4=84=20=EC=A1=B0=ED=9A=8C=20Controller=20=EC=9E=91?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/intenal/UserInternalQueryController.java | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/gloddy/server/user/api/intenal/UserInternalQueryController.java b/src/main/java/com/gloddy/server/user/api/intenal/UserInternalQueryController.java index 7101ca06..f5ab9daa 100644 --- a/src/main/java/com/gloddy/server/user/api/intenal/UserInternalQueryController.java +++ b/src/main/java/com/gloddy/server/user/api/intenal/UserInternalQueryController.java @@ -4,12 +4,12 @@ import com.gloddy.server.core.response.ApiResponse; import com.gloddy.server.user.application.internal.UserInternalQueryService; import com.gloddy.server.user.application.internal.dto.UserPreviewResponse; +import com.gloddy.server.user.application.internal.dto.UserPreviewsResponse; import lombok.RequiredArgsConstructor; import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; + +import java.util.Collection; @RestController @RequestMapping("/api/internal/payload") @@ -23,4 +23,12 @@ public ResponseEntity getUserPreview(@PathVariable("userId" UserPreviewResponse response = userInternalQueryService.getUserPreview(userId); return ApiResponse.ok(response); } + + @GetMapping("/users") + public ResponseEntity getUserPreviews( + @RequestParam("ids") Collection ids + ) { + UserPreviewsResponse response = userInternalQueryService.getUserPreviews(ids); + return ApiResponse.ok(response); + } }