Skip to content

Commit

Permalink
fix: 🐛 Added Missing Field in the Chat Member Detail Response (#232)
Browse files Browse the repository at this point in the history
* fix: delete chat-member-search-service

* fix: add profile-img field to the result view

* fix: handle to aftermatch by deleting chat-member-search-serivce

* test: add profile image url parameter

* fix: add profile image url to chat-member-res

* fix: replace method to create member detail with function

* fix: replace method to create member detail with function in chat-member-mapper

* fix: add object-prefix to mapper

* test: add aws s3 adapter dependency

* fix: add profile image field to custom-chat-member-repo-impl
  • Loading branch information
psychology50 authored Jan 24, 2025
1 parent 2c97f9b commit bf5dbd1
Show file tree
Hide file tree
Showing 12 changed files with 63 additions and 58 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -27,18 +27,10 @@ public record MemberDetail(
@Schema(description = "채팅방 가입일")
@JsonSerialize(using = LocalDateTimeSerializer.class)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
LocalDateTime createdAt
LocalDateTime createdAt,
@Schema(description = "채팅방 참여자 프로필 이미지 URL")
String profileImageUrl
) {
public static MemberDetail from(ChatMemberResult.Detail chatMember, boolean isContainNotifyEnabled) {
return new MemberDetail(
chatMember.id(),
chatMember.userId(),
chatMember.name(),
chatMember.role(),
isContainNotifyEnabled ? chatMember.notifyEnabled() : null,
chatMember.createdAt()
);
}
}

@Schema(description = "채팅방 참여자 요약 정보")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,21 @@

@Mapper
public final class ChatMemberMapper {
public static List<ChatMemberRes.MemberDetail> toChatMemberResDetail(List<ChatMemberResult.Detail> chatMembers) {
public static List<ChatMemberRes.MemberDetail> toChatMemberResDetail(List<ChatMemberResult.Detail> chatMembers, String objectPrefix) {
return chatMembers.stream()
.map(chatMember -> ChatMemberRes.MemberDetail.from(chatMember, false))
.map(chatMember -> createMemberDetail(chatMember, false, objectPrefix))
.toList();
}

private static ChatMemberRes.MemberDetail createMemberDetail(ChatMemberResult.Detail chatMember, boolean isMe, String objectPrefix) {
return new ChatMemberRes.MemberDetail(
chatMember.id(),
chatMember.userId(),
chatMember.name(),
chatMember.role(),
isMe ? chatMember.notifyEnabled() : null,
chatMember.createdAt(),
chatMember.profileImageUrl() == null ? "" : objectPrefix + chatMember.profileImageUrl()
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -109,9 +109,9 @@ public static ChatRoomRes.Detail toChatRoomResDetail(ChatRoom chatRoom, ChatRes.
);
}

public static ChatRoomRes.RoomWithParticipants toChatRoomResRoomWithParticipants(ChatMemberResult.Detail myInfo, List<ChatMemberResult.Detail> recentParticipants, List<ChatMemberResult.Summary> otherParticipants, List<ChatMessage> chatMessages) {
public static ChatRoomRes.RoomWithParticipants toChatRoomResRoomWithParticipants(ChatMemberResult.Detail myInfo, List<ChatMemberResult.Detail> recentParticipants, List<ChatMemberResult.Summary> otherParticipants, List<ChatMessage> chatMessages, String objectPrefix) {
List<ChatMemberRes.MemberDetail> recentParticipantsRes = recentParticipants.stream()
.map(participant -> ChatMemberRes.MemberDetail.from(participant, false))
.map(participant -> createMemberDetail(participant, false, objectPrefix))
.toList();
List<ChatMemberRes.MemberSummary> otherParticipantsRes = otherParticipants.stream()
.map(ChatMemberRes.MemberSummary::from)
Expand All @@ -122,7 +122,7 @@ public static ChatRoomRes.RoomWithParticipants toChatRoomResRoomWithParticipants
.toList();

return ChatRoomRes.RoomWithParticipants.builder()
.myInfo(ChatMemberRes.MemberDetail.from(myInfo, true))
.myInfo(createMemberDetail(myInfo, true, objectPrefix))
.recentParticipants(recentParticipantsRes)
.otherParticipants(otherParticipantsRes)
.recentMessages(chatMessagesRes)
Expand All @@ -136,4 +136,16 @@ public static ChatRoomRes.AdminView toChatRoomResAdminView(ChatRoom chatRoom) {
private static String createBackGroundImageUrl(String chatRoomBackgroundImage, String objectPrefix) {
return (chatRoomBackgroundImage == null) ? "" : objectPrefix + chatRoomBackgroundImage;
}

private static ChatMemberRes.MemberDetail createMemberDetail(ChatMemberResult.Detail chatMember, boolean isMe, String objectPrefix) {
return new ChatMemberRes.MemberDetail(
chatMember.id(),
chatMember.userId(),
chatMember.name(),
chatMember.role(),
isMe ? chatMember.notifyEnabled() : null,
chatMember.createdAt(),
chatMember.profileImageUrl() == null ? "" : objectPrefix + chatMember.profileImageUrl()
);
}
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import kr.co.pennyway.api.apis.chat.dto.ChatRoomRes;
import kr.co.pennyway.api.apis.chat.mapper.ChatRoomMapper;
import kr.co.pennyway.api.common.storage.AwsS3Adapter;
import kr.co.pennyway.domain.context.account.service.UserService;
import kr.co.pennyway.domain.context.chat.service.ChatMemberService;
import kr.co.pennyway.domain.context.chat.service.ChatMessageService;
Expand Down Expand Up @@ -32,6 +33,8 @@ public class ChatRoomWithParticipantsSearchService {
private final ChatMemberService chatMemberService;
private final ChatMessageService chatMessageService;

private final AwsS3Adapter awsS3Adapter;

@Transactional(readOnly = true)
public ChatRoomRes.RoomWithParticipants execute(Long userId, Long chatRoomId) {
// 내 정보 조회
Expand All @@ -40,7 +43,7 @@ public ChatRoomRes.RoomWithParticipants execute(Long userId, Long chatRoomId) {

ChatMember myInfo = chatMemberService.readChatMember(userId, chatRoomId)
.orElseThrow(() -> new ChatMemberErrorException(ChatMemberErrorCode.NOT_FOUND));
ChatMemberResult.Detail myDetail = new ChatMemberResult.Detail(myInfo.getId(), me.getName(), myInfo.getRole(), myInfo.isNotifyEnabled(), userId, myInfo.getCreatedAt());
ChatMemberResult.Detail myDetail = new ChatMemberResult.Detail(myInfo.getId(), me.getName(), myInfo.getRole(), myInfo.isNotifyEnabled(), userId, myInfo.getCreatedAt(), me.getProfileImageUrl());

// 최근 메시지 조회 (15건)
List<ChatMessage> chatMessages = chatMessageService.readRecentMessages(chatRoomId, MESSAGE_LIMIT);
Expand Down Expand Up @@ -68,6 +71,6 @@ public ChatRoomRes.RoomWithParticipants execute(Long userId, Long chatRoomId) {
// 채팅방에 속한 다른 사용자 요약 정보 조회
List<ChatMemberResult.Summary> otherMemberIds = chatMemberService.readChatMemberIdsByUserIdsNotIn(chatRoomId, recentParticipantIds);

return ChatRoomMapper.toChatRoomResRoomWithParticipants(myDetail, recentParticipants, otherMemberIds, chatMessages);
return ChatRoomMapper.toChatRoomResRoomWithParticipants(myDetail, recentParticipants, otherMemberIds, chatMessages, awsS3Adapter.getObjectPrefix());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,12 @@
import kr.co.pennyway.api.apis.chat.mapper.ChatMemberMapper;
import kr.co.pennyway.api.apis.chat.mapper.ChatRoomMapper;
import kr.co.pennyway.api.apis.chat.service.ChatMemberJoinService;
import kr.co.pennyway.api.apis.chat.service.ChatMemberSearchService;
import kr.co.pennyway.api.common.storage.AwsS3Adapter;
import kr.co.pennyway.common.annotation.UseCase;
import kr.co.pennyway.domain.context.chat.dto.ChatMemberBanCommand;
import kr.co.pennyway.domain.context.chat.dto.ChatRoomAdminDelegateCommand;
import kr.co.pennyway.domain.context.chat.service.ChatMemberBanService;
import kr.co.pennyway.domain.context.chat.service.ChatMemberService;
import kr.co.pennyway.domain.context.chat.service.ChatRoomAdminDelegateService;
import kr.co.pennyway.domain.context.chat.service.ChatRoomLeaveService;
import kr.co.pennyway.domain.domains.chatroom.domain.ChatRoom;
Expand All @@ -27,11 +27,11 @@
@RequiredArgsConstructor
public class ChatMemberUseCase {
private final ChatMemberJoinService chatMemberJoinService;
private final ChatMemberSearchService chatMemberSearchService;
private final ChatRoomLeaveService chatRoomLeaveService;
private final ChatMemberBanService chatMemberBanService;
private final ChatRoomAdminDelegateService chatRoomAdminDelegateService;

private final ChatMemberService chatMemberService;
private final AwsS3Adapter awsS3Adapter;

public ChatRoomRes.Detail joinChatRoom(Long userId, Long chatRoomId, Integer password) {
Expand All @@ -41,9 +41,9 @@ public ChatRoomRes.Detail joinChatRoom(Long userId, Long chatRoomId, Integer pas
}

public List<ChatMemberRes.MemberDetail> readChatMembers(Long chatRoomId, Set<Long> chatMemberIds) {
List<ChatMemberResult.Detail> chatMembers = chatMemberSearchService.readChatMembers(chatRoomId, chatMemberIds);
List<ChatMemberResult.Detail> chatMembers = chatMemberService.readChatMembersByMemberIds(chatRoomId, chatMemberIds);

return ChatMemberMapper.toChatMemberResDetail(chatMembers);
return ChatMemberMapper.toChatMemberResDetail(chatMembers, awsS3Adapter.getObjectPrefix());
}

public void leaveChatRoom(Long userId, Long chatRoomId) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,16 @@
import kr.co.pennyway.api.apis.chat.dto.ChatRoomReq;
import kr.co.pennyway.api.apis.chat.dto.ChatRoomRes;
import kr.co.pennyway.api.apis.chat.mapper.ChatRoomMapper;
import kr.co.pennyway.api.apis.chat.service.*;
import kr.co.pennyway.api.apis.chat.service.ChatRoomPatchHelper;
import kr.co.pennyway.api.apis.chat.service.ChatRoomSaveService;
import kr.co.pennyway.api.apis.chat.service.ChatRoomSearchService;
import kr.co.pennyway.api.apis.chat.service.ChatRoomWithParticipantsSearchService;
import kr.co.pennyway.api.common.response.SliceResponseTemplate;
import kr.co.pennyway.api.common.storage.AwsS3Adapter;
import kr.co.pennyway.common.annotation.UseCase;
import kr.co.pennyway.domain.context.chat.dto.ChatRoomDeleteCommand;
import kr.co.pennyway.domain.context.chat.dto.ChatRoomToggleCommand;
import kr.co.pennyway.domain.context.chat.service.ChatMemberService;
import kr.co.pennyway.domain.context.chat.service.ChatRoomDeleteService;
import kr.co.pennyway.domain.context.chat.service.ChatRoomNotificationToggleService;
import kr.co.pennyway.domain.domains.chatroom.domain.ChatRoom;
Expand All @@ -30,7 +34,7 @@ public class ChatRoomUseCase {
private final ChatRoomDeleteService chatRoomDeleteService;
private final ChatRoomNotificationToggleService chatRoomNotificationToggleService;

private final ChatMemberSearchService chatMemberSearchService;
private final ChatMemberService chatMemberService;

private final AwsS3Adapter awsS3Adapter;

Expand Down Expand Up @@ -64,7 +68,7 @@ public ChatRoomRes.RoomWithParticipants getChatRoomWithParticipants(Long userId,
}

public ChatRoomRes.Summary readJoinedChatRoomIds(Long userId) {
Set<Long> chatRoomIds = chatMemberSearchService.readJoinedChatRoomIds(userId);
Set<Long> chatRoomIds = chatMemberService.readChatRoomIdsByUserId(userId);

return new ChatRoomRes.Summary(chatRoomIds);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -118,9 +118,9 @@ void failReadChatMembersWhenIdsIsEmpty() throws Exception {

private List<ChatMemberRes.MemberDetail> createMockMemberDetails() {
return List.of(
new ChatMemberRes.MemberDetail(1L, 2L, "User1", ChatMemberRole.MEMBER, null, LocalDateTime.now()),
new ChatMemberRes.MemberDetail(2L, 3L, "User2", ChatMemberRole.MEMBER, null, LocalDateTime.now()),
new ChatMemberRes.MemberDetail(3L, 4L, "User3", ChatMemberRole.MEMBER, null, LocalDateTime.now())
new ChatMemberRes.MemberDetail(1L, 2L, "User1", ChatMemberRole.MEMBER, null, LocalDateTime.now(), null),
new ChatMemberRes.MemberDetail(2L, 3L, "User2", ChatMemberRole.MEMBER, null, LocalDateTime.now(), null),
new ChatMemberRes.MemberDetail(3L, 4L, "User3", ChatMemberRole.MEMBER, null, LocalDateTime.now(), null)
);
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package kr.co.pennyway.api.apis.chat.service;

import kr.co.pennyway.api.apis.chat.dto.ChatRoomRes;
import kr.co.pennyway.api.common.storage.AwsS3Adapter;
import kr.co.pennyway.api.config.fixture.ChatMemberFixture;
import kr.co.pennyway.api.config.fixture.ChatRoomFixture;
import kr.co.pennyway.api.config.fixture.UserFixture;
Expand Down Expand Up @@ -51,6 +52,8 @@ public class ChatRoomWithParticipantsSearchServiceTest {
private ChatMemberService chatMemberService;
@Mock
private ChatMessageService chatMessageService;
@Mock
private AwsS3Adapter awsS3Adapter;

@BeforeEach
void setUp() {
Expand Down Expand Up @@ -99,7 +102,7 @@ public void successToRetrieveChatRoomWithParticipantsAndRecentMessages() {
public void memberSuccessToRetrieveChatRoomWithParticipantsIncludingAdmin() {
// given
ChatMember myInfo = createChatMember(userId, UserFixture.GENERAL_USER.toUser(), chatRoom, ChatMemberRole.MEMBER);
ChatMemberResult.Detail adminDetail = new ChatMemberResult.Detail(2L, "Admin", ChatMemberRole.ADMIN, true, 2L, LocalDateTime.now());
ChatMemberResult.Detail adminDetail = new ChatMemberResult.Detail(2L, "Admin", ChatMemberRole.ADMIN, true, 2L, LocalDateTime.now(), myInfo.getUser().getProfileImageUrl());
List<ChatMessage> recentMessages = createRecentMessages();
List<ChatMemberResult.Detail> recentParticipants = createRecentParticipantDetails();
List<ChatMemberResult.Summary> otherParticipants = createOtherParticipantSummaries();
Expand Down Expand Up @@ -149,8 +152,8 @@ void throwExceptionWhenChatMemberNotFound() {

private List<ChatMemberResult.Detail> createRecentParticipantDetails() {
return List.of(
new ChatMemberResult.Detail(2L, "User2", ChatMemberRole.MEMBER, true, 20L, LocalDateTime.now()),
new ChatMemberResult.Detail(3L, "User3", ChatMemberRole.MEMBER, true, 30L, LocalDateTime.now())
new ChatMemberResult.Detail(2L, "User2", ChatMemberRole.MEMBER, true, 20L, LocalDateTime.now(), null),
new ChatMemberResult.Detail(3L, "User3", ChatMemberRole.MEMBER, true, 30L, LocalDateTime.now(), null)
);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@ public record Detail(
ChatMemberRole role,
boolean notifyEnabled,
Long userId,
LocalDateTime createdAt
LocalDateTime createdAt,
String profileImageUrl
) {
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,8 @@ public Optional<ChatMemberResult.Detail> findAdminByChatRoomId(Long chatRoomId)
chatMember.role,
chatMember.notifyEnabled,
chatMember.user.id,
chatMember.createdAt
chatMember.createdAt,
chatMember.user.profileImageUrl
)
)
.from(chatMember)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ public List<ChatMemberResult.Detail> readChatMembersByIdIn(Long chatRoomId, Set<
bindings.put("notification", qChatMember.notifyEnabled);
bindings.put("userId", qChatMember.user.id);
bindings.put("createdAt", qChatMember.createdAt);
bindings.put("profileImageUrl", qChatMember.user.profileImageUrl);

return chatMemberRepository.selectList(predicate, ChatMemberResult.Detail.class, bindings, null, null);
}
Expand All @@ -97,6 +98,7 @@ public List<ChatMemberResult.Detail> readChatMembersByUserIdIn(Long chatRoomId,
bindings.put("notification", qChatMember.notifyEnabled);
bindings.put("userId", qChatMember.user.id);
bindings.put("createdAt", qChatMember.createdAt);
bindings.put("profileImageUrl", qChatMember.user.profileImageUrl);

return chatMemberRepository.selectList(predicate, ChatMemberResult.Detail.class, bindings, null, null);
}
Expand Down

0 comments on commit bf5dbd1

Please sign in to comment.