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 ca5ccec..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 @@ -28,11 +28,13 @@ public enum ErrorCode { MOVIE_NOT_FOUND(NOT_FOUND, "해당 제목의 영화를 찾을 수 없습니다."), REFRESH_TOKEN_NOT_FOUND(NOT_FOUND, "리프레쉬 토큰을 찾을 수 없습니다."), PAYMENT_ID_NOT_FOUND(NOT_FOUND, "결제정보를 찾을 수 없습니다."), + THEATER_NOT_FOUND(NOT_FOUND, "상영관 정보를 찾을 수 없습니다."), /* 409 CONFLICT : Resource 의 현재 상태와 충돌. 보통 중복된 데이터 존재 */ DUPLICATE_EMAIL(CONFLICT, "이메일이 이미 존재합니다."), DUPLICATE_PAYMENT(CONFLICT, "해당 좌석은 현재 판매된 좌석입니다."), DUPLICATE_MOVIE(CONFLICT, "해당 영화 정보가 이미 존재합니다."), + DUPLICATE_MOVIE_TIME(CONFLICT, "해당 영화 시간표 정보가 이미 존재합니다."), DELETED_EMAIL(CONFLICT, "이미 삭제된 이메일 입니다."), DELETED_MOVIE(CONFLICT, "이미 삭제된 영화 입니다."); @@ -82,6 +84,10 @@ public enum ErrorCode { throw new TicketingException(PAYMENT_ID_NOT_FOUND); } + public static TicketingException throwTheaterNotFound() { + throw new TicketingException(THEATER_NOT_FOUND); + } + /* 409 CONFLICT : Resource 의 현재 상태와 충돌. 보통 중복된 데이터 존재 */ public static TicketingException throwDuplicateEmail() { throw new TicketingException(DUPLICATE_EMAIL); @@ -95,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/MovieTimeController.java b/server/src/main/java/com/ticketing/server/movie/application/MovieTimeController.java index 3c2def2..2eb9100 100644 --- a/server/src/main/java/com/ticketing/server/movie/application/MovieTimeController.java +++ b/server/src/main/java/com/ticketing/server/movie/application/MovieTimeController.java @@ -1,18 +1,29 @@ package com.ticketing.server.movie.application; +import static com.ticketing.server.user.domain.UserGrade.ROLES.STAFF; + +import com.ticketing.server.movie.application.request.MovieTimeRegisterRequest; +import com.ticketing.server.movie.application.response.MovieTimeInfoResponse; import com.ticketing.server.movie.application.response.MovieTimeListResponse; +import com.ticketing.server.movie.service.dto.MovieTimeListDTO; +import com.ticketing.server.movie.service.dto.RegisteredMovieTimeDTO; import com.ticketing.server.movie.service.interfaces.MovieTimeService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import java.time.LocalDate; +import javax.validation.Valid; +import javax.validation.constraints.NotNull; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.format.annotation.DateTimeFormat; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; +import org.springframework.security.access.annotation.Secured; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; @@ -24,16 +35,35 @@ import org.springframework.web.bind.annotation.RestController; @Slf4j public class MovieTimeController { - private final MovieTimeService movieTimeService; + private final MovieTimeService movieTimeService; - @GetMapping - @ApiOperation(value = "영화 시간표 조회") - @Validated - public ResponseEntity getMovieTimes( - @ApiParam(value = "영화 제목", required = true) @RequestParam String title, - @ApiParam(value = "상영 날짜", required = true) @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate runningDate) { - return ResponseEntity.status(HttpStatus.OK).body(MovieTimeListResponse.from(movieTimeService.getMovieTimes(title, runningDate))); - } + @PostMapping + @ApiOperation(value = "영화 시간표 등록") + @Secured(STAFF) + public ResponseEntity registerMovieTime( + @RequestBody @Valid MovieTimeRegisterRequest movieTimeRegisterRequest) { + RegisteredMovieTimeDTO registeredMovieTimeDto = movieTimeService.registerMovieTime( + movieTimeRegisterRequest.toMovieTimeRegisterDTO() + ); + return ResponseEntity.status(HttpStatus.OK) + .body( + registeredMovieTimeDto.toResponse() + ); + } + + @GetMapping + @ApiOperation(value = "영화 시간표 조회") + @Validated + public ResponseEntity getMovieTimes( + @ApiParam(value = "영화 ID", required = true) @RequestParam @NotNull Long movieId, + @ApiParam(value = "상영 날짜", required = true) @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate runningDate) { + MovieTimeListDTO movieTimeListDto = movieTimeService.getMovieTimes(movieId, runningDate); + + return ResponseEntity.status(HttpStatus.OK) + .body( + movieTimeListDto.toResponse() + ); + } } diff --git a/server/src/main/java/com/ticketing/server/movie/application/request/MovieRegisterRequest.java b/server/src/main/java/com/ticketing/server/movie/application/request/MovieRegisterRequest.java index 1d2ee4f..d537cc6 100644 --- a/server/src/main/java/com/ticketing/server/movie/application/request/MovieRegisterRequest.java +++ b/server/src/main/java/com/ticketing/server/movie/application/request/MovieRegisterRequest.java @@ -5,10 +5,8 @@ import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; import lombok.AllArgsConstructor; import lombok.Getter; -import lombok.NoArgsConstructor; @Getter -@NoArgsConstructor @AllArgsConstructor public class MovieRegisterRequest { @@ -19,7 +17,7 @@ public class MovieRegisterRequest { private Long runningTime; public MovieRegisterDTO toMovieRegisterDTO() { - return new MovieRegisterDTO(this.title, this.runningTime); + return new MovieRegisterDTO(title, runningTime); } } 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 new file mode 100644 index 0000000..6a08873 --- /dev/null +++ b/server/src/main/java/com/ticketing/server/movie/application/request/MovieTimeRegisterRequest.java @@ -0,0 +1,29 @@ +package com.ticketing.server.movie.application.request; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ticketing.server.movie.service.dto.MovieTimeRegisterDTO; +import java.time.LocalDateTime; +import javax.validation.constraints.NotNull; +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public class MovieTimeRegisterRequest { + + @NotNull(message = "{validation.not.null.movieId}") + private Long movieId; + + @NotNull(message = "{validation.not.null.theaterNumber}") + private Integer theaterNumber; + + @NotNull(message = "{validation.not.null.round}") + private Integer round; + + private LocalDateTime startAt; + + public MovieTimeRegisterDTO toMovieTimeRegisterDTO() { + return new MovieTimeRegisterDTO(movieId, theaterNumber, round, startAt); + } + +} diff --git a/server/src/main/java/com/ticketing/server/movie/application/response/MovieTimeInfoResponse.java b/server/src/main/java/com/ticketing/server/movie/application/response/MovieTimeInfoResponse.java new file mode 100644 index 0000000..b744d62 --- /dev/null +++ b/server/src/main/java/com/ticketing/server/movie/application/response/MovieTimeInfoResponse.java @@ -0,0 +1,28 @@ +package com.ticketing.server.movie.application.response; + +import io.swagger.annotations.ApiModelProperty; +import java.time.LocalDateTime; +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public class MovieTimeInfoResponse { + + @ApiModelProperty(value = "영화 시간표 ID") + private Long movieTimeId; + + @ApiModelProperty(value = "상영관 번호") + private Integer theaterNumber; + + @ApiModelProperty(value = "회차") + private Integer round; + + @ApiModelProperty(value = "시작 시간") + private LocalDateTime startAt; + + @ApiModelProperty(value = "종료 시간") + private LocalDateTime endAt; + + +} diff --git a/server/src/main/java/com/ticketing/server/movie/application/response/MovieTimeListResponse.java b/server/src/main/java/com/ticketing/server/movie/application/response/MovieTimeListResponse.java index f7b5137..023cff2 100644 --- a/server/src/main/java/com/ticketing/server/movie/application/response/MovieTimeListResponse.java +++ b/server/src/main/java/com/ticketing/server/movie/application/response/MovieTimeListResponse.java @@ -8,14 +8,10 @@ import lombok.AllArgsConstructor; import lombok.Getter; @Getter -@AllArgsConstructor(access = AccessLevel.PRIVATE) +@AllArgsConstructor public class MovieTimeListResponse { @ApiModelProperty(value = "영화 시간표 정보") - private List movieTimeDTOS; - - public static MovieTimeListResponse from(List movieTimeDtos) { - return new MovieTimeListResponse(movieTimeDtos); - } + private List movieTimeDtos; } diff --git a/server/src/main/java/com/ticketing/server/movie/domain/MovieTime.java b/server/src/main/java/com/ticketing/server/movie/domain/MovieTime.java index 2d21acc..9fa82a5 100644 --- a/server/src/main/java/com/ticketing/server/movie/domain/MovieTime.java +++ b/server/src/main/java/com/ticketing/server/movie/domain/MovieTime.java @@ -1,6 +1,8 @@ package com.ticketing.server.movie.domain; + import com.ticketing.server.global.dto.repository.AbstractEntity; +import com.ticketing.server.movie.service.dto.MovieTimeDTO; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; @@ -72,4 +74,9 @@ public class MovieTime extends AbstractEntity { return this.theater.getSeats(); } + public MovieTimeDTO toMovieTimeDTO() { + return new MovieTimeDTO( + this.id, this.theater.getTheaterNumber(), this.round, this.startAt, this.endAt); + } + } diff --git a/server/src/main/java/com/ticketing/server/movie/domain/repository/MovieTimeRepository.java b/server/src/main/java/com/ticketing/server/movie/domain/repository/MovieTimeRepository.java index d7d668b..0332fa1 100644 --- a/server/src/main/java/com/ticketing/server/movie/domain/repository/MovieTimeRepository.java +++ b/server/src/main/java/com/ticketing/server/movie/domain/repository/MovieTimeRepository.java @@ -2,8 +2,10 @@ package com.ticketing.server.movie.domain.repository; import com.ticketing.server.movie.domain.Movie; import com.ticketing.server.movie.domain.MovieTime; +import com.ticketing.server.movie.domain.Theater; import java.time.LocalDateTime; import java.util.List; +import java.util.Optional; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Repository; @@ -11,11 +13,13 @@ import org.springframework.stereotype.Repository; @Repository public interface MovieTimeRepository extends JpaRepository { - @Query(value = "SELECT mt " - + "FROM MovieTime mt " - + "JOIN FETCH mt.movie " - + "WHERE mt.movie = :movie " - + "AND mt.startAt BETWEEN :startOfDay AND :endOfDay ") - List findValidMovieTimes(Movie movie, LocalDateTime startOfDay, LocalDateTime endOfDay); + Optional findByMovieAndTheaterAndRoundAndDeletedAtNull(Movie movie, Theater theater, Integer round); + + @Query(value = "SELECT mt " + + "FROM MovieTime mt " + + "JOIN FETCH mt.movie " + + "WHERE mt.movie = :movie " + + "AND mt.startAt BETWEEN :startOfDay AND :endOfDay ") + List findValidMovieTimes(Movie movie, LocalDateTime startOfDay, LocalDateTime endOfDay); } 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 79ea4b0..3e6ad0a 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 @@ -3,14 +3,22 @@ package com.ticketing.server.movie.service; import com.ticketing.server.global.exception.ErrorCode; import com.ticketing.server.movie.domain.Movie; import com.ticketing.server.movie.domain.MovieTime; +import com.ticketing.server.movie.domain.Theater; import com.ticketing.server.movie.domain.repository.MovieRepository; import com.ticketing.server.movie.domain.repository.MovieTimeRepository; +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; import java.time.LocalDateTime; import java.util.List; +import java.util.Optional; import java.util.stream.Collectors; +import javax.validation.Valid; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -22,22 +30,60 @@ public class MovieTimeServiceImpl implements MovieTimeService { private final MovieRepository movieRepository; + private final TheaterRepository theaterRepository; + private final MovieTimeRepository movieTimeRepository; @Override - public List getMovieTimes(String title, LocalDate runningDate) { - Movie movie = movieRepository.findByTitle(title) - .orElseThrow(ErrorCode::throwMovieNotFound); + public RegisteredMovieTimeDTO registerMovieTime(@Valid MovieTimeRegisterDTO movieTimeRegisterDto) { + Movie movie = findMovieById(movieTimeRegisterDto.getMovieId()); + Theater theater = findTheaterByNumber(movieTimeRegisterDto.getTheaterNumber()); + int round = movieTimeRegisterDto.getRound(); + + 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 = findMovieById(movieId); LocalDateTime startOfDay = runningDate.atStartOfDay().plusHours(6); LocalDateTime endOfDay = startOfDay.plusDays(1); List movieTimes = movieTimeRepository.findValidMovieTimes(movie, startOfDay, endOfDay); - return movieTimes.stream() - .map(MovieTimeDTO::from) + List movieTimeDtos = movieTimes.stream() + .map(movieTime -> movieTime.toMovieTimeDTO()) .collect(Collectors.toList()); + return new MovieTimeListDTO(movieTimeDtos); + } + + @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::throwTheaterNotFound); + + return theater; } } diff --git a/server/src/main/java/com/ticketing/server/movie/service/dto/MovieListDTO.java b/server/src/main/java/com/ticketing/server/movie/service/dto/MovieListDTO.java index 047fb3a..fdd03fd 100644 --- a/server/src/main/java/com/ticketing/server/movie/service/dto/MovieListDTO.java +++ b/server/src/main/java/com/ticketing/server/movie/service/dto/MovieListDTO.java @@ -6,7 +6,7 @@ import lombok.AllArgsConstructor; import lombok.Getter; @Getter -@AllArgsConstructor() +@AllArgsConstructor public class MovieListDTO { private final List movieDtos; diff --git a/server/src/main/java/com/ticketing/server/movie/service/dto/MovieRegisterDTO.java b/server/src/main/java/com/ticketing/server/movie/service/dto/MovieRegisterDTO.java index 08c8ad2..5734094 100644 --- a/server/src/main/java/com/ticketing/server/movie/service/dto/MovieRegisterDTO.java +++ b/server/src/main/java/com/ticketing/server/movie/service/dto/MovieRegisterDTO.java @@ -21,4 +21,5 @@ public class MovieRegisterDTO { public Movie toMovie() { return new Movie(this.title, this.runningTime); } + } diff --git a/server/src/main/java/com/ticketing/server/movie/service/dto/MovieTimeDTO.java b/server/src/main/java/com/ticketing/server/movie/service/dto/MovieTimeDTO.java index e83b1c2..74356a4 100644 --- a/server/src/main/java/com/ticketing/server/movie/service/dto/MovieTimeDTO.java +++ b/server/src/main/java/com/ticketing/server/movie/service/dto/MovieTimeDTO.java @@ -1,13 +1,11 @@ package com.ticketing.server.movie.service.dto; -import com.ticketing.server.movie.domain.MovieTime; import java.time.LocalDateTime; -import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Getter; @Getter -@AllArgsConstructor(access = AccessLevel.PRIVATE) +@AllArgsConstructor public class MovieTimeDTO { private Long movieTimeId; @@ -20,9 +18,4 @@ public class MovieTimeDTO { private LocalDateTime endAt; - public static MovieTimeDTO from(MovieTime movieTime) { - return new MovieTimeDTO(movieTime.getId(), movieTime.getTheater().getTheaterNumber(), - movieTime.getRound(), movieTime.getStartAt(), movieTime.getEndAt()); - } - } diff --git a/server/src/main/java/com/ticketing/server/movie/service/dto/MovieTimeListDTO.java b/server/src/main/java/com/ticketing/server/movie/service/dto/MovieTimeListDTO.java new file mode 100644 index 0000000..73c0554 --- /dev/null +++ b/server/src/main/java/com/ticketing/server/movie/service/dto/MovieTimeListDTO.java @@ -0,0 +1,18 @@ +package com.ticketing.server.movie.service.dto; + +import com.ticketing.server.movie.application.response.MovieTimeListResponse; +import java.util.List; +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public class MovieTimeListDTO { + + private final List movieTimeDtos; + + public MovieTimeListResponse toResponse() { + return new MovieTimeListResponse(movieTimeDtos); + } + +} 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 new file mode 100644 index 0000000..abc99bc --- /dev/null +++ b/server/src/main/java/com/ticketing/server/movie/service/dto/MovieTimeRegisterDTO.java @@ -0,0 +1,25 @@ +package com.ticketing.server.movie.service.dto; + +import com.fasterxml.jackson.annotation.JsonFormat; +import java.time.LocalDateTime; +import javax.validation.constraints.NotNull; +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public class MovieTimeRegisterDTO { + + @NotNull(message = "{validation.not.null.movieId}") + private Long movieId; + + @NotNull(message = "{validation.not.null.theaterNumber}") + private Integer theaterNumber; + + @NotNull(message = "{validation.not.null.round}") + private Integer round; + + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Seoul") + private LocalDateTime startAt; + +} diff --git a/server/src/main/java/com/ticketing/server/movie/service/dto/RegisteredMovieTimeDTO.java b/server/src/main/java/com/ticketing/server/movie/service/dto/RegisteredMovieTimeDTO.java new file mode 100644 index 0000000..c1db29b --- /dev/null +++ b/server/src/main/java/com/ticketing/server/movie/service/dto/RegisteredMovieTimeDTO.java @@ -0,0 +1,38 @@ +package com.ticketing.server.movie.service.dto; + +import com.ticketing.server.movie.application.response.MovieTimeInfoResponse; +import com.ticketing.server.movie.domain.MovieTime; +import java.time.LocalDateTime; +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor(access = AccessLevel.PRIVATE) +public class RegisteredMovieTimeDTO { + + private final Long movieTimeId; + + private final Integer theaterNumber; + + private final Integer round; + + private final LocalDateTime startAt; + + private final LocalDateTime endAt; + + public RegisteredMovieTimeDTO(MovieTime movieTime) { + this( + movieTime.getId(), + movieTime.getTheater().getTheaterNumber(), + movieTime.getRound(), + movieTime.getStartAt(), + movieTime.getEndAt() + ); + } + + public MovieTimeInfoResponse toResponse() { + return new MovieTimeInfoResponse(movieTimeId, theaterNumber, round, startAt, 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 0e5edb7..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,11 +1,21 @@ package com.ticketing.server.movie.service.interfaces; -import com.ticketing.server.movie.service.dto.MovieTimeDTO; +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; import java.time.LocalDate; -import java.util.List; +import javax.validation.Valid; public interface MovieTimeService { - List getMovieTimes(String title, LocalDate runningDate); + RegisteredMovieTimeDTO registerMovieTime(@Valid MovieTimeRegisterDTO movieTimeRegisterDto); + + MovieTimeListDTO getMovieTimes(Long movieId, LocalDate runningDate); + + Movie findMovieById(Long movieId); + + Theater findTheaterByNumber(Integer theaterNumber); } diff --git a/server/src/test/java/com/ticketing/server/movie/service/MovieTimeServiceImplTest.java b/server/src/test/java/com/ticketing/server/movie/service/MovieTimeServiceImplTest.java index 3785992..a53f83e 100644 --- a/server/src/test/java/com/ticketing/server/movie/service/MovieTimeServiceImplTest.java +++ b/server/src/test/java/com/ticketing/server/movie/service/MovieTimeServiceImplTest.java @@ -9,7 +9,7 @@ import com.ticketing.server.movie.domain.MovieTime; import com.ticketing.server.movie.domain.Theater; import com.ticketing.server.movie.domain.repository.MovieRepository; import com.ticketing.server.movie.domain.repository.MovieTimeRepository; -import com.ticketing.server.movie.service.dto.MovieTimeDTO; +import com.ticketing.server.movie.service.dto.MovieTimeListDTO; import java.time.LocalDate; import java.time.LocalDateTime; import java.util.ArrayList; @@ -39,26 +39,26 @@ public class MovieTimeServiceImplTest { MovieTimeServiceImpl movieTimeService; @Test - @DisplayName("MovieTime Service Test - get empty list when there is no valid movie times") + @DisplayName("MovieTime Service Test - get empty list when there are no valid movie times") void shouldGetEmptyList() { // given Movie movie = new Movie(title, 106L); - when(movieRepository.findByTitle(title)) + when(movieRepository.findByIdAndDeletedAtNull(any())) .thenReturn(Optional.of(movie)); when(movieTimeRepository.findValidMovieTimes(any(), any(), any())) .thenReturn(Collections.emptyList()); // when - List movieTimeDTOList = movieTimeService.getMovieTimes(title, LocalDate.now()); + MovieTimeListDTO movieTimeListDto = movieTimeService.getMovieTimes(any(), LocalDate.now()); // then - assertTrue(movieTimeDTOList.isEmpty()); + assertTrue(movieTimeListDto.getMovieTimeDtos().isEmpty()); } @Test - @DisplayName("MovieTime Service Test - get list when there is valid movie times") + @DisplayName("MovieTime Service Test - get list when there are valid movie times") void shouldGetMovieTimeList() { // given Movie movie = new Movie(title, 106L); @@ -69,17 +69,17 @@ public class MovieTimeServiceImplTest { movieTimes.add(movieTime); - when(movieRepository.findByTitle(title)) + when(movieRepository.findByIdAndDeletedAtNull(any())) .thenReturn(Optional.of(movie)); when(movieTimeRepository.findValidMovieTimes(any(), any(), any())) .thenReturn(movieTimes); // when - List movieTimeDTOList = movieTimeService.getMovieTimes(title, LocalDate.of(2022, 07, 01)); + MovieTimeListDTO movieTimeListDto = movieTimeService.getMovieTimes(any(), LocalDate.of(2022, 07, 01)); // then - assertTrue(!movieTimeDTOList.isEmpty()); + assertTrue(!movieTimeListDto.getMovieTimeDtos().isEmpty()); } }