|
1 | 1 | package flipnote.user.user.presentation.grpc; |
2 | 2 |
|
| 3 | +import flipnote.user.auth.domain.TokenClaims; |
| 4 | +import flipnote.user.auth.infrastructure.jwt.JwtProvider; |
3 | 5 | import flipnote.user.user.domain.User; |
4 | 6 | import flipnote.user.user.domain.UserRepository; |
5 | 7 | import flipnote.user.grpc.GetUserByEmailRequest; |
6 | 8 | import flipnote.user.grpc.GetUserByEmailResponse; |
| 9 | +import flipnote.user.grpc.GetUserByTokenRequest; |
| 10 | +import flipnote.user.grpc.GetUserByTokenResponse; |
7 | 11 | import flipnote.user.grpc.GetUserRequest; |
8 | 12 | import flipnote.user.grpc.GetUserResponse; |
9 | 13 | import flipnote.user.grpc.GetUsersRequest; |
|
23 | 27 | public class GrpcUserQueryService extends UserQueryServiceGrpc.UserQueryServiceImplBase { |
24 | 28 |
|
25 | 29 | private final UserRepository userRepository; |
| 30 | + private final JwtProvider jwtProvider; |
26 | 31 |
|
27 | 32 | @Override |
28 | 33 | public void getUser(GetUserRequest request, StreamObserver<GetUserResponse> responseObserver) { |
@@ -85,6 +90,40 @@ public void getUserByEmail(GetUserByEmailRequest request, StreamObserver<GetUser |
85 | 90 | } |
86 | 91 | } |
87 | 92 |
|
| 93 | + @Override |
| 94 | + public void getUserByToken(GetUserByTokenRequest request, StreamObserver<GetUserByTokenResponse> responseObserver) { |
| 95 | + try { |
| 96 | + if (!jwtProvider.isTokenValid(request.getAccessToken())) { |
| 97 | + responseObserver.onError( |
| 98 | + Status.UNAUTHENTICATED.withDescription("유효하지 않은 토큰입니다.").asRuntimeException() |
| 99 | + ); |
| 100 | + return; |
| 101 | + } |
| 102 | + |
| 103 | + TokenClaims claims = jwtProvider.extractClaims(request.getAccessToken()); |
| 104 | + User user = userRepository.findByIdAndStatus(claims.userId(), User.Status.ACTIVE) |
| 105 | + .orElse(null); |
| 106 | + |
| 107 | + if (user == null) { |
| 108 | + responseObserver.onError( |
| 109 | + Status.NOT_FOUND.withDescription("사용자를 찾을 수 없습니다.").asRuntimeException() |
| 110 | + ); |
| 111 | + return; |
| 112 | + } |
| 113 | + |
| 114 | + GetUserByTokenResponse response = GetUserByTokenResponse.newBuilder() |
| 115 | + .setUserId(user.getId()) |
| 116 | + .setNickname(user.getNickname()) |
| 117 | + .build(); |
| 118 | + |
| 119 | + responseObserver.onNext(response); |
| 120 | + responseObserver.onCompleted(); |
| 121 | + } catch (Exception e) { |
| 122 | + log.error("gRPC getUserByToken error", e); |
| 123 | + responseObserver.onError(Status.INTERNAL.withDescription("Internal error").asRuntimeException()); |
| 124 | + } |
| 125 | + } |
| 126 | + |
88 | 127 | private GetUserResponse toResponse(User user) { |
89 | 128 | return GetUserResponse.newBuilder() |
90 | 129 | .setId(user.getId()) |
|
0 commit comments