diff --git a/src/main/java/flipnote/user/user/presentation/grpc/GrpcUserQueryService.java b/src/main/java/flipnote/user/user/presentation/grpc/GrpcUserQueryService.java index 54a49de..24647e5 100644 --- a/src/main/java/flipnote/user/user/presentation/grpc/GrpcUserQueryService.java +++ b/src/main/java/flipnote/user/user/presentation/grpc/GrpcUserQueryService.java @@ -2,6 +2,8 @@ import flipnote.user.user.domain.User; import flipnote.user.user.domain.UserRepository; +import flipnote.user.grpc.GetUserByEmailRequest; +import flipnote.user.grpc.GetUserByEmailResponse; import flipnote.user.grpc.GetUserRequest; import flipnote.user.grpc.GetUserResponse; import flipnote.user.grpc.GetUsersRequest; @@ -61,6 +63,28 @@ public void getUsers(GetUsersRequest request, StreamObserver r } } + @Override + public void getUserByEmail(GetUserByEmailRequest request, StreamObserver responseObserver) { + try { + User user = userRepository.findByEmailAndStatus(request.getEmail(), User.Status.ACTIVE) + .orElse(null); + + GetUserByEmailResponse.Builder responseBuilder = GetUserByEmailResponse.newBuilder(); + + if (user != null) { + responseBuilder.setExists(true).setUser(toResponse(user)); + } else { + responseBuilder.setExists(false); + } + + responseObserver.onNext(responseBuilder.build()); + responseObserver.onCompleted(); + } catch (Exception e) { + log.error("gRPC getUserByEmail error. email: {}", request.getEmail(), e); + responseObserver.onError(Status.INTERNAL.withDescription("Internal error").asRuntimeException()); + } + } + private GetUserResponse toResponse(User user) { return GetUserResponse.newBuilder() .setId(user.getId()) diff --git a/src/main/proto/user_query.proto b/src/main/proto/user_query.proto index 93b3afb..688e7c1 100644 --- a/src/main/proto/user_query.proto +++ b/src/main/proto/user_query.proto @@ -9,6 +9,7 @@ package user_query; service UserQueryService { rpc GetUser(GetUserRequest) returns (GetUserResponse); rpc GetUsers(GetUsersRequest) returns (GetUsersResponse); + rpc GetUserByEmail(GetUserByEmailRequest) returns (GetUserByEmailResponse); } message GetUserRequest { @@ -29,3 +30,12 @@ message GetUsersRequest { message GetUsersResponse { repeated GetUserResponse users = 1; } + +message GetUserByEmailRequest { + string email = 1; +} + +message GetUserByEmailResponse { + bool exists = 1; + GetUserResponse user = 2; +}