From fe7fc783869b379448531c33a19ccd9f1b0e5110 Mon Sep 17 00:00:00 2001 From: dlswns2480 Date: Wed, 10 Jan 2024 15:05:33 +0900 Subject: [PATCH 01/14] =?UTF-8?q?feat=20:=20owner=20=EC=97=94=ED=8B=B0?= =?UTF-8?q?=ED=8B=B0=EC=97=90=20=EC=95=8C=EB=A6=BC=20=ED=99=9C=EC=84=B1?= =?UTF-8?q?=ED=99=94=20=EC=97=AC=EB=B6=80=20=ED=95=84=EB=93=9C=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/prgrms/catchtable/owner/domain/Owner.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/com/prgrms/catchtable/owner/domain/Owner.java b/src/main/java/com/prgrms/catchtable/owner/domain/Owner.java index 8e748ae3..d5a06b1a 100644 --- a/src/main/java/com/prgrms/catchtable/owner/domain/Owner.java +++ b/src/main/java/com/prgrms/catchtable/owner/domain/Owner.java @@ -61,6 +61,9 @@ public class Owner extends BaseEntity implements UserDetails { @Column(name = "date_birth") private LocalDate dateBirth; + @Column(name = "notification_activated") + private boolean notification_activated; + @OneToOne(fetch = LAZY) @JoinColumn(name = "shop_id", foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT)) private Shop shop; @@ -75,6 +78,7 @@ public Owner(String name, String email, String password, String phoneNumber, Gen this.gender = gender; this.dateBirth = dateBirth; this.role = Role.OWNER; + this.notification_activated = true; } @Override From a98ec849aa66dbca6848da3f71801f62210b6b23 Mon Sep 17 00:00:00 2001 From: dlswns2480 Date: Wed, 10 Jan 2024 15:05:52 +0900 Subject: [PATCH 02/14] =?UTF-8?q?feat=20:=20=EC=95=8C=EB=A6=BC=EB=B3=B4?= =?UTF-8?q?=EB=82=B4=EB=8A=94=20=EC=9D=B4=EB=B2=A4=ED=8A=B8=20=EB=A6=AC?= =?UTF-8?q?=EC=8A=A4=EB=84=88=EC=97=90=20=EC=A1=B0=EA=B1=B4=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/notification/NotificationEvent.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/prgrms/catchtable/common/notification/NotificationEvent.java b/src/main/java/com/prgrms/catchtable/common/notification/NotificationEvent.java index eba2c6e1..5ff260cf 100644 --- a/src/main/java/com/prgrms/catchtable/common/notification/NotificationEvent.java +++ b/src/main/java/com/prgrms/catchtable/common/notification/NotificationEvent.java @@ -2,9 +2,11 @@ import static org.springframework.transaction.event.TransactionPhase.AFTER_COMMIT; +import com.prgrms.catchtable.member.domain.Member; import com.prgrms.catchtable.notification.dto.request.SendMessageToMemberRequest; import com.prgrms.catchtable.notification.dto.request.SendMessageToOwnerRequest; import com.prgrms.catchtable.notification.service.NotificationService; +import com.prgrms.catchtable.owner.domain.Owner; import lombok.RequiredArgsConstructor; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Component; @@ -19,12 +21,18 @@ public class NotificationEvent { @Async @TransactionalEventListener(phase = AFTER_COMMIT) // 호출한쪽의 트랜잭션이 커밋 된 후 이벤트 발생 public void sendMessage(SendMessageToMemberRequest request) { - notificationService.sendMessageAndSave(request.member(), request.content()); + Member member = request.member(); + if(member.isNotification_activated()){ + notificationService.sendMessageAndSave(member, request.content()); + } } @Async @TransactionalEventListener(phase = AFTER_COMMIT) // 호출한쪽의 트랜잭션이 커밋 된 후 이벤트 발생 public void sendMessage(SendMessageToOwnerRequest request) { - notificationService.sendMessageAndSave(request.owner(), request.content()); + Owner owner = request.owner(); + if(owner.isNotification_activated()){ + notificationService.sendMessageAndSave(request.owner(), request.content()); + } } } From 60b6bdb8d8c031da57d95f4dd1a9e3005d50df35 Mon Sep 17 00:00:00 2001 From: dlswns2480 Date: Wed, 10 Jan 2024 15:06:07 +0900 Subject: [PATCH 03/14] =?UTF-8?q?feat=20:=20=EC=98=88=EC=95=BD=20=EB=93=B1?= =?UTF-8?q?=EB=A1=9D=20=EC=8B=9C=20=EC=95=8C=EB=A6=BC=20=EC=A0=84=EC=86=A1?= =?UTF-8?q?=20=EB=A1=9C=EC=A7=81=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/MemberReservationService.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/main/java/com/prgrms/catchtable/reservation/service/MemberReservationService.java b/src/main/java/com/prgrms/catchtable/reservation/service/MemberReservationService.java index ee07abdc..18b42aab 100644 --- a/src/main/java/com/prgrms/catchtable/reservation/service/MemberReservationService.java +++ b/src/main/java/com/prgrms/catchtable/reservation/service/MemberReservationService.java @@ -4,6 +4,7 @@ import static com.prgrms.catchtable.common.exception.ErrorCode.ALREADY_PREOCCUPIED_RESERVATION_TIME; import static com.prgrms.catchtable.common.exception.ErrorCode.NOT_EXIST_RESERVATION; import static com.prgrms.catchtable.common.exception.ErrorCode.NOT_EXIST_TIME; +import static com.prgrms.catchtable.common.notification.NotificationContent.*; import static com.prgrms.catchtable.reservation.domain.ReservationStatus.CANCELLED; import static com.prgrms.catchtable.reservation.domain.ReservationStatus.COMPLETED; import static com.prgrms.catchtable.reservation.dto.mapper.ReservationMapper.toCancelReservationResponse; @@ -13,7 +14,9 @@ import com.prgrms.catchtable.common.exception.custom.BadRequestCustomException; import com.prgrms.catchtable.common.exception.custom.NotFoundCustomException; +import com.prgrms.catchtable.common.notification.NotificationContent; import com.prgrms.catchtable.member.domain.Member; +import com.prgrms.catchtable.notification.dto.request.SendMessageToMemberRequest; import com.prgrms.catchtable.reservation.domain.Reservation; import com.prgrms.catchtable.reservation.domain.ReservationTime; import com.prgrms.catchtable.reservation.dto.mapper.ReservationMapper; @@ -29,6 +32,7 @@ import com.prgrms.catchtable.shop.domain.Shop; import java.util.List; import lombok.RequiredArgsConstructor; +import org.springframework.context.ApplicationEventPublisher; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -40,6 +44,7 @@ public class MemberReservationService { private final ReservationRepository reservationRepository; private final ReservationAsync reservationAsync; private final ReservationLockRepository reservationLockRepository; + private final ApplicationEventPublisher publisher; @Transactional public CreateReservationResponse preOccupyReservation(Member member, @@ -91,6 +96,13 @@ public CreateReservationResponse registerReservation(Member member, .member(member) .build(); Reservation savedReservation = reservationRepository.save(reservation); + + SendMessageToMemberRequest sendMessage = new SendMessageToMemberRequest( + member, + RESERVATION_COMPLETED + ); + + publisher.publishEvent(sendMessage); return toCreateReservationResponse(savedReservation); } From 67ccba1b96bc447780d04c26766e20bc35801d52 Mon Sep 17 00:00:00 2001 From: dlswns2480 Date: Wed, 10 Jan 2024 17:48:41 +0900 Subject: [PATCH 04/14] =?UTF-8?q?feat=20:=20shop=EC=9D=84=20=ED=86=B5?= =?UTF-8?q?=ED=95=B4=20=EC=A0=90=EC=A3=BC=20=EC=A1=B0=ED=9A=8C=20=EC=BF=BC?= =?UTF-8?q?=EB=A6=AC=20=EC=B6=94=EA=B0=80=20=EB=B0=8F=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../owner/repository/OwnerRepository.java | 3 ++ .../owner/repository/OwnerRepositoryTest.java | 38 +++++++++++++++++++ 2 files changed, 41 insertions(+) create mode 100644 src/test/java/com/prgrms/catchtable/owner/repository/OwnerRepositoryTest.java diff --git a/src/main/java/com/prgrms/catchtable/owner/repository/OwnerRepository.java b/src/main/java/com/prgrms/catchtable/owner/repository/OwnerRepository.java index 5e783c0e..26443879 100644 --- a/src/main/java/com/prgrms/catchtable/owner/repository/OwnerRepository.java +++ b/src/main/java/com/prgrms/catchtable/owner/repository/OwnerRepository.java @@ -1,6 +1,7 @@ package com.prgrms.catchtable.owner.repository; import com.prgrms.catchtable.owner.domain.Owner; +import com.prgrms.catchtable.shop.domain.Shop; import java.util.Optional; import org.springframework.data.jpa.repository.JpaRepository; @@ -10,4 +11,6 @@ public interface OwnerRepository extends JpaRepository { Optional findOwnerByEmail(String email); + Optional findOwnerByShop(Shop shop); + } diff --git a/src/test/java/com/prgrms/catchtable/owner/repository/OwnerRepositoryTest.java b/src/test/java/com/prgrms/catchtable/owner/repository/OwnerRepositoryTest.java new file mode 100644 index 00000000..fd62b110 --- /dev/null +++ b/src/test/java/com/prgrms/catchtable/owner/repository/OwnerRepositoryTest.java @@ -0,0 +1,38 @@ +package com.prgrms.catchtable.owner.repository; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase.Replace.NONE; + +import com.prgrms.catchtable.owner.domain.Owner; +import com.prgrms.catchtable.owner.fixture.OwnerFixture; +import com.prgrms.catchtable.shop.domain.Shop; +import com.prgrms.catchtable.shop.fixture.ShopFixture; +import com.prgrms.catchtable.shop.repository.ShopRepository; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase; +import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; + +@DataJpaTest +@AutoConfigureTestDatabase(replace = NONE) +class OwnerRepositoryTest { + @Autowired + private OwnerRepository ownerRepository; + @Autowired + private ShopRepository shopRepository; + + @Test + @DisplayName("매장을 통해 점주를 찾을 수 있다") + void findByShop(){ + Shop shop = ShopFixture.shop(); + Shop savedShop = shopRepository.save(shop); + + Owner owner = OwnerFixture.getOwner(savedShop); + Owner savedOwner = ownerRepository.save(owner); + + Owner findOwner = ownerRepository.findOwnerByShop(savedShop).orElseThrow(); + + assertThat(findOwner).isEqualTo(savedOwner); + } +} \ No newline at end of file From edf5848d7afa16d40365e6473fadffc65c6b0243 Mon Sep 17 00:00:00 2001 From: dlswns2480 Date: Wed, 10 Jan 2024 17:49:30 +0900 Subject: [PATCH 05/14] =?UTF-8?q?feat=20:=20NotificationContent=20Function?= =?UTF-8?q?=ED=99=9C=EC=9A=A9=ED=95=B4=20=EC=95=8C=EB=A6=BC=20=EB=A9=94?= =?UTF-8?q?=EC=84=B8=EC=A7=80=20=EB=A6=AC=ED=84=B4=ED=95=98=EB=8A=94=20?= =?UTF-8?q?=EA=B2=83=EC=9C=BC=EB=A1=9C=20=EC=88=98=EC=A0=95=20(=EC=8B=9C?= =?UTF-8?q?=EA=B0=84=20=EB=B0=9B=EC=95=84=EC=84=9C=20=ED=95=B4=EB=8B=B9=20?= =?UTF-8?q?=EC=8B=9C=EA=B0=84=EB=8C=80=20=EA=B4=80=EB=A0=A8=EB=90=9C=20?= =?UTF-8?q?=EB=A9=94=EC=84=B8=EC=A7=80=20=EC=83=9D=EC=84=B1)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../notification/NotificationContent.java | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/prgrms/catchtable/common/notification/NotificationContent.java b/src/main/java/com/prgrms/catchtable/common/notification/NotificationContent.java index 54b616eb..0f612ade 100644 --- a/src/main/java/com/prgrms/catchtable/common/notification/NotificationContent.java +++ b/src/main/java/com/prgrms/catchtable/common/notification/NotificationContent.java @@ -1,20 +1,23 @@ package com.prgrms.catchtable.common.notification; +import java.util.function.BiFunction; +import java.util.function.Function; import lombok.Getter; import lombok.RequiredArgsConstructor; @RequiredArgsConstructor @Getter public enum NotificationContent { - RESERVATION_COMPLETED("예약이 완료되었습니다"), - RESERVATION_ONE_HOUR_LEFT("예약 시간 1시간 전입니다."), - RESERVATION_TIME_TO_ENTER("예약시간이 되었습니다"), - WAITING_REGISTER_COMPLETED("웨이팅 등록이 완료되었습니다"), - WAITING_RANK_THIRD("웨이팅 순서가 3번째가 되었습니다"), - WAITING_TIME_TO_ENTER("웨이팅이 끝났습니다. 입장 부탁드립니다."), - WAITING_CANCELLED_AUTOMATICALLY("웨이팅이 자동으로 취소되었습니다."); + RESERVATION_COMPLETED(time -> time.concat(" 시간의 예약이 완료 되었습니다.")), + RESERVATION_CANCELLED(time -> time.concat(" 시간의 예약이 취소 되었습니다")), + RESERVATION_ONE_HOUR_LEFT(time -> time.concat(" 시간 예약까지 한시간 남았습니다")), + RESERVATION_TIME_OUT(time -> "예약 시간이 되었습니다. 입장해주세요."); - private final String message; + private final Function expression; + + public String apply(String time){ + return expression.apply(time); + } } From 32da933e664dc82d6a06eb9b6de9b6c94425e6ac Mon Sep 17 00:00:00 2001 From: dlswns2480 Date: Wed, 10 Jan 2024 17:50:12 +0900 Subject: [PATCH 06/14] =?UTF-8?q?feat=20:=20=EC=95=8C=EB=A6=BC=20=EB=82=B4?= =?UTF-8?q?=EC=9A=A9=20String=20=EC=9D=B8=EC=9E=90=20=EB=B0=9B=EB=8A=94=20?= =?UTF-8?q?=EA=B2=83=EC=9C=BC=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dto/request/SendMessageToMemberRequest.java | 2 +- .../dto/request/SendMessageToOwnerRequest.java | 2 +- .../notification/service/NotificationService.java | 8 ++++---- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/prgrms/catchtable/notification/dto/request/SendMessageToMemberRequest.java b/src/main/java/com/prgrms/catchtable/notification/dto/request/SendMessageToMemberRequest.java index 4e9fb6f7..71c977cd 100644 --- a/src/main/java/com/prgrms/catchtable/notification/dto/request/SendMessageToMemberRequest.java +++ b/src/main/java/com/prgrms/catchtable/notification/dto/request/SendMessageToMemberRequest.java @@ -6,6 +6,6 @@ @Builder public record SendMessageToMemberRequest(Member member, - NotificationContent content) { + String content) { } diff --git a/src/main/java/com/prgrms/catchtable/notification/dto/request/SendMessageToOwnerRequest.java b/src/main/java/com/prgrms/catchtable/notification/dto/request/SendMessageToOwnerRequest.java index ae80ddef..9e0cefba 100644 --- a/src/main/java/com/prgrms/catchtable/notification/dto/request/SendMessageToOwnerRequest.java +++ b/src/main/java/com/prgrms/catchtable/notification/dto/request/SendMessageToOwnerRequest.java @@ -6,6 +6,6 @@ @Builder public record SendMessageToOwnerRequest(Owner owner, - NotificationContent content) { + String content) { } diff --git a/src/main/java/com/prgrms/catchtable/notification/service/NotificationService.java b/src/main/java/com/prgrms/catchtable/notification/service/NotificationService.java index 5e298cd1..f6601caa 100644 --- a/src/main/java/com/prgrms/catchtable/notification/service/NotificationService.java +++ b/src/main/java/com/prgrms/catchtable/notification/service/NotificationService.java @@ -38,11 +38,11 @@ public class NotificationService { private final OwnerRepository ownerRepository; // 추후 삭제 예정 private JSONObject jsonObject; - public void sendMessageAndSave(Member member, NotificationContent content) { + public void sendMessageAndSave(Member member, String content) { String url = "https://slack.com/api/chat.postMessage"; // slack 메세지를 보내도록 요청하는 Slack API String email = member.getEmail(); - String message = content.getMessage(); + String message = content; String slackId = getSlackIdByEmail(email); // 이메일을 통해 사용자의 슬랙 고유 ID 추출 requestToSendMessage(slackId, message); // 알림 요청 보내는 함수 호출 @@ -56,11 +56,11 @@ public void sendMessageAndSave(Member member, NotificationContent content) { } - public void sendMessageAndSave(Owner owner, NotificationContent content) { + public void sendMessageAndSave(Owner owner, String content) { String url = "https://slack.com/api/chat.postMessage"; // slack 메세지를 보내도록 요청하는 Slack API String email = owner.getEmail(); - String message = content.getMessage(); + String message = content; String slackId = getSlackIdByEmail(email); requestToSendMessage(slackId, message); From 07b872063cdffc48c453e5150bd97628264e0b18 Mon Sep 17 00:00:00 2001 From: dlswns2480 Date: Wed, 10 Jan 2024 17:50:34 +0900 Subject: [PATCH 07/14] =?UTF-8?q?feat=20:=20=EC=95=8C=EB=A6=BC=20=EB=B3=B4?= =?UTF-8?q?=EB=82=B4=EB=8A=94=20=EB=A1=9C=EC=A7=81=20=EC=B6=94=EA=B0=80(?= =?UTF-8?q?=EC=98=88=EC=95=BD=20=EB=93=B1=EB=A1=9D,=20=EC=B7=A8=EC=86=8C)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/MemberReservationService.java | 35 +++++++++++++++---- 1 file changed, 29 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/prgrms/catchtable/reservation/service/MemberReservationService.java b/src/main/java/com/prgrms/catchtable/reservation/service/MemberReservationService.java index 18b42aab..4eb3dd53 100644 --- a/src/main/java/com/prgrms/catchtable/reservation/service/MemberReservationService.java +++ b/src/main/java/com/prgrms/catchtable/reservation/service/MemberReservationService.java @@ -2,9 +2,11 @@ import static com.prgrms.catchtable.common.exception.ErrorCode.ALREADY_OCCUPIED_RESERVATION_TIME; import static com.prgrms.catchtable.common.exception.ErrorCode.ALREADY_PREOCCUPIED_RESERVATION_TIME; +import static com.prgrms.catchtable.common.exception.ErrorCode.NOT_EXIST_OWNER; import static com.prgrms.catchtable.common.exception.ErrorCode.NOT_EXIST_RESERVATION; import static com.prgrms.catchtable.common.exception.ErrorCode.NOT_EXIST_TIME; -import static com.prgrms.catchtable.common.notification.NotificationContent.*; +import static com.prgrms.catchtable.common.notification.NotificationContent.RESERVATION_CANCELLED; +import static com.prgrms.catchtable.common.notification.NotificationContent.RESERVATION_COMPLETED; import static com.prgrms.catchtable.reservation.domain.ReservationStatus.CANCELLED; import static com.prgrms.catchtable.reservation.domain.ReservationStatus.COMPLETED; import static com.prgrms.catchtable.reservation.dto.mapper.ReservationMapper.toCancelReservationResponse; @@ -14,9 +16,11 @@ import com.prgrms.catchtable.common.exception.custom.BadRequestCustomException; import com.prgrms.catchtable.common.exception.custom.NotFoundCustomException; -import com.prgrms.catchtable.common.notification.NotificationContent; import com.prgrms.catchtable.member.domain.Member; import com.prgrms.catchtable.notification.dto.request.SendMessageToMemberRequest; +import com.prgrms.catchtable.notification.dto.request.SendMessageToOwnerRequest; +import com.prgrms.catchtable.owner.domain.Owner; +import com.prgrms.catchtable.owner.repository.OwnerRepository; import com.prgrms.catchtable.reservation.domain.Reservation; import com.prgrms.catchtable.reservation.domain.ReservationTime; import com.prgrms.catchtable.reservation.dto.mapper.ReservationMapper; @@ -44,6 +48,7 @@ public class MemberReservationService { private final ReservationRepository reservationRepository; private final ReservationAsync reservationAsync; private final ReservationLockRepository reservationLockRepository; + private final OwnerRepository ownerRepository; private final ApplicationEventPublisher publisher; @Transactional @@ -97,12 +102,22 @@ public CreateReservationResponse registerReservation(Member member, .build(); Reservation savedReservation = reservationRepository.save(reservation); - SendMessageToMemberRequest sendMessage = new SendMessageToMemberRequest( + Owner owner = ownerRepository.findOwnerByShop(reservationTime.getShop()) + .orElseThrow(() -> new NotFoundCustomException(NOT_EXIST_OWNER)); + + SendMessageToMemberRequest sendMessageToMember = new SendMessageToMemberRequest( member, - RESERVATION_COMPLETED - ); + RESERVATION_COMPLETED.apply(reservationTime.getTime().toString()) + ); // 회원에게 보낼 해당 시간대의 예약 완료 알림 생성 + + SendMessageToOwnerRequest sendMessageToOwner = new SendMessageToOwnerRequest( + owner, + RESERVATION_COMPLETED.apply(reservationTime.getTime().toString()) + ); // 점주에게 보낼 보낼 해당 시간대의 예약 완료 알림 생성 + + publisher.publishEvent(sendMessageToMember); // 회원에게 예약등록 알림 발송 + publisher.publishEvent(sendMessageToOwner); // 점주에게 예약등록 알림 발송 - publisher.publishEvent(sendMessage); return toCreateReservationResponse(savedReservation); } @@ -152,6 +167,14 @@ public CancelReservationResponse cancelReservation(Long reservationId) { reservationTime.setOccupiedFalse(); + Owner owner = ownerRepository.findOwnerByShop(reservationTime.getShop()) + .orElseThrow(() -> new NotFoundCustomException(NOT_EXIST_OWNER)); + + SendMessageToOwnerRequest sendMessageToOwner = new SendMessageToOwnerRequest(owner, + RESERVATION_CANCELLED.apply(reservationTime.getTime().toString())); // 해당 시간의 예약 취소 메세지 dto 생성 + + publisher.publishEvent(sendMessageToOwner); // 취소한 예약의 매장 점주에게 예약 취소 알림 발송 + return toCancelReservationResponse(reservation); } From 4f64b6adce7a574546a0bec057fa1fd08b545091 Mon Sep 17 00:00:00 2001 From: dlswns2480 Date: Wed, 10 Jan 2024 17:51:07 +0900 Subject: [PATCH 08/14] =?UTF-8?q?style=20:=20=EC=BD=94=EB=93=9C=20?= =?UTF-8?q?=ED=8F=AC=EB=A7=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../catchtable/common/notification/NotificationContent.java | 3 +-- .../catchtable/common/notification/NotificationEvent.java | 4 ++-- .../notification/dto/request/SendMessageToMemberRequest.java | 1 - .../notification/dto/request/SendMessageToOwnerRequest.java | 1 - .../catchtable/notification/service/NotificationService.java | 1 - .../reservation/service/MemberReservationService.java | 3 ++- .../catchtable/owner/repository/OwnerRepositoryTest.java | 3 ++- .../controller/MemberReservationControllerTest.java | 1 - 8 files changed, 7 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/prgrms/catchtable/common/notification/NotificationContent.java b/src/main/java/com/prgrms/catchtable/common/notification/NotificationContent.java index 0f612ade..6d63e0ec 100644 --- a/src/main/java/com/prgrms/catchtable/common/notification/NotificationContent.java +++ b/src/main/java/com/prgrms/catchtable/common/notification/NotificationContent.java @@ -1,6 +1,5 @@ package com.prgrms.catchtable.common.notification; -import java.util.function.BiFunction; import java.util.function.Function; import lombok.Getter; import lombok.RequiredArgsConstructor; @@ -16,7 +15,7 @@ public enum NotificationContent { private final Function expression; - public String apply(String time){ + public String apply(String time) { return expression.apply(time); } diff --git a/src/main/java/com/prgrms/catchtable/common/notification/NotificationEvent.java b/src/main/java/com/prgrms/catchtable/common/notification/NotificationEvent.java index 5ff260cf..e8254a04 100644 --- a/src/main/java/com/prgrms/catchtable/common/notification/NotificationEvent.java +++ b/src/main/java/com/prgrms/catchtable/common/notification/NotificationEvent.java @@ -22,7 +22,7 @@ public class NotificationEvent { @TransactionalEventListener(phase = AFTER_COMMIT) // 호출한쪽의 트랜잭션이 커밋 된 후 이벤트 발생 public void sendMessage(SendMessageToMemberRequest request) { Member member = request.member(); - if(member.isNotification_activated()){ + if (member.isNotification_activated()) { notificationService.sendMessageAndSave(member, request.content()); } } @@ -31,7 +31,7 @@ public void sendMessage(SendMessageToMemberRequest request) { @TransactionalEventListener(phase = AFTER_COMMIT) // 호출한쪽의 트랜잭션이 커밋 된 후 이벤트 발생 public void sendMessage(SendMessageToOwnerRequest request) { Owner owner = request.owner(); - if(owner.isNotification_activated()){ + if (owner.isNotification_activated()) { notificationService.sendMessageAndSave(request.owner(), request.content()); } } diff --git a/src/main/java/com/prgrms/catchtable/notification/dto/request/SendMessageToMemberRequest.java b/src/main/java/com/prgrms/catchtable/notification/dto/request/SendMessageToMemberRequest.java index 71c977cd..53fc5072 100644 --- a/src/main/java/com/prgrms/catchtable/notification/dto/request/SendMessageToMemberRequest.java +++ b/src/main/java/com/prgrms/catchtable/notification/dto/request/SendMessageToMemberRequest.java @@ -1,6 +1,5 @@ package com.prgrms.catchtable.notification.dto.request; -import com.prgrms.catchtable.common.notification.NotificationContent; import com.prgrms.catchtable.member.domain.Member; import lombok.Builder; diff --git a/src/main/java/com/prgrms/catchtable/notification/dto/request/SendMessageToOwnerRequest.java b/src/main/java/com/prgrms/catchtable/notification/dto/request/SendMessageToOwnerRequest.java index 9e0cefba..e6e0e42e 100644 --- a/src/main/java/com/prgrms/catchtable/notification/dto/request/SendMessageToOwnerRequest.java +++ b/src/main/java/com/prgrms/catchtable/notification/dto/request/SendMessageToOwnerRequest.java @@ -1,6 +1,5 @@ package com.prgrms.catchtable.notification.dto.request; -import com.prgrms.catchtable.common.notification.NotificationContent; import com.prgrms.catchtable.owner.domain.Owner; import lombok.Builder; diff --git a/src/main/java/com/prgrms/catchtable/notification/service/NotificationService.java b/src/main/java/com/prgrms/catchtable/notification/service/NotificationService.java index f6601caa..2d5a8bb3 100644 --- a/src/main/java/com/prgrms/catchtable/notification/service/NotificationService.java +++ b/src/main/java/com/prgrms/catchtable/notification/service/NotificationService.java @@ -5,7 +5,6 @@ import static org.springframework.http.HttpMethod.POST; import com.prgrms.catchtable.common.exception.custom.BadRequestCustomException; -import com.prgrms.catchtable.common.notification.NotificationContent; import com.prgrms.catchtable.member.domain.Member; import com.prgrms.catchtable.member.repository.MemberRepository; import com.prgrms.catchtable.notification.domain.NotificationMember; diff --git a/src/main/java/com/prgrms/catchtable/reservation/service/MemberReservationService.java b/src/main/java/com/prgrms/catchtable/reservation/service/MemberReservationService.java index 4eb3dd53..15cc3a37 100644 --- a/src/main/java/com/prgrms/catchtable/reservation/service/MemberReservationService.java +++ b/src/main/java/com/prgrms/catchtable/reservation/service/MemberReservationService.java @@ -171,7 +171,8 @@ public CancelReservationResponse cancelReservation(Long reservationId) { .orElseThrow(() -> new NotFoundCustomException(NOT_EXIST_OWNER)); SendMessageToOwnerRequest sendMessageToOwner = new SendMessageToOwnerRequest(owner, - RESERVATION_CANCELLED.apply(reservationTime.getTime().toString())); // 해당 시간의 예약 취소 메세지 dto 생성 + RESERVATION_CANCELLED.apply( + reservationTime.getTime().toString())); // 해당 시간의 예약 취소 메세지 dto 생성 publisher.publishEvent(sendMessageToOwner); // 취소한 예약의 매장 점주에게 예약 취소 알림 발송 diff --git a/src/test/java/com/prgrms/catchtable/owner/repository/OwnerRepositoryTest.java b/src/test/java/com/prgrms/catchtable/owner/repository/OwnerRepositoryTest.java index fd62b110..d201f730 100644 --- a/src/test/java/com/prgrms/catchtable/owner/repository/OwnerRepositoryTest.java +++ b/src/test/java/com/prgrms/catchtable/owner/repository/OwnerRepositoryTest.java @@ -17,6 +17,7 @@ @DataJpaTest @AutoConfigureTestDatabase(replace = NONE) class OwnerRepositoryTest { + @Autowired private OwnerRepository ownerRepository; @Autowired @@ -24,7 +25,7 @@ class OwnerRepositoryTest { @Test @DisplayName("매장을 통해 점주를 찾을 수 있다") - void findByShop(){ + void findByShop() { Shop shop = ShopFixture.shop(); Shop savedShop = shopRepository.save(shop); diff --git a/src/test/java/com/prgrms/catchtable/reservation/controller/MemberReservationControllerTest.java b/src/test/java/com/prgrms/catchtable/reservation/controller/MemberReservationControllerTest.java index e9f0e0a2..9e7916cb 100644 --- a/src/test/java/com/prgrms/catchtable/reservation/controller/MemberReservationControllerTest.java +++ b/src/test/java/com/prgrms/catchtable/reservation/controller/MemberReservationControllerTest.java @@ -54,7 +54,6 @@ void setUp() { Shop shop = ShopData.getShop(); Shop savedShop = shopRepository.save(shop); - Member savedMember = memberRepository.save(member); ReservationTime reservationTime = ReservationFixture.getReservationTimeNotPreOccupied(); From 6ced9aa62dba5ed161aa96ae0c56cb16b8f53aea Mon Sep 17 00:00:00 2001 From: dlswns2480 Date: Wed, 10 Jan 2024 19:21:49 +0900 Subject: [PATCH 09/14] =?UTF-8?q?fix=20:=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20?= =?UTF-8?q?=EC=98=A4=EB=A5=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/MemberReservationService.java | 2 +- .../owner/repository/OwnerRepositoryTest.java | 3 ++- .../MemberReservationControllerTest.java | 15 +++++++++++++++ .../service/MemberReservationServiceTest.java | 18 +++++++++++++++--- 4 files changed, 33 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/prgrms/catchtable/reservation/service/MemberReservationService.java b/src/main/java/com/prgrms/catchtable/reservation/service/MemberReservationService.java index 15cc3a37..1ba62f3c 100644 --- a/src/main/java/com/prgrms/catchtable/reservation/service/MemberReservationService.java +++ b/src/main/java/com/prgrms/catchtable/reservation/service/MemberReservationService.java @@ -62,7 +62,7 @@ public CreateReservationResponse preOccupyReservation(Member member, Thread.currentThread().interrupt(); } } - ReservationTime reservationTime = reservationTimeRepository.findById(reservationTimeId) + ReservationTime reservationTime = reservationTimeRepository.findByIdWithShop(reservationTimeId) .orElseThrow(() -> { reservationLockRepository.unlock(reservationTimeId); return new NotFoundCustomException(NOT_EXIST_TIME); diff --git a/src/test/java/com/prgrms/catchtable/owner/repository/OwnerRepositoryTest.java b/src/test/java/com/prgrms/catchtable/owner/repository/OwnerRepositoryTest.java index d201f730..6aae1a1f 100644 --- a/src/test/java/com/prgrms/catchtable/owner/repository/OwnerRepositoryTest.java +++ b/src/test/java/com/prgrms/catchtable/owner/repository/OwnerRepositoryTest.java @@ -29,7 +29,8 @@ void findByShop() { Shop shop = ShopFixture.shop(); Shop savedShop = shopRepository.save(shop); - Owner owner = OwnerFixture.getOwner(savedShop); + Owner owner = OwnerFixture.getOwner("injun", "injun2480"); + owner.insertShop(savedShop); Owner savedOwner = ownerRepository.save(owner); Owner findOwner = ownerRepository.findOwnerByShop(savedShop).orElseThrow(); diff --git a/src/test/java/com/prgrms/catchtable/reservation/controller/MemberReservationControllerTest.java b/src/test/java/com/prgrms/catchtable/reservation/controller/MemberReservationControllerTest.java index 9e7916cb..72a0d97d 100644 --- a/src/test/java/com/prgrms/catchtable/reservation/controller/MemberReservationControllerTest.java +++ b/src/test/java/com/prgrms/catchtable/reservation/controller/MemberReservationControllerTest.java @@ -18,6 +18,9 @@ import com.prgrms.catchtable.member.MemberFixture; import com.prgrms.catchtable.member.domain.Member; import com.prgrms.catchtable.member.repository.MemberRepository; +import com.prgrms.catchtable.owner.domain.Owner; +import com.prgrms.catchtable.owner.fixture.OwnerFixture; +import com.prgrms.catchtable.owner.repository.OwnerRepository; import com.prgrms.catchtable.reservation.domain.Reservation; import com.prgrms.catchtable.reservation.domain.ReservationTime; import com.prgrms.catchtable.reservation.dto.request.CreateReservationRequest; @@ -28,6 +31,7 @@ import com.prgrms.catchtable.shop.domain.Shop; import com.prgrms.catchtable.shop.repository.ShopRepository; import java.util.List; +import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.DisplayName; @@ -47,6 +51,8 @@ class MemberReservationControllerTest extends BaseIntegrationTest { private ReservationRepository reservationRepository; @Autowired private MemberRepository memberRepository; + @Autowired + private OwnerRepository ownerRepository; private Member member = MemberFixture.member("dlswns661035@gmail.com"); @BeforeEach @@ -54,6 +60,10 @@ void setUp() { Shop shop = ShopData.getShop(); Shop savedShop = shopRepository.save(shop); + Owner owner = OwnerFixture.getOwner("injun", "injun2480"); + owner.insertShop(savedShop); + ownerRepository.save(owner); + Member savedMember = memberRepository.save(member); ReservationTime reservationTime = ReservationFixture.getReservationTimeNotPreOccupied(); @@ -65,6 +75,11 @@ void setUp() { httpHeaders.add("RefreshToken", token.getRefreshToken()); } + @AfterEach + void tearDown(){ + shopRepository.deleteAll(); + } + @Test @DisplayName("예약 선점 api 호출에 성공한다.") void preOccupyReservation() throws Exception { diff --git a/src/test/java/com/prgrms/catchtable/reservation/service/MemberReservationServiceTest.java b/src/test/java/com/prgrms/catchtable/reservation/service/MemberReservationServiceTest.java index cf3ead87..3eb25ac9 100644 --- a/src/test/java/com/prgrms/catchtable/reservation/service/MemberReservationServiceTest.java +++ b/src/test/java/com/prgrms/catchtable/reservation/service/MemberReservationServiceTest.java @@ -15,6 +15,9 @@ import com.prgrms.catchtable.common.exception.custom.NotFoundCustomException; import com.prgrms.catchtable.member.MemberFixture; import com.prgrms.catchtable.member.domain.Member; +import com.prgrms.catchtable.owner.domain.Owner; +import com.prgrms.catchtable.owner.fixture.OwnerFixture; +import com.prgrms.catchtable.owner.repository.OwnerRepository; import com.prgrms.catchtable.reservation.domain.Reservation; import com.prgrms.catchtable.reservation.domain.ReservationTime; import com.prgrms.catchtable.reservation.dto.request.CreateReservationRequest; @@ -36,6 +39,7 @@ import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.context.ApplicationEventPublisher; import org.springframework.test.util.ReflectionTestUtils; @ExtendWith(MockitoExtension.class) @@ -49,6 +53,10 @@ class MemberReservationServiceTest { private ReservationAsync reservationAsync; @Mock private ReservationTimeRepository reservationTimeRepository; + @Mock + private OwnerRepository ownerRepository; + @Mock + private ApplicationEventPublisher publisher; @InjectMocks private MemberReservationService memberReservationService; private final String email = "dlswns661035@gmail.com"; @@ -63,7 +71,7 @@ void validateReservation() { CreateReservationRequest request = ReservationFixture.getCreateReservationRequestWithId( reservationTime.getId()); - when(reservationTimeRepository.findById(1L)).thenReturn(Optional.of(reservationTime)); + when(reservationTimeRepository.findByIdWithShop(1L)).thenReturn(Optional.of(reservationTime)); when(reservationLockRepository.lock(1L)).thenReturn(TRUE); when(reservationLockRepository.unlock(1L)).thenReturn(TRUE); doNothing().when(reservationAsync).setPreOcuppied(reservationTime); @@ -91,7 +99,7 @@ void alreadyPreOccupied() { CreateReservationRequest request = ReservationFixture.getCreateReservationRequestWithId( reservationTime.getId()); - when(reservationTimeRepository.findById(1L)).thenReturn(Optional.of(reservationTime)); + when(reservationTimeRepository.findByIdWithShop(1L)).thenReturn(Optional.of(reservationTime)); when(reservationLockRepository.lock(1L)).thenReturn(TRUE); //when @@ -106,6 +114,7 @@ void alreadyPreOccupied() { void registerReservation() { Member member = MemberFixture.member(email); ReservationTime reservationTime = ReservationFixture.getReservationTimePreOccupied(); + Owner owner = OwnerFixture.getOwner("dlswns661035@gmail.com", "injun2480"); CreateReservationRequest request = ReservationFixture.getCreateReservationRequest(); Reservation reservation = Reservation.builder() .status(COMPLETED) @@ -117,6 +126,8 @@ void registerReservation() { when(reservationTimeRepository.findByIdWithShop(any(Long.class))).thenReturn( Optional.of(reservationTime)); when(reservationRepository.save(any(Reservation.class))).thenReturn(reservation); + when(ownerRepository.findOwnerByShop(any(Shop.class))).thenReturn(Optional.of(owner)); +// doNothing().when(publisher.publishEvent(any(Object.class))); CreateReservationResponse response = memberReservationService.registerReservation(member, request); @@ -265,10 +276,11 @@ void cancelReservation() { ModifyReservationRequest request = ReservationFixture.getModifyReservationRequest(1L); Reservation reservation = ReservationFixture.getReservation(reservationTime); ReflectionTestUtils.setField(reservation, "id", 1L); + Owner owner = OwnerFixture.getOwner("dlswns661035@gmail.com", "injun2480"); when(reservationRepository.findByIdWithReservationTimeAndShop(1L)).thenReturn( Optional.of(reservation)); - + when(ownerRepository.findOwnerByShop(any(Shop.class))).thenReturn(Optional.of(owner)); //when CancelReservationResponse response = memberReservationService.cancelReservation( reservation.getId()); From 2c3982e820a65ff61553a4f5174c82c249abbbdb Mon Sep 17 00:00:00 2001 From: dlswns2480 Date: Thu, 11 Jan 2024 14:36:16 +0900 Subject: [PATCH 10/14] =?UTF-8?q?feat=20:=20=EC=98=88=EC=95=BD=20=EC=B7=A8?= =?UTF-8?q?=EC=86=8C=20api=EC=97=90=20=EB=A9=A4=EB=B2=84=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../reservation/controller/MemberReservationController.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/prgrms/catchtable/reservation/controller/MemberReservationController.java b/src/main/java/com/prgrms/catchtable/reservation/controller/MemberReservationController.java index 3cbaa1a9..de49cee6 100644 --- a/src/main/java/com/prgrms/catchtable/reservation/controller/MemberReservationController.java +++ b/src/main/java/com/prgrms/catchtable/reservation/controller/MemberReservationController.java @@ -52,8 +52,9 @@ public ResponseEntity modifyReservation( @DeleteMapping("/{reservationId}") public ResponseEntity cancelReservation( + @LogIn Member member, @PathVariable("reservationId") Long reservationId) { - return ResponseEntity.ok(memberReservationService.cancelReservation(reservationId)); + return ResponseEntity.ok(memberReservationService.cancelReservation(member, reservationId)); } @GetMapping From 161e00eb5e2455e3ed647754a132eb5c9be9def4 Mon Sep 17 00:00:00 2001 From: dlswns2480 Date: Thu, 11 Jan 2024 14:36:52 +0900 Subject: [PATCH 11/14] =?UTF-8?q?feat=20:=20=EC=95=8C=EB=A6=BC=20=EB=B3=B4?= =?UTF-8?q?=EB=82=B4=EB=8A=94=20=EB=A1=9C=EC=A7=81=20=EB=A9=94=EC=86=8C?= =?UTF-8?q?=EB=93=9C=EB=A1=9C=20=EC=B6=94=EC=B6=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/MemberReservationService.java | 36 +++++++++---------- 1 file changed, 17 insertions(+), 19 deletions(-) diff --git a/src/main/java/com/prgrms/catchtable/reservation/service/MemberReservationService.java b/src/main/java/com/prgrms/catchtable/reservation/service/MemberReservationService.java index 1ba62f3c..c3d19e9a 100644 --- a/src/main/java/com/prgrms/catchtable/reservation/service/MemberReservationService.java +++ b/src/main/java/com/prgrms/catchtable/reservation/service/MemberReservationService.java @@ -16,6 +16,7 @@ import com.prgrms.catchtable.common.exception.custom.BadRequestCustomException; import com.prgrms.catchtable.common.exception.custom.NotFoundCustomException; +import com.prgrms.catchtable.common.notification.NotificationContent; import com.prgrms.catchtable.member.domain.Member; import com.prgrms.catchtable.notification.dto.request.SendMessageToMemberRequest; import com.prgrms.catchtable.notification.dto.request.SendMessageToOwnerRequest; @@ -102,21 +103,7 @@ public CreateReservationResponse registerReservation(Member member, .build(); Reservation savedReservation = reservationRepository.save(reservation); - Owner owner = ownerRepository.findOwnerByShop(reservationTime.getShop()) - .orElseThrow(() -> new NotFoundCustomException(NOT_EXIST_OWNER)); - - SendMessageToMemberRequest sendMessageToMember = new SendMessageToMemberRequest( - member, - RESERVATION_COMPLETED.apply(reservationTime.getTime().toString()) - ); // 회원에게 보낼 해당 시간대의 예약 완료 알림 생성 - - SendMessageToOwnerRequest sendMessageToOwner = new SendMessageToOwnerRequest( - owner, - RESERVATION_COMPLETED.apply(reservationTime.getTime().toString()) - ); // 점주에게 보낼 보낼 해당 시간대의 예약 완료 알림 생성 - - publisher.publishEvent(sendMessageToMember); // 회원에게 예약등록 알림 발송 - publisher.publishEvent(sendMessageToOwner); // 점주에게 예약등록 알림 발송 + sendMessageToMemberAndOwner(member, reservationTime, RESERVATION_COMPLETED); //점주와 회원에게 알림 발송 return toCreateReservationResponse(savedReservation); } @@ -156,7 +143,7 @@ public ModifyReservationResponse modifyReservation(Long reservavtionId, } @Transactional - public CancelReservationResponse cancelReservation(Long reservationId) { + public CancelReservationResponse cancelReservation(Member member, Long reservationId) { Reservation reservation = reservationRepository.findByIdWithReservationTimeAndShop( reservationId) .orElseThrow(() -> new NotFoundCustomException(NOT_EXIST_RESERVATION)); @@ -167,16 +154,27 @@ public CancelReservationResponse cancelReservation(Long reservationId) { reservationTime.setOccupiedFalse(); + sendMessageToMemberAndOwner(member, reservationTime, RESERVATION_CANCELLED); + + return toCancelReservationResponse(reservation); + } + + private void sendMessageToMemberAndOwner(Member member, ReservationTime reservationTime, NotificationContent content) { + Owner owner = ownerRepository.findOwnerByShop(reservationTime.getShop()) .orElseThrow(() -> new NotFoundCustomException(NOT_EXIST_OWNER)); + SendMessageToMemberRequest sendMessageToMember = new SendMessageToMemberRequest( + member, + content.apply(reservationTime.getTime().toString()) + ); // 회원에게 보낼 해당 시간대의 예약 완료 알림 생성 + SendMessageToOwnerRequest sendMessageToOwner = new SendMessageToOwnerRequest(owner, - RESERVATION_CANCELLED.apply( + content.apply( reservationTime.getTime().toString())); // 해당 시간의 예약 취소 메세지 dto 생성 + publisher.publishEvent(sendMessageToMember); publisher.publishEvent(sendMessageToOwner); // 취소한 예약의 매장 점주에게 예약 취소 알림 발송 - - return toCancelReservationResponse(reservation); } private void validateIsPreOccupied(ReservationTime reservationTime) { From 8efb45ff0e149471df3a1aa21c44b9e5dbc0c78d Mon Sep 17 00:00:00 2001 From: dlswns2480 Date: Thu, 11 Jan 2024 14:37:05 +0900 Subject: [PATCH 12/14] =?UTF-8?q?feat=20:=20=EC=95=8C=EB=A6=BC=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20=EC=88=98=EC=A0=95=EC=97=90=20=EB=94=B0=EB=A5=B8=20?= =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/MemberReservationControllerTest.java | 1 + .../reservation/service/MemberReservationServiceTest.java | 5 ++++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/test/java/com/prgrms/catchtable/reservation/controller/MemberReservationControllerTest.java b/src/test/java/com/prgrms/catchtable/reservation/controller/MemberReservationControllerTest.java index 72a0d97d..2f5e9014 100644 --- a/src/test/java/com/prgrms/catchtable/reservation/controller/MemberReservationControllerTest.java +++ b/src/test/java/com/prgrms/catchtable/reservation/controller/MemberReservationControllerTest.java @@ -207,6 +207,7 @@ void cancelReservation() throws Exception { Reservation savedReservation = reservationRepository.save(reservation); mockMvc.perform(delete("/reservations/{reservationId}", savedReservation.getId()) + .headers(httpHeaders) .contentType(APPLICATION_JSON)) .andExpect(status().isOk()) .andExpect(jsonPath("$.status").value(CANCELLED.toString())); diff --git a/src/test/java/com/prgrms/catchtable/reservation/service/MemberReservationServiceTest.java b/src/test/java/com/prgrms/catchtable/reservation/service/MemberReservationServiceTest.java index 3eb25ac9..6128a207 100644 --- a/src/test/java/com/prgrms/catchtable/reservation/service/MemberReservationServiceTest.java +++ b/src/test/java/com/prgrms/catchtable/reservation/service/MemberReservationServiceTest.java @@ -272,6 +272,7 @@ void modifyReservationOccupied() { @DisplayName("예약을 취소할 수 있다") void cancelReservation() { //given + Member member = MemberFixture.member("dlswns661035@gmail.com"); ReservationTime reservationTime = ReservationFixture.getReservationTimeOccupied(); ModifyReservationRequest request = ReservationFixture.getModifyReservationRequest(1L); Reservation reservation = ReservationFixture.getReservation(reservationTime); @@ -283,6 +284,7 @@ void cancelReservation() { when(ownerRepository.findOwnerByShop(any(Shop.class))).thenReturn(Optional.of(owner)); //when CancelReservationResponse response = memberReservationService.cancelReservation( + member, reservation.getId()); //then @@ -297,11 +299,12 @@ void cancelReservation() { @Test @DisplayName("존재하지 않는 예약에 대한 삭제 요청 시 예외가 발생한다") void cancelReservationNotExist() { + Member member = MemberFixture.member("asd@gmail.com"); when(reservationRepository.findByIdWithReservationTimeAndShop(1L)).thenReturn( Optional.empty()); assertThrows(NotFoundCustomException.class, - () -> memberReservationService.cancelReservation(1L)); + () -> memberReservationService.cancelReservation(member, 1L)); } } \ No newline at end of file From 7a0abb161a3059ecfe7dd8a4336f20dc5f6903e2 Mon Sep 17 00:00:00 2001 From: dlswns2480 Date: Thu, 11 Jan 2024 14:37:24 +0900 Subject: [PATCH 13/14] =?UTF-8?q?style=20:=20=EC=BD=94=EB=93=9C=20?= =?UTF-8?q?=ED=8F=AC=EB=A7=B7=ED=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../reservation/service/MemberReservationService.java | 9 ++++++--- .../controller/MemberReservationControllerTest.java | 2 +- .../service/MemberReservationServiceTest.java | 6 ++++-- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/prgrms/catchtable/reservation/service/MemberReservationService.java b/src/main/java/com/prgrms/catchtable/reservation/service/MemberReservationService.java index c3d19e9a..ef39649b 100644 --- a/src/main/java/com/prgrms/catchtable/reservation/service/MemberReservationService.java +++ b/src/main/java/com/prgrms/catchtable/reservation/service/MemberReservationService.java @@ -63,7 +63,8 @@ public CreateReservationResponse preOccupyReservation(Member member, Thread.currentThread().interrupt(); } } - ReservationTime reservationTime = reservationTimeRepository.findByIdWithShop(reservationTimeId) + ReservationTime reservationTime = reservationTimeRepository.findByIdWithShop( + reservationTimeId) .orElseThrow(() -> { reservationLockRepository.unlock(reservationTimeId); return new NotFoundCustomException(NOT_EXIST_TIME); @@ -103,7 +104,8 @@ public CreateReservationResponse registerReservation(Member member, .build(); Reservation savedReservation = reservationRepository.save(reservation); - sendMessageToMemberAndOwner(member, reservationTime, RESERVATION_COMPLETED); //점주와 회원에게 알림 발송 + sendMessageToMemberAndOwner(member, reservationTime, + RESERVATION_COMPLETED); //점주와 회원에게 알림 발송 return toCreateReservationResponse(savedReservation); } @@ -159,7 +161,8 @@ public CancelReservationResponse cancelReservation(Member member, Long reservati return toCancelReservationResponse(reservation); } - private void sendMessageToMemberAndOwner(Member member, ReservationTime reservationTime, NotificationContent content) { + private void sendMessageToMemberAndOwner(Member member, ReservationTime reservationTime, + NotificationContent content) { Owner owner = ownerRepository.findOwnerByShop(reservationTime.getShop()) .orElseThrow(() -> new NotFoundCustomException(NOT_EXIST_OWNER)); diff --git a/src/test/java/com/prgrms/catchtable/reservation/controller/MemberReservationControllerTest.java b/src/test/java/com/prgrms/catchtable/reservation/controller/MemberReservationControllerTest.java index 2f5e9014..a4f288f2 100644 --- a/src/test/java/com/prgrms/catchtable/reservation/controller/MemberReservationControllerTest.java +++ b/src/test/java/com/prgrms/catchtable/reservation/controller/MemberReservationControllerTest.java @@ -76,7 +76,7 @@ void setUp() { } @AfterEach - void tearDown(){ + void tearDown() { shopRepository.deleteAll(); } diff --git a/src/test/java/com/prgrms/catchtable/reservation/service/MemberReservationServiceTest.java b/src/test/java/com/prgrms/catchtable/reservation/service/MemberReservationServiceTest.java index 6128a207..438fe518 100644 --- a/src/test/java/com/prgrms/catchtable/reservation/service/MemberReservationServiceTest.java +++ b/src/test/java/com/prgrms/catchtable/reservation/service/MemberReservationServiceTest.java @@ -71,7 +71,8 @@ void validateReservation() { CreateReservationRequest request = ReservationFixture.getCreateReservationRequestWithId( reservationTime.getId()); - when(reservationTimeRepository.findByIdWithShop(1L)).thenReturn(Optional.of(reservationTime)); + when(reservationTimeRepository.findByIdWithShop(1L)).thenReturn( + Optional.of(reservationTime)); when(reservationLockRepository.lock(1L)).thenReturn(TRUE); when(reservationLockRepository.unlock(1L)).thenReturn(TRUE); doNothing().when(reservationAsync).setPreOcuppied(reservationTime); @@ -99,7 +100,8 @@ void alreadyPreOccupied() { CreateReservationRequest request = ReservationFixture.getCreateReservationRequestWithId( reservationTime.getId()); - when(reservationTimeRepository.findByIdWithShop(1L)).thenReturn(Optional.of(reservationTime)); + when(reservationTimeRepository.findByIdWithShop(1L)).thenReturn( + Optional.of(reservationTime)); when(reservationLockRepository.lock(1L)).thenReturn(TRUE); //when From ae82272745f9219fcdc6c2fcde9c7350b3fecd98 Mon Sep 17 00:00:00 2001 From: dlswns2480 Date: Thu, 11 Jan 2024 14:39:47 +0900 Subject: [PATCH 14/14] =?UTF-8?q?enum=20=ED=91=9C=ED=98=84=EC=8B=9D=20?= =?UTF-8?q?=EB=A9=94=EC=86=8C=EB=93=9C=EB=AA=85=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../catchtable/common/notification/NotificationContent.java | 2 +- .../reservation/service/MemberReservationService.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/prgrms/catchtable/common/notification/NotificationContent.java b/src/main/java/com/prgrms/catchtable/common/notification/NotificationContent.java index 6d63e0ec..63c028b8 100644 --- a/src/main/java/com/prgrms/catchtable/common/notification/NotificationContent.java +++ b/src/main/java/com/prgrms/catchtable/common/notification/NotificationContent.java @@ -15,7 +15,7 @@ public enum NotificationContent { private final Function expression; - public String apply(String time) { + public String getMessage(String time) { return expression.apply(time); } diff --git a/src/main/java/com/prgrms/catchtable/reservation/service/MemberReservationService.java b/src/main/java/com/prgrms/catchtable/reservation/service/MemberReservationService.java index ef39649b..f27b601e 100644 --- a/src/main/java/com/prgrms/catchtable/reservation/service/MemberReservationService.java +++ b/src/main/java/com/prgrms/catchtable/reservation/service/MemberReservationService.java @@ -169,11 +169,11 @@ private void sendMessageToMemberAndOwner(Member member, ReservationTime reservat SendMessageToMemberRequest sendMessageToMember = new SendMessageToMemberRequest( member, - content.apply(reservationTime.getTime().toString()) + content.getMessage(reservationTime.getTime().toString()) ); // 회원에게 보낼 해당 시간대의 예약 완료 알림 생성 SendMessageToOwnerRequest sendMessageToOwner = new SendMessageToOwnerRequest(owner, - content.apply( + content.getMessage( reservationTime.getTime().toString())); // 해당 시간의 예약 취소 메세지 dto 생성 publisher.publishEvent(sendMessageToMember);