Skip to content

Commit

Permalink
[SAMBAD-334] 모임원 목록 조회와 손 흔들기 상태 조회 내 손 흔들기 상태가 다른 이슈 수정 (#162)
Browse files Browse the repository at this point in the history
  • Loading branch information
kkjsw17 authored Sep 13, 2024
1 parent 67a65fd commit 37a407d
Show file tree
Hide file tree
Showing 7 changed files with 30 additions and 19 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ public interface HandWavingRepository {

Optional<HandWaving> findById(Long handWavingId);

Optional<HandWaving> findFirstBySenderIdAndReceiverIdOrderByIdDesc(Long senderMemberId, Long receiverMemberId);
Optional<HandWaving> findFirstBySenderOrReceiverIds(List<Long> memberIds);

List<HandWavedMemberDto> findHandWavedMembersByMeetingMemberId(Long meetingMemberId);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,9 +46,10 @@ public void sendHandWaving(Long userId, Long meetingId, HandWavingRequest reques

public HandWavingStatusResponse getHandWavingStatus(Long userId, Long meetingId, Long receiverMemberId) {
MeetingMember sender = meetingMemberService.getByUserIdAndMeetingId(userId, meetingId);
Optional<HandWaving> handWaving = getHandWavingBySenderIdAndReceiverId(sender.getId(), receiverMemberId)
.or(() -> getHandWavingBySenderIdAndReceiverId(receiverMemberId, sender.getId()));
return handWaving.map(waving -> HandWavingStatusResponse.of(waving.getId(), waving.getStatus()))
List<Long> memberIds = List.of(sender.getId(), receiverMemberId);
Optional<HandWaving> handWaving = handWavingRepository.findFirstBySenderOrReceiverIds(memberIds);

return handWaving.map(HandWavingStatusResponse::from)
.orElseGet(() -> HandWavingStatusResponse.of(NOT_REQUESTED));
}

Expand Down Expand Up @@ -85,10 +86,6 @@ public List<HandWavingSummary> getHandWavingSummariesBy(List<Event> events) {
.toList();
}

private Optional<HandWaving> getHandWavingBySenderIdAndReceiverId(Long senderMemberId, Long receiverMemberId) {
return handWavingRepository.findFirstBySenderIdAndReceiverIdOrderByIdDesc(senderMemberId, receiverMemberId);
}

private HandWaving getHandWavingById(Long handWavingId) {
return handWavingRepository.findById(handWavingId)
.orElseThrow(NotFoundHandWavingException::new);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
package org.depromeet.sambad.moring.domain.meeting.handwaving.domain;

import static jakarta.persistence.EnumType.*;
import static org.depromeet.sambad.moring.domain.common.utils.UserIdResolver.*;
import static org.depromeet.sambad.moring.domain.meeting.handwaving.domain.HandWavingStatus.*;

import java.util.Objects;

import org.depromeet.sambad.moring.domain.common.domain.BaseTimeEntity;
import org.depromeet.sambad.moring.domain.event.domain.Event;
import org.depromeet.sambad.moring.domain.meeting.handwaving.presentation.exception.InvalidHandWavingReceiverException;
Expand Down Expand Up @@ -80,4 +83,8 @@ private void validateStatusIsRequested() {
throw new InvalidHandWavingStatusChangeException();
}
}

public boolean isSender() {
return Objects.equals(sender.getUser().getId(), resolveRequestedUserId());
}
}
Original file line number Diff line number Diff line change
@@ -1,15 +1,12 @@
package org.depromeet.sambad.moring.domain.meeting.handwaving.infrastructure;

import java.util.List;
import java.util.Optional;

import org.depromeet.sambad.moring.domain.meeting.handwaving.domain.HandWaving;
import org.springframework.data.jpa.repository.JpaRepository;

public interface HandWavingJpaRepository extends JpaRepository<HandWaving, Long> {

Optional<HandWaving> findFirstBySenderIdAndReceiverIdOrderByIdDesc(Long senderMemberId, Long receiverMemberId);

List<HandWaving> findAllByEventIdIn(List<Long> eventIds);

}
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,15 @@ public Optional<HandWaving> findById(Long handWavingId) {
}

@Override
public Optional<HandWaving> findFirstBySenderIdAndReceiverIdOrderByIdDesc(Long senderMemberId,
Long receiverMemberId) {
return handWavingJpaRepository.findFirstBySenderIdAndReceiverIdOrderByIdDesc(senderMemberId, receiverMemberId);
public Optional<HandWaving> findFirstBySenderOrReceiverIds(List<Long> memberIds) {
return Optional.ofNullable(query.selectFrom(handWaving)
.where(
handWaving.sender.id.in(memberIds),
handWaving.receiver.id.in(memberIds),
handWaving.status.in(HandWavingStatus.ACCEPTED, HandWavingStatus.REQUESTED)
)
.orderBy(handWaving.id.desc())
.fetchFirst());
}

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

import static io.swagger.v3.oas.annotations.media.Schema.RequiredMode.*;

import org.depromeet.sambad.moring.domain.meeting.handwaving.domain.HandWaving;
import org.depromeet.sambad.moring.domain.meeting.handwaving.domain.HandWavingStatus;

import io.swagger.v3.oas.annotations.media.Schema;
Expand All @@ -12,13 +13,16 @@ public record HandWavingStatusResponse(
Long HandWavingId,

@Schema(description = "손 흔들기 상태", example = "REQUESTED", requiredMode = REQUIRED)
HandWavingStatus status
HandWavingStatus status,

@Schema(description = "요청 유저가 Sender인지에 대한 여부", example = "true", requiredMode = REQUIRED)
boolean isSender
) {
public static HandWavingStatusResponse of(HandWavingStatus status) {
return new HandWavingStatusResponse(null, status);
return new HandWavingStatusResponse(null, status, false);
}

public static HandWavingStatusResponse of(Long handWavingId, HandWavingStatus status) {
return new HandWavingStatusResponse(handWavingId, status);
public static HandWavingStatusResponse from(HandWaving handWaving) {
return new HandWavingStatusResponse(handWaving.getId(), handWaving.getStatus(), handWaving.isSender());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,8 @@ public static MeetingMemberListResponse from(

List<MeetingMember> mergedMembers = mergeMeetingMembers(
List.of(me),
sortedHandWavingRequestedMembers,
sortedHandWavingAcceptedMembers,
sortedHandWavingRequestedMembers,
sortedNotHandWavedMembers
);

Expand Down

0 comments on commit 37a407d

Please sign in to comment.