Skip to content

Commit

Permalink
Merge pull request #179 from Leets-Official/mod/#178-모임-수정-및-모임-상세-조회-수정
Browse files Browse the repository at this point in the history
[mod] 모임 수정 및 모임 상세 조회 수정
  • Loading branch information
ehs208 authored Feb 5, 2025
2 parents e3e09fc + 2b6e1de commit 8fbff9e
Show file tree
Hide file tree
Showing 16 changed files with 364 additions and 114 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,35 +17,42 @@
@NoArgsConstructor
public class ChatRoomResponseDto {
private List<ChatMessageResponseDto> chats;
private String meetingName;
private List<ChatMemberResponseDto> participants;
private ChatRoomDeliveryNoticeDto deliveryNotice;
private ChatRoomOfflineNoticeDto offlineNotice;
private int pageNumber;
private boolean isLast;

@Builder
private ChatRoomResponseDto(Slice<ChatMessageResponseDto> chats, List<ChatMemberResponseDto> participants,
private ChatRoomResponseDto(Slice<ChatMessageResponseDto> chats, String meetingName,
List<ChatMemberResponseDto> participants,
ChatRoomDeliveryNoticeDto deliveryNotice, ChatRoomOfflineNoticeDto offlineNotice) {
this.chats = chats.getContent();
this.meetingName = meetingName;
this.participants = participants;
this.deliveryNotice = deliveryNotice;
this.offlineNotice = offlineNotice;
this.pageNumber = chats.getNumber() + 1;
this.isLast = chats.isLast();
}

public static ChatRoomResponseDto ofWithDelivery(List<ChatMemberResponseDto> participants, Slice<ChatMessageResponseDto> chatPage, ChatRoomDeliveryNoticeDto deliveryNotice) {
public static ChatRoomResponseDto ofWithDelivery(String meetingName, List<ChatMemberResponseDto> participants,
Slice<ChatMessageResponseDto> chatPage, ChatRoomDeliveryNoticeDto deliveryNotice) {
return ChatRoomResponseDto.builder()
.chats(chatPage)
.meetingName(meetingName)
.participants(participants)
.offlineNotice(null)
.deliveryNotice(deliveryNotice)
.build();
}

public static ChatRoomResponseDto ofWithOffline(List<ChatMemberResponseDto> participants, Slice<ChatMessageResponseDto> chatPage, ChatRoomOfflineNoticeDto offlineNotice) {
public static ChatRoomResponseDto ofWithOffline(String meetingName, List<ChatMemberResponseDto> participants,
Slice<ChatMessageResponseDto> chatPage, ChatRoomOfflineNoticeDto offlineNotice) {
return ChatRoomResponseDto.builder()
.chats(chatPage)
.meetingName(meetingName)
.participants(participants)
.offlineNotice(offlineNotice)
.deliveryNotice(null)
Expand All @@ -62,7 +69,8 @@ public static class ChatMemberResponseDto {
private Boolean isMine;

@Builder
private ChatMemberResponseDto(Long memberId, String nickname, Mbti mbti, String profileImageUrl, ParticipantRole role, Boolean isMine) {
private ChatMemberResponseDto(Long memberId, String nickname, Mbti mbti, String profileImageUrl,
ParticipantRole role, Boolean isMine) {
this.memberId = memberId;
this.nickname = nickname;
this.mbti = mbti;
Expand All @@ -76,7 +84,8 @@ public static ChatMemberResponseDto of(MeetingParticipant participant, Boolean i
.memberId(participant.getMember().getMemberId())
.nickname(participant.getMember().getNickname())
.mbti(participant.getMember().getMbti())
.profileImageUrl(participant.getMember().getProfileImage() != null ? participant.getMember().getProfileImage().getImageUrl() : null)
.profileImageUrl(participant.getMember().getProfileImage() != null ?
participant.getMember().getProfileImage().getImageUrl() : null)
.role(participant.getRole())
.isMine(isMine)
.build();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ public void joinChatRoom(Long meetingId, UserDetails userDetails) {
ChatMessageResponseDto enterMessage = ChatMessageResponseDto.of(
participant.getMemberId(),
chatRoom.getId(),
participant.getNickname()+"님이 입장하셨습니다.",
participant.getNickname() + "님이 입장하셨습니다.",
LocalDateTime.now());

List<MeetingParticipant> participants = meetingParticipantRepository.findByMeeting(chatRoom.getMeeting());
Expand All @@ -89,21 +89,22 @@ public void joinChatRoom(Long meetingId, UserDetails userDetails) {
.map(member -> ChatMemberListDto.of(member.getId(), member.getMember().getNickname()))
.collect(Collectors.toList());


//실시간 유저 입장 메세지
messagingTemplate.convertAndSend("/topic/chat."+chatRoom.getId(), enterMessage);
messagingTemplate.convertAndSend("/topic/chat." + chatRoom.getId(), enterMessage);
//실시간 유저 업데이트 메세지
messagingTemplate.convertAndSend("/topic/chat." + chatRoom.getId() + ".members", participantDTOs);
}

//채팅방 입장(지난 로딩 위치는 클라이언트에서 조절)
public ChatRoomResponseDto enterChatRoomAndLoadMessage(Long chatRoomId, UserDetails userDetails, Pageable pageable) {
public ChatRoomResponseDto enterChatRoomAndLoadMessage(Long chatRoomId, UserDetails userDetails,
Pageable pageable) {
Member mine = securityUtils.getMember(userDetails);
ChatRoom chatRoom = chatRoomRepository.findByIdAndDeletedStatus(chatRoomId, DeletedStatus.NOT_DELETED)
.orElseThrow(() -> new CommonException(ErrorCode.CHATROOM_NOT_FOUND));
Meeting meeting = chatRoom.getMeeting();

List<ChatRoomResponseDto.ChatMemberResponseDto> participants = Optional.ofNullable(meetingParticipantRepository.findByMeeting(meeting))
List<ChatRoomResponseDto.ChatMemberResponseDto> participants = Optional.ofNullable(
meetingParticipantRepository.findByMeeting(meeting))
.orElseThrow(() -> new CommonException(ErrorCode.USER_NOT_FOUND))
.stream()
.map(meetingParticipant -> {
Expand All @@ -116,18 +117,20 @@ public ChatRoomResponseDto enterChatRoomAndLoadMessage(Long chatRoomId, UserDeta

//채팅방 공지 처리
if (meeting instanceof OfflineMeeting) {
OfflineMeeting offlineMeeting = (OfflineMeeting) meeting;
ChatRoomOfflineNoticeDto notice = ChatRoomOfflineNoticeDto.of(offlineMeeting.getMeetingPlace(), offlineMeeting.getMeetingDate());
OfflineMeeting offlineMeeting = (OfflineMeeting)meeting;
ChatRoomOfflineNoticeDto notice = ChatRoomOfflineNoticeDto.of(offlineMeeting.getMeetingPlace(),
offlineMeeting.getMeetingDate());

return ChatRoomResponseDto.ofWithOffline(participants, chatList, notice);
return ChatRoomResponseDto.ofWithOffline(offlineMeeting.getMeetingName(), participants, chatList, notice);
}

if (meeting instanceof DeliveryMeeting) {
DeliveryMeeting deliveryMeeting = (DeliveryMeeting) meeting;
DeliveryMeeting deliveryMeeting = (DeliveryMeeting)meeting;
ChatRoomDeliveryNoticeDto notice = ChatRoomDeliveryNoticeDto
.of(deliveryMeeting.getStoreName(), deliveryMeeting.getAccountNumber(), deliveryMeeting.getBankName().toString(), deliveryMeeting.getPickupLocation());
.of(deliveryMeeting.getStoreName(), deliveryMeeting.getAccountNumber(),
deliveryMeeting.getBankName().toString(), deliveryMeeting.getPickupLocation());

return ChatRoomResponseDto.ofWithDelivery(participants, chatList, notice);
return ChatRoomResponseDto.ofWithDelivery(deliveryMeeting.getMeetingName(), participants, chatList, notice);
}

throw new CommonException(ErrorCode.INVALID_MEETING_TYPE);
Expand All @@ -142,7 +145,7 @@ public Void leaveChatRoom(Long chatRoomId, UserDetails userDetails) {
MemberChatRoom target = memberChatRoomRepository.findByMember_MemberId(member.getMemberId())
.orElseThrow(() -> new CommonException(ErrorCode.MEMBER_CHATROOM_NOT_FOUND));

if(chatRoom.getOwnerId().equals(member.getMemberId())) {
if (chatRoom.getOwnerId().equals(member.getMemberId())) {
chatRoom.deleteChatRoom();
chatRoom.getParticipant().forEach(memberChatRoomRepository::delete);
chatService.deleteChat(chatRoom);
Expand All @@ -153,13 +156,12 @@ public Void leaveChatRoom(Long chatRoomId, UserDetails userDetails) {
ChatMessageResponseDto leaveMessage = ChatMessageResponseDto.of(
member.getMemberId(),
chatRoom.getId(),
member.getNickname()+"님(호스트)이 퇴장하셨습니다. 모임이 종료되었습니다.",
member.getNickname() + "님(호스트)이 퇴장하셨습니다. 모임이 종료되었습니다.",
LocalDateTime.now());

//실시간 호스트 퇴장 메세지
messagingTemplate.convertAndSend("/topic/chat."+chatRoom.getId(), leaveMessage);
}
else {
messagingTemplate.convertAndSend("/topic/chat." + chatRoom.getId(), leaveMessage);
} else {
chatRoom.removeParticipant(target);
memberChatRoomRepository.delete(target);
eventPublisher.publishEvent(new ParticipantChatRoomLeftEvent(chatRoom.getMeeting().getId(), userDetails));
Expand All @@ -172,7 +174,7 @@ public void sendLeveMessage(ChatRoom chatRoom, Member member) {
ChatMessageResponseDto leaveMessage = ChatMessageResponseDto.of(
member.getMemberId(),
chatRoom.getId(),
member.getNickname()+"님이 퇴장하셨습니다.",
member.getNickname() + "님이 퇴장하셨습니다.",
LocalDateTime.now());

List<MeetingParticipant> participants = meetingParticipantRepository.findByMeeting(chatRoom.getMeeting());
Expand All @@ -183,7 +185,7 @@ public void sendLeveMessage(ChatRoom chatRoom, Member member) {
.collect(Collectors.toList());

//실시간 유저 퇴장 메세지
messagingTemplate.convertAndSend("/topic/chat."+chatRoom.getId(), leaveMessage);
messagingTemplate.convertAndSend("/topic/chat." + chatRoom.getId(), leaveMessage);
//실시간 유저 업데이트 메세지
messagingTemplate.convertAndSend("/topic/chat." + chatRoom.getId() + ".members", participantDTOs);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
import org.springframework.web.bind.annotation.PatchMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
Expand Down Expand Up @@ -226,8 +226,11 @@ public ResponseEntity<GlobalResponseDto<Void>> deleteMeeting(
.body(GlobalResponseDto.success());
}

@PatchMapping("/{meetingId}/offline")
@PutMapping("/{meetingId}/offline")
@Operation(summary = "오프라인 모임 수정", description = "오프라인 모임을 수정합니다.")
@io.swagger.v3.oas.annotations.parameters.RequestBody(required = true, content = @Content(
mediaType = MediaType.MULTIPART_FORM_DATA_VALUE,
schema = @Schema(implementation = UpdateOfflineMeetingRequestDto.class)))
public ResponseEntity<GlobalResponseDto<Void>> updateOfflineMeeting(
@PathVariable Long meetingId,
@ModelAttribute @Valid UpdateOfflineMeetingRequestDto updateOfflineMeetingRequestDto,
Expand All @@ -238,11 +241,14 @@ public ResponseEntity<GlobalResponseDto<Void>> updateOfflineMeeting(
.body(GlobalResponseDto.success());
}

@PatchMapping("/{meetingId}/delivery")
@PutMapping("/{meetingId}/delivery")
@Operation(summary = "배달 모임 수정", description = "배달 모임을 수정합니다.")
@io.swagger.v3.oas.annotations.parameters.RequestBody(required = true, content = @Content(
mediaType = MediaType.MULTIPART_FORM_DATA_VALUE,
schema = @Schema(implementation = UpdateDeliveryMeetingRequestDto.class)))
public ResponseEntity<GlobalResponseDto<Void>> updateDeliveryMeeting(
@PathVariable Long meetingId,
@RequestBody @Valid UpdateDeliveryMeetingRequestDto UpdateDeliveryMeetingRequestDto,
@ModelAttribute @Valid UpdateDeliveryMeetingRequestDto UpdateDeliveryMeetingRequestDto,
@AuthenticationPrincipal UserDetails userDetails
) {
meetingService.updateDeliveryMeeting(meetingId, UpdateDeliveryMeetingRequestDto, userDetails);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,9 +49,10 @@ public void updateDeliveryMeeting(
String pickupLocation,
String accountNumber,
BankName bankName,
MeetingBackgroundType BackgroundType,
Image backgroundImage
) {
super.updateMeeting(meetingName, description, backgroundImage);
super.updateMeeting(meetingName, description, backgroundImage, BackgroundType);
this.foodCategory = foodCategory;
this.storeName = storeName;
this.pickupLocation = pickupLocation;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,10 @@ public abstract class Meeting {
@Enumerated(EnumType.STRING)
private MeetingStatus meetingStatus;

@Enumerated(EnumType.STRING)
@Column(nullable = false)
private MeetingBackgroundType backgroundType;

@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "background_image_id")
private Image backgroundImage;
Expand All @@ -80,10 +84,12 @@ public abstract class Meeting {
private LocalDateTime updatedAt;

// 모임 수정
public void updateMeeting(String meetingName, String meetingDescription, Image backgroundImage) {
public void updateMeeting(String meetingName, String meetingDescription, Image backgroundImage,
MeetingBackgroundType backgroundImageType) {
this.meetingName = meetingName;
this.meetingDescription = meetingDescription;
this.backgroundImage = backgroundImage;
this.backgroundType = backgroundImageType;
}

// 모임 삭제
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.example.eatmate.app.domain.meeting.domain;

import lombok.Getter;
import lombok.RequiredArgsConstructor;

@Getter
@RequiredArgsConstructor
public enum MeetingBackgroundType {
DEFAULT_IMAGE_1("기본 이미지 1",
"https://eatmatebucket.s3.ap-northeast-2.amazonaws.com/a2c4c1b796de95f92ed6b1c8430075a2.jpg"),
DEFAULT_IMAGE_2("기본 이미지 2",
"https://eatmatebucket.s3.ap-northeast-2.amazonaws.com/ee36549fbadb7d88712f2b18cdc72eb1.jpg"),
CUSTOM("사용자 지정", null);

private final String description;
private final String imageUrl;
}
Original file line number Diff line number Diff line change
Expand Up @@ -36,10 +36,10 @@ public void updateOfflineMeeting(
String meetingPlace,
LocalDateTime meetingDate,
OfflineMeetingCategory offlineMeetingCategory,
MeetingBackgroundType backgroundType,
Image backgroundImage) {

super.updateMeeting(meetingName, description, backgroundImage);

super.updateMeeting(meetingName, description, backgroundImage, backgroundType);
this.meetingPlace = meetingPlace;
this.meetingDate = meetingDate;
this.offlineMeetingCategory = offlineMeetingCategory;
Expand Down
Loading

0 comments on commit 8fbff9e

Please sign in to comment.