From 54e772f8a7b17dfb2d2c8639c5d0ed14a96ed7e1 Mon Sep 17 00:00:00 2001 From: onpyeong Date: Thu, 12 Oct 2023 14:41:54 +0900 Subject: [PATCH 1/2] =?UTF-8?q?feat:=20=EB=B6=81=ED=86=A0=ED=81=AC=20?= =?UTF-8?q?=EC=83=81=EC=84=B8=EC=A1=B0=ED=9A=8C=20=EC=8B=9C=20=EB=B6=81?= =?UTF-8?q?=ED=86=A0=ED=81=AC=20=EC=8B=A0=EC=B2=AD=EC=97=AC=EB=B6=80?= =?UTF-8?q?=EC=99=80=20=EC=83=81=ED=83=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sophy/sophy/controller/BooktalkController.java | 3 ++- .../booktalk/response/BooktalkDetailResponseDto.java | 11 ++++++++--- .../java/org/sophy/sophy/service/BooktalkService.java | 7 +++++-- 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/sophy/sophy/controller/BooktalkController.java b/src/main/java/org/sophy/sophy/controller/BooktalkController.java index 9d523b31..31273a0a 100644 --- a/src/main/java/org/sophy/sophy/controller/BooktalkController.java +++ b/src/main/java/org/sophy/sophy/controller/BooktalkController.java @@ -39,9 +39,10 @@ public class BooktalkController { @ResponseStatus(HttpStatus.OK) @Operation(summary = "북토크 상세 조회") public ApiResponseDto getBooktalkDetail( + @Parameter(hidden = true) @AuthenticationPrincipal User user, @Parameter(example = "1") @PathVariable("booktalkId") Long booktalkId) { return ApiResponseDto.success(SuccessStatus.GET_BOOKTALK_DETAIL_SUCCESS, - booktalkService.getBooktalkDetail(booktalkId)); + booktalkService.getBooktalkDetail(user.getUsername(), booktalkId)); } @GetMapping("/search") diff --git a/src/main/java/org/sophy/sophy/domain/dto/booktalk/response/BooktalkDetailResponseDto.java b/src/main/java/org/sophy/sophy/domain/dto/booktalk/response/BooktalkDetailResponseDto.java index 269d9ba1..7f5ff61c 100644 --- a/src/main/java/org/sophy/sophy/domain/dto/booktalk/response/BooktalkDetailResponseDto.java +++ b/src/main/java/org/sophy/sophy/domain/dto/booktalk/response/BooktalkDetailResponseDto.java @@ -6,6 +6,7 @@ import lombok.Getter; import org.sophy.sophy.domain.Booktalk; import org.sophy.sophy.domain.enumerate.BookCategory; +import org.sophy.sophy.domain.enumerate.BooktalkStatus; import org.sophy.sophy.domain.enumerate.PreliminaryInfo; @Getter @@ -16,7 +17,7 @@ public class BooktalkDetailResponseDto { private String title; private String Author; private BookCategory bookCategory; - private String book; //TODO 추후 연결 + private String book; private LocalDateTime startDate; private LocalDateTime endDate; private Integer participant; @@ -25,8 +26,10 @@ public class BooktalkDetailResponseDto { private String description; private String PlaceName; private String PlaceAddress; + private Boolean isApply; + private BooktalkStatus booktalkStatus; - public static BooktalkDetailResponseDto of(Booktalk booktalk) { + public static BooktalkDetailResponseDto of(Booktalk booktalk, Boolean isApply) { return new BooktalkDetailResponseDto( booktalk.getBooktalkImageUrl(), booktalk.getTitle(), @@ -40,7 +43,9 @@ public static BooktalkDetailResponseDto of(Booktalk booktalk) { booktalk.getPreliminaryInfo(), booktalk.getDescription(), booktalk.getPlace().getName(), - booktalk.getPlace().getAddress() + booktalk.getPlace().getAddress(), + isApply, + booktalk.getBooktalkStatus() ); } } diff --git a/src/main/java/org/sophy/sophy/service/BooktalkService.java b/src/main/java/org/sophy/sophy/service/BooktalkService.java index 276d8b3e..658ae881 100644 --- a/src/main/java/org/sophy/sophy/service/BooktalkService.java +++ b/src/main/java/org/sophy/sophy/service/BooktalkService.java @@ -89,9 +89,12 @@ public BooktalkDeleteResponseDto deleteBooktalk( } // 북토크 상세 조회 - public BooktalkDetailResponseDto getBooktalkDetail(Long booktalkId) { + public BooktalkDetailResponseDto getBooktalkDetail(String email, Long booktalkId) { + Member member = memberRepository.getMemberByEmail(email); Booktalk booktalk = booktalkRepository.getBooktalkById(booktalkId); - return BooktalkDetailResponseDto.of(booktalk); + Boolean isApply = member.getUserBookTalkList() + .stream().anyMatch(memberBooktalk -> memberBooktalk.getBooktalk().equals(booktalk)); + return BooktalkDetailResponseDto.of(booktalk, isApply); } // 북토크 참여 신청 From 3df7dd5146ed1985150c3059ea741ce82c630917 Mon Sep 17 00:00:00 2001 From: onpyeong Date: Thu, 12 Oct 2023 15:47:04 +0900 Subject: [PATCH 2/2] =?UTF-8?q?modify:=20=EB=AA=A8=EC=A7=91=20=EB=A7=88?= =?UTF-8?q?=EA=B0=90=20=EB=B6=81=ED=86=A0=ED=81=AC=20=EC=8B=A0=EC=B2=AD=20?= =?UTF-8?q?=EC=8B=9C=20=EC=98=88=EC=99=B8=EC=B2=98=EB=A6=AC=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/org/sophy/sophy/exception/ErrorStatus.java | 1 + src/main/java/org/sophy/sophy/service/BooktalkService.java | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/src/main/java/org/sophy/sophy/exception/ErrorStatus.java b/src/main/java/org/sophy/sophy/exception/ErrorStatus.java index ca24745f..d849e652 100644 --- a/src/main/java/org/sophy/sophy/exception/ErrorStatus.java +++ b/src/main/java/org/sophy/sophy/exception/ErrorStatus.java @@ -31,6 +31,7 @@ public enum ErrorStatus { */ FORBIDDEN_USER_EXCEPTION(HttpStatus.FORBIDDEN, "접근 권한이 없습니다."), + BOOKTALK_RECRUITING_CLOSED_EXCEPTION(HttpStatus.FORBIDDEN, "모집 마감된 북토크입니다."), /** * 404 NOT FOUND */ diff --git a/src/main/java/org/sophy/sophy/service/BooktalkService.java b/src/main/java/org/sophy/sophy/service/BooktalkService.java index 658ae881..88bfec48 100644 --- a/src/main/java/org/sophy/sophy/service/BooktalkService.java +++ b/src/main/java/org/sophy/sophy/service/BooktalkService.java @@ -104,6 +104,10 @@ public void postBooktalkParticipation( Member member = memberRepository.getMemberByEmail(email); //참가 신청 유저 Booktalk booktalk = booktalkRepository.getBooktalkById( booktalkParticipationRequestDto.getBooktalkId()); //참가하고자 하는 북토크 + if (!booktalk.getBooktalkStatus().equals(BooktalkStatus.RECRUITING)) { + throw new ForbiddenException(ErrorStatus.BOOKTALK_RECRUITING_CLOSED_EXCEPTION, + ErrorStatus.BOOKTALK_RECRUITING_CLOSED_EXCEPTION.getMessage()); + } //북토크 현재 인원이 최대인원을 넘지 않았는지 체크하는 메서드 if (booktalk.getMaximum() <= booktalk.getParticipantNum()) { throw new OverMaxParticipationException(ErrorStatus.OVER_MAX_PARTICIPATION_EXCEPTION, @@ -119,6 +123,9 @@ public void postBooktalkParticipation( // 복합키? memberBooktalkRepository.save( booktalkParticipationRequestDto.toMemberBooktalk(booktalk, member)); + if (booktalk.getMaximum().equals(booktalk.getParticipantNum())) { //인원이 다 찬 경우 마감 + booktalk.setBooktalkStatus(BooktalkStatus.RECRUITING_CLOSED); + } } // 마감임박 북토크 조회