Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,6 @@ public SuccessResponse<UserClientInfoResponses> getMembers(
@RequestParam(required = false) List<String> memberIds
) {
UserClientInfoResponses byUserIds = findUserInfoUseCase.getByUserIds(memberIds);
System.out.println("byUserIds = " + byUserIds);
return SuccessResponse.ok(
byUserIds
);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
package com.asyncgate.user_server.dto.response;

public record FriendQueryDto(String friendId, String userId) {
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,38 +2,53 @@

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
* <p>
* 친구 목록은 다음과 같은 상태에 따라 다를 수 있습니다:
* - `PENDING`: 사용자가 요청한 친구 목록
* - `RECEIVED`: 사용자가 요청을 받은 친구 목록
* - `ACCEPTED`: 실제 친구 목록 (요청을 수락한 친구 목록)
*/
@Schema(description = "상태에 맞는 친구 목록 응답")
public record FriendsResponse(

@ArraySchema(schema = @Schema(description = "상태에 맞는 친구 목록", implementation = UserClientInfoResponse.class))
List<UserClientInfoResponse> friends,
@ArraySchema(schema = @Schema(description = "상태에 맞는 친구 목록", implementation = FriendInformation.class))
List<FriendInformation> friends,

@Schema(
description = "친구 목록들과의 관계 상태 (예: PENDING, ACCEPTED, REJECTED)",
example = "ACCEPTED"
)
FriendStatus status
) {
public static FriendsResponse of(final List<Member> members, final FriendStatus status) {
return new FriendsResponse(
members.stream()
.map(UserClientInfoResponse::from)
.toList(),
status
);
public static FriendsResponse of(final List<FriendQueryDto> friendQueryDtos, final List<Member> members, final FriendStatus status) {
Map<String, Member> memberMap = members.stream()
.collect(Collectors.toMap(Member::getId, Function.identity()));
List<FriendInformation> 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
) { }
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -23,7 +24,7 @@ public class FriendQueryDslRepository {
/**
* 본인이 보낸 친구 요청: 요청자(requestedBy)가 userId인 경우, 상태(PENDING)와 soft delete 조건 적용
*/
public List<String> findSentFriendRequests(final String userId) {
public List<FriendQueryDto> findSentFriendRequests(final String userId) {
List<FriendEntity> pendingFriendEntities = jpaQueryFactory.selectFrom(friendEntity)
.where(
friendEntity.requestedBy.eq(userId),
Expand All @@ -38,7 +39,7 @@ public List<String> findSentFriendRequests(final String userId) {
/**
* 본인이 받은 친구 요청: 친구 관계에 포함되면서 요청자(requestedBy)가 userId가 아닌 경우 (상태=PENDING)
*/
public List<String> findReceivedFriendRequests(final String userId) {
public List<FriendQueryDto> findReceivedFriendRequests(final String userId) {
List<FriendEntity> pendingFriendEntities = jpaQueryFactory.selectFrom(friendEntity)
.where(
friendEntity.status.eq(FriendStatus.PENDING),
Expand All @@ -52,13 +53,13 @@ public List<String> findReceivedFriendRequests(final String userId) {
return transFriendIds(userId, pendingFriendEntities);
}

private List<String> transFriendIds(String userId, List<FriendEntity> friendEntities) {
private List<FriendQueryDto> transFriendIds(String userId, List<FriendEntity> 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();
Expand All @@ -67,7 +68,7 @@ private List<String> transFriendIds(String userId, List<FriendEntity> friendEnti
/**
* 본인의 실제 친구: 친구 관계에 포함되고 상태가 ACCEPTED인 경우 (soft delete 조건 포함)
*/
public List<String> findFriendsIdByUserId(final String userId) {
public List<FriendQueryDto> findFriendsIdByUserId(final String userId) {
List<FriendEntity> friendEntities = jpaQueryFactory.selectFrom(friendEntity)
.where(
friendEntity.status.eq(FriendStatus.ACCEPTED),
Expand Down
Original file line number Diff line number Diff line change
@@ -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;

Expand All @@ -11,11 +12,11 @@ public interface FriendRepository {

void deleteById(String friendId);

List<String> findSentFriendRequests(String requestedUserId);
List<FriendQueryDto> findSentFriendRequests(String requestedUserId);

List<String> findReceivedFriendRequests(String userId);
List<FriendQueryDto> findReceivedFriendRequests(String userId);

List<String> findFriendIdsByUserId(String userId);
List<FriendQueryDto> findFriendIdsByUserId(String userId);

void validNotExists(String userId1, String userId2);

Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand Down Expand Up @@ -42,17 +43,17 @@ public void deleteById(final String friendId) {
}

@Override
public List<String> findSentFriendRequests(final String userId) {
public List<FriendQueryDto> findSentFriendRequests(final String userId) {
return queryDslRepository.findSentFriendRequests(userId);
}

@Override
public List<String> findReceivedFriendRequests(final String userId) {
public List<FriendQueryDto> findReceivedFriendRequests(final String userId) {
return queryDslRepository.findReceivedFriendRequests(userId);
}

@Override
public List<String> findFriendIdsByUserId(final String userId) {
public List<FriendQueryDto> findFriendIdsByUserId(final String userId) {
return queryDslRepository.findFriendsIdByUserId(userId);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,14 @@ public class MemberQueryDslRepository {
private final QMemberEntity memberEntity = QMemberEntity.memberEntity;

public List<MemberEntity> getByMemberIds(final List<String> memberIds) {
return jpaQueryFactory
List<MemberEntity> memberEntities = jpaQueryFactory
.select(this.memberEntity)
.from(this.memberEntity)
.where(
this.memberEntity.id.in(memberIds),
this.memberEntity.deleted.isFalse()
)
.fetch();
return memberEntities;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,6 @@ public Object resolveArgument(
if (memberId == null) {
throw new CommonException(FailType.ACCESS_DENIED);
}

return memberId.toString();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -83,25 +84,32 @@ public void deleteFriend(final String userId, final String friendId) {

@Override
public FriendsResponse getSentFriendRequests(final String userId) {
List<String> sentFriendIds = friendRepository.findSentFriendRequests(userId);
return FriendsResponse.of(
memberRepository.getByMemberIds(sentFriendIds), FriendStatus.PENDING
);
List<FriendQueryDto> sentFriendDtos = friendRepository.findSentFriendRequests(userId);
List<String> friendIds = sentFriendDtos.stream()
.map(FriendQueryDto::userId)
.toList();
List<Member> members = memberRepository.getByMemberIds(friendIds);
return FriendsResponse.of(sentFriendDtos, members, FriendStatus.PENDING);
}


@Override
public FriendsResponse getReceivedFriendRequests(final String userId) {
List<String> receivedFriendIds = friendRepository.findReceivedFriendRequests(userId);
return FriendsResponse.of(
memberRepository.getByMemberIds(receivedFriendIds), FriendStatus.RECEIVED
);
List<FriendQueryDto> receivedFriendDtos = friendRepository.findReceivedFriendRequests(userId);
List<String> friendIds = receivedFriendDtos.stream()
.map(FriendQueryDto::userId)
.toList();
List<Member> members = memberRepository.getByMemberIds(friendIds);
return FriendsResponse.of(receivedFriendDtos, members, FriendStatus.RECEIVED);
}

@Override
public FriendsResponse getFriends(final String userId) {
List<String> friendsIds = friendRepository.findFriendIdsByUserId(userId);
return FriendsResponse.of(
memberRepository.getByMemberIds(friendsIds), FriendStatus.ACCEPTED
);
List<FriendQueryDto> friendDtos = friendRepository.findFriendIdsByUserId(userId);
List<String> friendIds = friendDtos.stream()
.map(FriendQueryDto::userId)
.toList();
List<Member> members = memberRepository.getByMemberIds(friendIds);
return FriendsResponse.of(friendDtos, members, FriendStatus.ACCEPTED);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
Expand Down
Loading