diff --git a/src/backend/user-server/src/main/java/com/asyncgate/user_server/controller/MemberCommandController.java b/src/backend/user-server/src/main/java/com/asyncgate/user_server/controller/MemberCommandController.java index 434058e5..d59f812a 100644 --- a/src/backend/user-server/src/main/java/com/asyncgate/user_server/controller/MemberCommandController.java +++ b/src/backend/user-server/src/main/java/com/asyncgate/user_server/controller/MemberCommandController.java @@ -131,7 +131,6 @@ public SuccessResponse getMembers( @RequestParam(required = false) List memberIds ) { UserClientInfoResponses byUserIds = findUserInfoUseCase.getByUserIds(memberIds); - System.out.println("byUserIds = " + byUserIds); return SuccessResponse.ok( byUserIds ); diff --git a/src/backend/user-server/src/main/java/com/asyncgate/user_server/dto/response/FriendQueryDto.java b/src/backend/user-server/src/main/java/com/asyncgate/user_server/dto/response/FriendQueryDto.java new file mode 100644 index 00000000..9295c64b --- /dev/null +++ b/src/backend/user-server/src/main/java/com/asyncgate/user_server/dto/response/FriendQueryDto.java @@ -0,0 +1,4 @@ +package com.asyncgate.user_server.dto.response; + +public record FriendQueryDto(String friendId, String userId) { +} diff --git a/src/backend/user-server/src/main/java/com/asyncgate/user_server/dto/response/FriendsResponse.java b/src/backend/user-server/src/main/java/com/asyncgate/user_server/dto/response/FriendsResponse.java index 14d896e1..c15de99c 100644 --- a/src/backend/user-server/src/main/java/com/asyncgate/user_server/dto/response/FriendsResponse.java +++ b/src/backend/user-server/src/main/java/com/asyncgate/user_server/dto/response/FriendsResponse.java @@ -2,25 +2,19 @@ import com.asyncgate.user_server.domain.FriendStatus; import com.asyncgate.user_server.domain.Member; -import com.asyncgate.user_server.dto.response.UserClientInfoResponses.UserClientInfoResponse; import io.swagger.v3.oas.annotations.media.ArraySchema; import io.swagger.v3.oas.annotations.media.Schema; +import java.time.LocalDate; import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; -/** - * 친구 목록 응답 DTO - *

- * 친구 목록은 다음과 같은 상태에 따라 다를 수 있습니다: - * - `PENDING`: 사용자가 요청한 친구 목록 - * - `RECEIVED`: 사용자가 요청을 받은 친구 목록 - * - `ACCEPTED`: 실제 친구 목록 (요청을 수락한 친구 목록) - */ @Schema(description = "상태에 맞는 친구 목록 응답") public record FriendsResponse( - - @ArraySchema(schema = @Schema(description = "상태에 맞는 친구 목록", implementation = UserClientInfoResponse.class)) - List friends, + @ArraySchema(schema = @Schema(description = "상태에 맞는 친구 목록", implementation = FriendInformation.class)) + List friends, @Schema( description = "친구 목록들과의 관계 상태 (예: PENDING, ACCEPTED, REJECTED)", @@ -28,12 +22,33 @@ public record FriendsResponse( ) FriendStatus status ) { - public static FriendsResponse of(final List members, final FriendStatus status) { - return new FriendsResponse( - members.stream() - .map(UserClientInfoResponse::from) - .toList(), - status - ); + public static FriendsResponse of(final List friendQueryDtos, final List members, final FriendStatus status) { + Map memberMap = members.stream() + .collect(Collectors.toMap(Member::getId, Function.identity())); + List friendInfos = friendQueryDtos.stream() + .map(dto -> { + Member member = memberMap.get(dto.userId()); + return new FriendInformation( + dto.friendId(), + member.getId(), + member.getName(), + member.getNickname(), + member.getProfileImgUrl(), + member.getEmail(), + member.getBirth() + ); + }) + .toList(); + return new FriendsResponse(friendInfos, status); } + + public record FriendInformation( + String friendId, + String userId, + String name, + String nickname, + String profileImageUrl, + String email, + LocalDate birth + ) { } } diff --git a/src/backend/user-server/src/main/java/com/asyncgate/user_server/repository/FriendQueryDslRepository.java b/src/backend/user-server/src/main/java/com/asyncgate/user_server/repository/FriendQueryDslRepository.java index 9a32683b..3fd98e81 100644 --- a/src/backend/user-server/src/main/java/com/asyncgate/user_server/repository/FriendQueryDslRepository.java +++ b/src/backend/user-server/src/main/java/com/asyncgate/user_server/repository/FriendQueryDslRepository.java @@ -2,6 +2,7 @@ import com.asyncgate.user_server.domain.Friend; import com.asyncgate.user_server.domain.FriendStatus; +import com.asyncgate.user_server.dto.response.FriendQueryDto; import com.asyncgate.user_server.entity.FriendEntity; import com.asyncgate.user_server.entity.QFriendEntity; import com.asyncgate.user_server.exception.FailType; @@ -23,7 +24,7 @@ public class FriendQueryDslRepository { /** * 본인이 보낸 친구 요청: 요청자(requestedBy)가 userId인 경우, 상태(PENDING)와 soft delete 조건 적용 */ - public List findSentFriendRequests(final String userId) { + public List findSentFriendRequests(final String userId) { List pendingFriendEntities = jpaQueryFactory.selectFrom(friendEntity) .where( friendEntity.requestedBy.eq(userId), @@ -38,7 +39,7 @@ public List findSentFriendRequests(final String userId) { /** * 본인이 받은 친구 요청: 친구 관계에 포함되면서 요청자(requestedBy)가 userId가 아닌 경우 (상태=PENDING) */ - public List findReceivedFriendRequests(final String userId) { + public List findReceivedFriendRequests(final String userId) { List pendingFriendEntities = jpaQueryFactory.selectFrom(friendEntity) .where( friendEntity.status.eq(FriendStatus.PENDING), @@ -52,13 +53,13 @@ public List findReceivedFriendRequests(final String userId) { return transFriendIds(userId, pendingFriendEntities); } - private List transFriendIds(String userId, List friendEntities) { + private List transFriendIds(String userId, List friendEntities) { return friendEntities.stream().map( friendEntity -> { if (friendEntity.getUserId1().equals(userId)) { - return friendEntity.getUserId2(); + return new FriendQueryDto(friendEntity.getId(), friendEntity.getUserId2()); } else { - return friendEntity.getUserId1(); + return new FriendQueryDto(friendEntity.getId(), friendEntity.getUserId1()); } } ).toList(); @@ -67,7 +68,7 @@ private List transFriendIds(String userId, List friendEnti /** * 본인의 실제 친구: 친구 관계에 포함되고 상태가 ACCEPTED인 경우 (soft delete 조건 포함) */ - public List findFriendsIdByUserId(final String userId) { + public List findFriendsIdByUserId(final String userId) { List friendEntities = jpaQueryFactory.selectFrom(friendEntity) .where( friendEntity.status.eq(FriendStatus.ACCEPTED), diff --git a/src/backend/user-server/src/main/java/com/asyncgate/user_server/repository/FriendRepository.java b/src/backend/user-server/src/main/java/com/asyncgate/user_server/repository/FriendRepository.java index 24bcbbe5..ece8f78f 100644 --- a/src/backend/user-server/src/main/java/com/asyncgate/user_server/repository/FriendRepository.java +++ b/src/backend/user-server/src/main/java/com/asyncgate/user_server/repository/FriendRepository.java @@ -1,6 +1,7 @@ package com.asyncgate.user_server.repository; import com.asyncgate.user_server.domain.Friend; +import com.asyncgate.user_server.dto.response.FriendQueryDto; import java.util.List; @@ -11,11 +12,11 @@ public interface FriendRepository { void deleteById(String friendId); - List findSentFriendRequests(String requestedUserId); + List findSentFriendRequests(String requestedUserId); - List findReceivedFriendRequests(String userId); + List findReceivedFriendRequests(String userId); - List findFriendIdsByUserId(String userId); + List findFriendIdsByUserId(String userId); void validNotExists(String userId1, String userId2); diff --git a/src/backend/user-server/src/main/java/com/asyncgate/user_server/repository/FriendRepositoryImpl.java b/src/backend/user-server/src/main/java/com/asyncgate/user_server/repository/FriendRepositoryImpl.java index b6daddb5..b46c8081 100644 --- a/src/backend/user-server/src/main/java/com/asyncgate/user_server/repository/FriendRepositoryImpl.java +++ b/src/backend/user-server/src/main/java/com/asyncgate/user_server/repository/FriendRepositoryImpl.java @@ -1,6 +1,7 @@ package com.asyncgate.user_server.repository; import com.asyncgate.user_server.domain.Friend; +import com.asyncgate.user_server.dto.response.FriendQueryDto; import com.asyncgate.user_server.entity.common.BaseEntity; import com.asyncgate.user_server.exception.FailType; import com.asyncgate.user_server.exception.UserServerException; @@ -42,17 +43,17 @@ public void deleteById(final String friendId) { } @Override - public List findSentFriendRequests(final String userId) { + public List findSentFriendRequests(final String userId) { return queryDslRepository.findSentFriendRequests(userId); } @Override - public List findReceivedFriendRequests(final String userId) { + public List findReceivedFriendRequests(final String userId) { return queryDslRepository.findReceivedFriendRequests(userId); } @Override - public List findFriendIdsByUserId(final String userId) { + public List findFriendIdsByUserId(final String userId) { return queryDslRepository.findFriendsIdByUserId(userId); } diff --git a/src/backend/user-server/src/main/java/com/asyncgate/user_server/repository/MemberQueryDslRepository.java b/src/backend/user-server/src/main/java/com/asyncgate/user_server/repository/MemberQueryDslRepository.java index e81d0b3f..89cdb787 100644 --- a/src/backend/user-server/src/main/java/com/asyncgate/user_server/repository/MemberQueryDslRepository.java +++ b/src/backend/user-server/src/main/java/com/asyncgate/user_server/repository/MemberQueryDslRepository.java @@ -16,7 +16,7 @@ public class MemberQueryDslRepository { private final QMemberEntity memberEntity = QMemberEntity.memberEntity; public List getByMemberIds(final List memberIds) { - return jpaQueryFactory + List memberEntities = jpaQueryFactory .select(this.memberEntity) .from(this.memberEntity) .where( @@ -24,5 +24,6 @@ public List getByMemberIds(final List memberIds) { this.memberEntity.deleted.isFalse() ) .fetch(); + return memberEntities; } } diff --git a/src/backend/user-server/src/main/java/com/asyncgate/user_server/security/resolver/HttpMemberIDArgumentResolver.java b/src/backend/user-server/src/main/java/com/asyncgate/user_server/security/resolver/HttpMemberIDArgumentResolver.java index f2e616d0..8106195f 100644 --- a/src/backend/user-server/src/main/java/com/asyncgate/user_server/security/resolver/HttpMemberIDArgumentResolver.java +++ b/src/backend/user-server/src/main/java/com/asyncgate/user_server/security/resolver/HttpMemberIDArgumentResolver.java @@ -39,7 +39,6 @@ public Object resolveArgument( if (memberId == null) { throw new CommonException(FailType.ACCESS_DENIED); } - return memberId.toString(); } } diff --git a/src/backend/user-server/src/main/java/com/asyncgate/user_server/service/FriendService.java b/src/backend/user-server/src/main/java/com/asyncgate/user_server/service/FriendService.java index 8e2e53f9..5df6393f 100644 --- a/src/backend/user-server/src/main/java/com/asyncgate/user_server/service/FriendService.java +++ b/src/backend/user-server/src/main/java/com/asyncgate/user_server/service/FriendService.java @@ -3,6 +3,7 @@ import com.asyncgate.user_server.domain.Friend; import com.asyncgate.user_server.domain.FriendStatus; import com.asyncgate.user_server.domain.Member; +import com.asyncgate.user_server.dto.response.FriendQueryDto; import com.asyncgate.user_server.dto.response.FriendsResponse; import com.asyncgate.user_server.exception.FailType; import com.asyncgate.user_server.exception.UserServerException; @@ -83,25 +84,32 @@ public void deleteFriend(final String userId, final String friendId) { @Override public FriendsResponse getSentFriendRequests(final String userId) { - List sentFriendIds = friendRepository.findSentFriendRequests(userId); - return FriendsResponse.of( - memberRepository.getByMemberIds(sentFriendIds), FriendStatus.PENDING - ); + List sentFriendDtos = friendRepository.findSentFriendRequests(userId); + List friendIds = sentFriendDtos.stream() + .map(FriendQueryDto::userId) + .toList(); + List members = memberRepository.getByMemberIds(friendIds); + return FriendsResponse.of(sentFriendDtos, members, FriendStatus.PENDING); } + @Override public FriendsResponse getReceivedFriendRequests(final String userId) { - List receivedFriendIds = friendRepository.findReceivedFriendRequests(userId); - return FriendsResponse.of( - memberRepository.getByMemberIds(receivedFriendIds), FriendStatus.RECEIVED - ); + List receivedFriendDtos = friendRepository.findReceivedFriendRequests(userId); + List friendIds = receivedFriendDtos.stream() + .map(FriendQueryDto::userId) + .toList(); + List members = memberRepository.getByMemberIds(friendIds); + return FriendsResponse.of(receivedFriendDtos, members, FriendStatus.RECEIVED); } @Override public FriendsResponse getFriends(final String userId) { - List friendsIds = friendRepository.findFriendIdsByUserId(userId); - return FriendsResponse.of( - memberRepository.getByMemberIds(friendsIds), FriendStatus.ACCEPTED - ); + List friendDtos = friendRepository.findFriendIdsByUserId(userId); + List friendIds = friendDtos.stream() + .map(FriendQueryDto::userId) + .toList(); + List members = memberRepository.getByMemberIds(friendIds); + return FriendsResponse.of(friendDtos, members, FriendStatus.ACCEPTED); } } diff --git a/src/backend/user-server/src/main/java/com/asyncgate/user_server/service/RegisterTemporaryMemberService.java b/src/backend/user-server/src/main/java/com/asyncgate/user_server/service/RegisterTemporaryMemberService.java index 038425b7..98f45df0 100644 --- a/src/backend/user-server/src/main/java/com/asyncgate/user_server/service/RegisterTemporaryMemberService.java +++ b/src/backend/user-server/src/main/java/com/asyncgate/user_server/service/RegisterTemporaryMemberService.java @@ -54,8 +54,6 @@ public void execute(final RegisterTemporaryMemberRequest request) { temporaryMemberRepository.save(DomainUtil.TemporaryMemberMapper.toEntity(tempMember)); String code = PasswordUtil.generateAuthCode(6); - System.out.println("code = " + code); - AuthenticationCode authCode = AuthenticationCode.create(request.email(), code); authenticationCodeRepository.save(DomainUtil.AuthenticationCodeMapper.toEntity(authCode)); diff --git a/src/backend/user-server/src/main/java/com/asyncgate/user_server/service/ValidateAuthenticationCodeService.java b/src/backend/user-server/src/main/java/com/asyncgate/user_server/service/ValidateAuthenticationCodeService.java index 5e963a4a..ef33d8e7 100644 --- a/src/backend/user-server/src/main/java/com/asyncgate/user_server/service/ValidateAuthenticationCodeService.java +++ b/src/backend/user-server/src/main/java/com/asyncgate/user_server/service/ValidateAuthenticationCodeService.java @@ -35,10 +35,6 @@ public void execute(final ValidateAuthenticationCodeRequest request) { String redisSaveCode = storedAuthCode.getCode(); String requestCode = request.authenticationCode(); - - System.out.println("requestCode = " + requestCode); - System.out.println("redisSaveCode = " + redisSaveCode); - if (!redisSaveCode.equals(requestCode)) { throw new UserServerException(FailType.INVALID_EMAIL_AUTH_CODE); }