Skip to content

Commit 9d8831e

Browse files
authored
Merge pull request #10 from FlipNoteTeam/feat/get-user-by-token
Feat: 토큰으로 유저 조회 GRPC
2 parents 48036d9 + 96303c9 commit 9d8831e

2 files changed

Lines changed: 49 additions & 0 deletions

File tree

src/main/java/flipnote/user/user/presentation/grpc/GrpcUserQueryService.java

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
11
package flipnote.user.user.presentation.grpc;
22

3+
import flipnote.user.auth.domain.TokenClaims;
4+
import flipnote.user.auth.infrastructure.jwt.JwtProvider;
35
import flipnote.user.user.domain.User;
46
import flipnote.user.user.domain.UserRepository;
57
import flipnote.user.grpc.GetUserByEmailRequest;
68
import flipnote.user.grpc.GetUserByEmailResponse;
9+
import flipnote.user.grpc.GetUserByTokenRequest;
10+
import flipnote.user.grpc.GetUserByTokenResponse;
711
import flipnote.user.grpc.GetUserRequest;
812
import flipnote.user.grpc.GetUserResponse;
913
import flipnote.user.grpc.GetUsersRequest;
@@ -23,6 +27,7 @@
2327
public class GrpcUserQueryService extends UserQueryServiceGrpc.UserQueryServiceImplBase {
2428

2529
private final UserRepository userRepository;
30+
private final JwtProvider jwtProvider;
2631

2732
@Override
2833
public void getUser(GetUserRequest request, StreamObserver<GetUserResponse> responseObserver) {
@@ -85,6 +90,40 @@ public void getUserByEmail(GetUserByEmailRequest request, StreamObserver<GetUser
8590
}
8691
}
8792

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+
88127
private GetUserResponse toResponse(User user) {
89128
return GetUserResponse.newBuilder()
90129
.setId(user.getId())

src/main/proto/user_query.proto

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ service UserQueryService {
1010
rpc GetUser(GetUserRequest) returns (GetUserResponse);
1111
rpc GetUsers(GetUsersRequest) returns (GetUsersResponse);
1212
rpc GetUserByEmail(GetUserByEmailRequest) returns (GetUserByEmailResponse);
13+
rpc GetUserByToken(GetUserByTokenRequest) returns (GetUserByTokenResponse);
1314
}
1415

1516
message GetUserRequest {
@@ -39,3 +40,12 @@ message GetUserByEmailResponse {
3940
bool exists = 1;
4041
GetUserResponse user = 2;
4142
}
43+
44+
message GetUserByTokenRequest {
45+
string access_token = 1;
46+
}
47+
48+
message GetUserByTokenResponse {
49+
int64 user_id = 1;
50+
string nickname = 2;
51+
}

0 commit comments

Comments
 (0)