From 12a23667b66973374b224c520e29d52963c62e0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=86=90=EC=B0=BD=ED=98=84?= Date: Fri, 15 Jul 2022 02:20:59 +0900 Subject: [PATCH] add: DUPLICATE_MOVIE_TIME exception --- .../server/global/exception/ErrorCode.java | 5 ++++ .../request/MovieTimeRegisterRequest.java | 5 +--- .../movie/service/MovieTimeServiceImpl.java | 29 ++++++++++++++----- .../service/dto/MovieTimeRegisterDTO.java | 3 -- .../service/interfaces/MovieTimeService.java | 6 ++++ 5 files changed, 34 insertions(+), 14 deletions(-) diff --git a/server/src/main/java/com/ticketing/server/global/exception/ErrorCode.java b/server/src/main/java/com/ticketing/server/global/exception/ErrorCode.java index b6a43bf..79ce82e 100644 --- a/server/src/main/java/com/ticketing/server/global/exception/ErrorCode.java +++ b/server/src/main/java/com/ticketing/server/global/exception/ErrorCode.java @@ -34,6 +34,7 @@ public enum ErrorCode { DUPLICATE_EMAIL(CONFLICT, "이메일이 이미 존재합니다."), DUPLICATE_PAYMENT(CONFLICT, "해당 좌석은 현재 판매된 좌석입니다."), DUPLICATE_MOVIE(CONFLICT, "해당 영화 정보가 이미 존재합니다."), + DUPLICATE_MOVIE_TIME(CONFLICT, "해당 영화 시간표 정보가 이미 존재합니다."), DELETED_EMAIL(CONFLICT, "이미 삭제된 이메일 입니다."), DELETED_MOVIE(CONFLICT, "이미 삭제된 영화 입니다."); @@ -100,6 +101,10 @@ public enum ErrorCode { throw new TicketingException(DUPLICATE_MOVIE); } + public static TicketingException throwDuplicateMovieTime() { + throw new TicketingException(DUPLICATE_MOVIE_TIME); + } + public static TicketingException throwDeletedEmail() { throw new TicketingException(DELETED_EMAIL); } diff --git a/server/src/main/java/com/ticketing/server/movie/application/request/MovieTimeRegisterRequest.java b/server/src/main/java/com/ticketing/server/movie/application/request/MovieTimeRegisterRequest.java index dda0abd..25ad3d2 100644 --- a/server/src/main/java/com/ticketing/server/movie/application/request/MovieTimeRegisterRequest.java +++ b/server/src/main/java/com/ticketing/server/movie/application/request/MovieTimeRegisterRequest.java @@ -23,11 +23,8 @@ public class MovieTimeRegisterRequest { @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Seoul") private LocalDateTime startAt; - @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Seoul") - private LocalDateTime endAt; - public MovieTimeRegisterDTO toMovieTimeRegisterDTO() { - return new MovieTimeRegisterDTO(movieId, theaterNumber, round, startAt, endAt); + return new MovieTimeRegisterDTO(movieId, theaterNumber, round, startAt); } } diff --git a/server/src/main/java/com/ticketing/server/movie/service/MovieTimeServiceImpl.java b/server/src/main/java/com/ticketing/server/movie/service/MovieTimeServiceImpl.java index d3e28e7..a45b87a 100644 --- a/server/src/main/java/com/ticketing/server/movie/service/MovieTimeServiceImpl.java +++ b/server/src/main/java/com/ticketing/server/movie/service/MovieTimeServiceImpl.java @@ -10,6 +10,7 @@ import com.ticketing.server.movie.domain.repository.TheaterRepository; import com.ticketing.server.movie.service.dto.MovieTimeDTO; import com.ticketing.server.movie.service.dto.MovieTimeListDTO; import com.ticketing.server.movie.service.dto.MovieTimeRegisterDTO; +import com.ticketing.server.movie.service.dto.RegisteredMovieDTO; import com.ticketing.server.movie.service.dto.RegisteredMovieTimeDTO; import com.ticketing.server.movie.service.interfaces.MovieTimeService; import java.time.LocalDate; @@ -35,18 +36,27 @@ public class MovieTimeServiceImpl implements MovieTimeService { @Override public RegisteredMovieTimeDTO registerMovieTime(@Valid MovieTimeRegisterDTO movieTimeRegisterDto) { - Movie movie = movieRepository.findById(movieTimeRegisterDto.getMovieId()) - .orElseThrow(ErrorCode::throwMovieNotFound); + Movie movie = findMovieById(movieTimeRegisterDto.getMovieId()); + Theater theater = findTheaterByNumber(movieTimeRegisterDto.getTheaterNumber()); + int round = movieTimeRegisterDto.getTheaterNumber(); - MovieTime movieTime = movieTimeRepository.findByMovieAndTheaterAndRoundAndDeletedAtNull( + Optional movieTime = + movieTimeRepository.findByMovieAndTheaterAndRoundAndDeletedAtNull(movie, theater, round); - ); + if(movieTime.isEmpty()) { + MovieTime newMovieTime = movieTimeRepository.save( + new MovieTime(movie, theater, round, movieTimeRegisterDto.getStartAt()) + ); + + return new RegisteredMovieTimeDTO(newMovieTime); + } + + throw ErrorCode.throwDuplicateMovieTime(); } @Override public MovieTimeListDTO getMovieTimes(Long movieId, LocalDate runningDate) { - Movie movie = movieRepository.findByIdAndDeletedAtNull(movieId) - .orElseThrow(ErrorCode::throwMovieNotFound); + Movie movie = findMovieById(movieId); LocalDateTime startOfDay = runningDate.atStartOfDay().plusHours(6); LocalDateTime endOfDay = startOfDay.plusDays(1); @@ -62,13 +72,18 @@ public class MovieTimeServiceImpl implements MovieTimeService { @Override public Movie findMovieById(Long movieId) { + Movie movie = movieRepository.findByIdAndDeletedAtNull(movieId) + .orElseThrow(ErrorCode::throwMovieNotFound); + return movie; } @Override public Theater findTheaterByNumber(Integer theaterNumber) { Theater theater = theaterRepository.findByTheaterNumber(theaterNumber) - .orElseThrow(ErrorCode::throwTh) + .orElseThrow(ErrorCode::throwTheaterNotFound); + + return theater; } } diff --git a/server/src/main/java/com/ticketing/server/movie/service/dto/MovieTimeRegisterDTO.java b/server/src/main/java/com/ticketing/server/movie/service/dto/MovieTimeRegisterDTO.java index 6041102..abc99bc 100644 --- a/server/src/main/java/com/ticketing/server/movie/service/dto/MovieTimeRegisterDTO.java +++ b/server/src/main/java/com/ticketing/server/movie/service/dto/MovieTimeRegisterDTO.java @@ -22,7 +22,4 @@ public class MovieTimeRegisterDTO { @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Seoul") private LocalDateTime startAt; - @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Seoul") - private LocalDateTime endAt; - } diff --git a/server/src/main/java/com/ticketing/server/movie/service/interfaces/MovieTimeService.java b/server/src/main/java/com/ticketing/server/movie/service/interfaces/MovieTimeService.java index 74c1d95..2ef1d18 100644 --- a/server/src/main/java/com/ticketing/server/movie/service/interfaces/MovieTimeService.java +++ b/server/src/main/java/com/ticketing/server/movie/service/interfaces/MovieTimeService.java @@ -1,5 +1,7 @@ package com.ticketing.server.movie.service.interfaces; +import com.ticketing.server.movie.domain.Movie; +import com.ticketing.server.movie.domain.Theater; import com.ticketing.server.movie.service.dto.MovieTimeListDTO; import com.ticketing.server.movie.service.dto.MovieTimeRegisterDTO; import com.ticketing.server.movie.service.dto.RegisteredMovieTimeDTO; @@ -12,4 +14,8 @@ public interface MovieTimeService { MovieTimeListDTO getMovieTimes(Long movieId, LocalDate runningDate); + Movie findMovieById(Long movieId); + + Theater findTheaterByNumber(Integer theaterNumber); + }