11package flipnote .group .application .service ;
22
3+ import java .io .IOException ;
34import java .util .List ;
5+ import java .util .Map ;
6+ import java .util .stream .Collectors ;
47
58import org .springframework .stereotype .Service ;
69import org .springframework .transaction .annotation .Transactional ;
1215import flipnote .group .domain .model .member .MemberInfo ;
1316import flipnote .group .domain .policy .BusinessException ;
1417import flipnote .group .domain .policy .ErrorCode ;
18+ import flipnote .user .grpc .GetUserResponse ;
19+ import flipnote .user .grpc .GetUsersRequest ;
20+ import flipnote .user .grpc .GetUsersResponse ;
21+ import flipnote .user .grpc .UserQueryServiceGrpc ;
22+ import io .grpc .StatusRuntimeException ;
1523import lombok .RequiredArgsConstructor ;
1624
1725@ Service
1826@ RequiredArgsConstructor
1927public class FindGroupMemberService implements FindGroupMemberUseCase {
2028
2129 private final GroupMemberRepositoryPort groupMemberRepository ;
30+ private final UserQueryServiceGrpc .UserQueryServiceBlockingStub userQueryService ;
2231
2332 /**
2433 * 그룹 멤버 조회
@@ -36,8 +45,33 @@ public FindGroupMemberResult findGroupMember(FindGroupMemberCommand cmd) {
3645 }
3746
3847 List <MemberInfo > memberInfoList = groupMemberRepository .findMemberInfo (cmd .groupId ());
39-
40- //todo 멤버 정보에서 유저 아이디를 grpc를 통해 가져온 후 반환
48+
49+ List <Long > ids = memberInfoList .stream ()
50+ .map (MemberInfo ::getUserId )
51+ .collect (Collectors .toList ());
52+
53+ GetUsersRequest req = GetUsersRequest .newBuilder ()
54+ .addAllUserIds (ids )
55+ .build ();
56+
57+ GetUsersResponse res ;
58+ try {
59+ res = userQueryService .getUsers (req );
60+ } catch (StatusRuntimeException e ) {
61+ throw new BusinessException (ErrorCode .INTERNAL_SERVER_ERROR );
62+ }
63+
64+ // 맵으로 변환
65+ Map <Long , GetUserResponse > userInfoMap = res .getUsersList ().stream ()
66+ .collect (Collectors .toMap (GetUserResponse ::getId , u -> u ));
67+
68+ // memberInfo에 nickname, profileImage 업데이트
69+ memberInfoList .forEach (memberInfo -> {
70+ GetUserResponse userInfo = userInfoMap .get (memberInfo .getUserId ());
71+ if (userInfo != null ) {
72+ memberInfo .updateUserInfo (userInfo .getNickname (), userInfo .getProfileImageUrl ());
73+ }
74+ });
4175
4276 return new FindGroupMemberResult (memberInfoList );
4377 }
0 commit comments