add: DUPLICATE_MOVIE_TIME exception

This commit is contained in:
손창현
2022-07-15 02:20:59 +09:00
parent 45b73509d2
commit 12a23667b6
5 changed files with 34 additions and 14 deletions

View File

@@ -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);
}

View File

@@ -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);
}
}

View File

@@ -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> 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;
}
}

View File

@@ -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;
}

View File

@@ -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);
}