diff --git a/src/main/java/com/back/web7_9_codecrete_be/domain/concerts/dto/concert/ConcertLikeResponse.java b/src/main/java/com/back/web7_9_codecrete_be/domain/concerts/dto/concert/ConcertLikeResponse.java index 7e7b0e96..b535d9eb 100644 --- a/src/main/java/com/back/web7_9_codecrete_be/domain/concerts/dto/concert/ConcertLikeResponse.java +++ b/src/main/java/com/back/web7_9_codecrete_be/domain/concerts/dto/concert/ConcertLikeResponse.java @@ -1,7 +1,6 @@ package com.back.web7_9_codecrete_be.domain.concerts.dto.concert; import com.back.web7_9_codecrete_be.domain.concerts.entity.Concert; -import com.back.web7_9_codecrete_be.domain.concerts.entity.ConcertLike; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Getter; diff --git a/src/main/java/com/back/web7_9_codecrete_be/domain/concerts/dto/concert/ConcertTicketTimeSetRequest.java b/src/main/java/com/back/web7_9_codecrete_be/domain/concerts/dto/concert/ConcertTicketTimeSetRequest.java index 73d2e7fd..6b671696 100644 --- a/src/main/java/com/back/web7_9_codecrete_be/domain/concerts/dto/concert/ConcertTicketTimeSetRequest.java +++ b/src/main/java/com/back/web7_9_codecrete_be/domain/concerts/dto/concert/ConcertTicketTimeSetRequest.java @@ -1,6 +1,7 @@ package com.back.web7_9_codecrete_be.domain.concerts.dto.concert; import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotEmpty; import lombok.Getter; import java.time.LocalDateTime; @@ -8,8 +9,10 @@ @Getter public class ConcertTicketTimeSetRequest { @Schema(description = "공연 ID 입니다.") + @NotEmpty private Long concertId; @Schema(description = "티켓팅 시간입니다.") + @NotEmpty private LocalDateTime ticketTime; } diff --git a/src/main/java/com/back/web7_9_codecrete_be/domain/concerts/dto/concert/ConcertUpdateRequest.java b/src/main/java/com/back/web7_9_codecrete_be/domain/concerts/dto/concert/ConcertUpdateRequest.java index 3f016745..503d112b 100644 --- a/src/main/java/com/back/web7_9_codecrete_be/domain/concerts/dto/concert/ConcertUpdateRequest.java +++ b/src/main/java/com/back/web7_9_codecrete_be/domain/concerts/dto/concert/ConcertUpdateRequest.java @@ -1,6 +1,7 @@ package com.back.web7_9_codecrete_be.domain.concerts.dto.concert; import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotEmpty; import lombok.Getter; import java.time.LocalDate; @@ -8,29 +9,38 @@ @Getter public class ConcertUpdateRequest { @Schema(description = "수정할 대상이 될 공연 ID 입니다.") + @NotEmpty private Long concertId; @Schema(description = "공연 이름입니다.") + @NotEmpty private String name; @Schema(description = "공연 설명입니다.") + @NotEmpty private String description; @Schema(description = "공연장 ID 입니다.") + @NotEmpty private Long placeId; @Schema(description = "공연 시작 날짜입니다.") + @NotEmpty private LocalDate StartDate; @Schema(description = "공연 종료 날짜입니다.") + @NotEmpty private LocalDate EndDate; @Schema(description = "공연 포스터 URL 입니다.") + @NotEmpty private String posterUrl; @Schema(description = "공연 티켓 최고가입니다.") + @NotEmpty private int maxPrice; @Schema(description = "공연 티켓 최저가입니다.") + @NotEmpty private int minPrice; } diff --git a/src/main/java/com/back/web7_9_codecrete_be/domain/concerts/repository/TicketOfficeRepository.java b/src/main/java/com/back/web7_9_codecrete_be/domain/concerts/repository/TicketOfficeRepository.java index 198e58d0..378c465b 100644 --- a/src/main/java/com/back/web7_9_codecrete_be/domain/concerts/repository/TicketOfficeRepository.java +++ b/src/main/java/com/back/web7_9_codecrete_be/domain/concerts/repository/TicketOfficeRepository.java @@ -27,4 +27,6 @@ public interface TicketOfficeRepository extends JpaRepository getTicketOfficesByConcert_ConcertId(Long concertConcertId); } diff --git a/src/main/java/com/back/web7_9_codecrete_be/domain/concerts/service/ConcertService.java b/src/main/java/com/back/web7_9_codecrete_be/domain/concerts/service/ConcertService.java index 45c0d197..9e677b50 100644 --- a/src/main/java/com/back/web7_9_codecrete_be/domain/concerts/service/ConcertService.java +++ b/src/main/java/com/back/web7_9_codecrete_be/domain/concerts/service/ConcertService.java @@ -48,9 +48,8 @@ public List getNoTicketTimeConcertsList(Pageable pageable) { public List getConcertListByKeyword(String keyword, Pageable pageable) { if(keyword == null || keyword.isEmpty()){ - + throw new BusinessException(ConcertErrorCode.KEYWORD_IS_NULL); } - return concertRepository.getConcertItemsByKeyword(keyword, pageable); } @@ -81,8 +80,7 @@ public List getConcertsList2(Pageable pageable) { */ public List getTicketOfficesList(long concertId) { - Concert concert = new Concert(concertId); - List ticketOffices = ticketOfficeRepository.getTicketOfficesByConcert(concert); + List ticketOffices = ticketOfficeRepository.getTicketOfficesByConcert_ConcertId(concertId); List ticketOfficeList = new ArrayList<>(); for (TicketOffice ticketOffice : ticketOffices) { ticketOfficeList.add(new TicketOfficeElement(ticketOffice)); @@ -92,7 +90,7 @@ public List getTicketOfficesList(long concertId) { } public ConcertLikeResponse isLikeConcert(Long concertId, User user) { - Concert concert = concertRepository.getConcertByConcertId(concertId); + Concert concert = findConcertByConcertId(concertId); ConcertLikeResponse concertLikeResponse; if(concertLikeRepository.existsConcertLikeByConcertAndUser(concert,user)){ concertLikeResponse = new ConcertLikeResponse(concert,true); @@ -105,7 +103,8 @@ public ConcertLikeResponse isLikeConcert(Long concertId, User user) { @Transactional public void likeConcert(long concertId, User user) { - Concert concert = concertRepository.findById(concertId).orElseThrow(); + Concert concert = findConcertByConcertId(concertId); + if(concertLikeRepository.existsConcertLikeByConcertAndUser(concert,user)){ throw new BusinessException(ConcertErrorCode.LIKE_CONFLICT); } @@ -116,7 +115,8 @@ public void likeConcert(long concertId, User user) { @Transactional public void dislikeConcert(long concertId, User user) { - Concert concert = concertRepository.findById(concertId).orElseThrow(); + Concert concert = findConcertByConcertId(concertId); + ConcertLike concertLike = concertLikeRepository.findConcertLikeByConcertAndUser(concert, user); if(concertLike == null){ throw new BusinessException(ConcertErrorCode.NOT_FOUND_CONCERTLIKE); @@ -126,7 +126,7 @@ public void dislikeConcert(long concertId, User user) { } public ConcertItem updateConcert(long concertId, ConcertUpdateRequest concertUpdateRequest) { - Concert concert = concertRepository.findById(concertId).orElseThrow(); + Concert concert = findConcertByConcertId(concertId); ConcertPlace concertPlace = concertPlaceRepository.findById(concertUpdateRequest.getPlaceId()).orElseThrow(); concert.update(concertUpdateRequest, concertPlace); Concert updatedConcert = concertRepository.save(concert); @@ -134,15 +134,20 @@ public ConcertItem updateConcert(long concertId, ConcertUpdateRequest concertUpd } public ConcertDetailResponse setConcertTime(ConcertTicketTimeSetRequest concertTicketTimeSetRequest) { - Concert concert = concertRepository.findById(concertTicketTimeSetRequest.getConcertId()).orElseThrow(); + Concert concert = findConcertByConcertId(concertTicketTimeSetRequest.getConcertId()); concert.ticketTimeSet(concertTicketTimeSetRequest.getTicketTime()); Concert savedConcert = concertRepository.save(concert); return concertRepository.getConcertDetailById(savedConcert.getConcertId()); } public void deleteConcert(long concertId) { - Concert concert = concertRepository.findById(concertId).orElseThrow(); concertRepository.deleteById(concertId); } + private Concert findConcertByConcertId(long concertId) { + return concertRepository.findById(concertId).orElseThrow( + () -> new BusinessException(ConcertErrorCode.CONCERT_NOT_FOUND) + ); + } + } diff --git a/src/main/java/com/back/web7_9_codecrete_be/domain/concerts/service/KopisApiService.java b/src/main/java/com/back/web7_9_codecrete_be/domain/concerts/service/KopisApiService.java index 8cffc768..eda55046 100644 --- a/src/main/java/com/back/web7_9_codecrete_be/domain/concerts/service/KopisApiService.java +++ b/src/main/java/com/back/web7_9_codecrete_be/domain/concerts/service/KopisApiService.java @@ -20,6 +20,7 @@ import java.time.LocalDate; import java.time.LocalDateTime; +import java.time.LocalTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.HashMap; @@ -64,6 +65,7 @@ public KopisApiService(ConcertRepository concertRepository, ConcertPlaceReposito public SetResultResponse setConcertsList() throws InterruptedException { // 최초 시작 시간 저장 LocalDateTime now = LocalDateTime.now(); + Long startNs = System.currentTimeMillis(); // 콘서트 목록 받아올 Response 객체 선언 ConcertListResponse plr; @@ -145,6 +147,9 @@ public SetResultResponse setConcertsList() throws InterruptedException { ConcertUpdateTime concertUpdateTime = new ConcertUpdateTime(now); concertUpdateTimeRepository.save(concertUpdateTime); log.info(now + "시 기준 " + totalConcertsList.size() + "개의 공연 데이터 저장 완료!"); + long endNs = System.currentTimeMillis(); + long durationSec = ((endNs - startNs) / 1000); + log.info(durationSec/60 + "분, " + durationSec % 60 + "초 소요되었습니다." ); return new SetResultResponse(addedConcerts,0,addedConcertPlaces,0,addedConcertImages,0,addedTicketOffices,0); } diff --git a/src/main/java/com/back/web7_9_codecrete_be/global/error/code/ConcertErrorCode.java b/src/main/java/com/back/web7_9_codecrete_be/global/error/code/ConcertErrorCode.java index 01b7bd8c..fb467962 100644 --- a/src/main/java/com/back/web7_9_codecrete_be/global/error/code/ConcertErrorCode.java +++ b/src/main/java/com/back/web7_9_codecrete_be/global/error/code/ConcertErrorCode.java @@ -8,8 +8,11 @@ @RequiredArgsConstructor public enum ConcertErrorCode implements ErrorCode { - LIKE_CONFLICT(HttpStatus.CONFLICT,"C131","이미 좋아요를 누른 공연입니다."), - NOT_FOUND_CONCERTLIKE(HttpStatus.NOT_FOUND,"C130","좋아요를 누르지 않은 공연입니다.") + // C-10* 공연 탐색 관련 + CONCERT_NOT_FOUND(HttpStatus.NOT_FOUND,"C-101","공연을 찾을 수 없습니다."), + KEYWORD_IS_NULL(HttpStatus.BAD_REQUEST,"C-102","검색 키워드를 입력해주세요."), + LIKE_CONFLICT(HttpStatus.CONFLICT,"C-131","이미 좋아요를 누른 공연입니다."), + NOT_FOUND_CONCERTLIKE(HttpStatus.NOT_FOUND,"C-130","좋아요를 누르지 않은 공연입니다.") ; private final HttpStatus status;