refactor: get movie times API

This commit is contained in:
손창현
2022-07-15 00:40:58 +09:00
parent d80a370232
commit 43674f8f66
9 changed files with 53 additions and 31 deletions

View File

@@ -1,11 +1,13 @@
package com.ticketing.server.movie.application;
import com.ticketing.server.movie.application.response.MovieTimeListResponse;
import com.ticketing.server.movie.service.dto.MovieTimeListDTO;
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.constraints.NotNull;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.format.annotation.DateTimeFormat;
@@ -24,16 +26,20 @@ 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<MovieTimeListResponse> 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)));
}
@GetMapping
@ApiOperation(value = "영화 시간표 조회")
@Validated
public ResponseEntity<MovieTimeListResponse> 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()
);
}
}

View File

@@ -8,14 +8,10 @@ import lombok.AllArgsConstructor;
import lombok.Getter;
@Getter
@AllArgsConstructor(access = AccessLevel.PRIVATE)
@AllArgsConstructor
public class MovieTimeListResponse {
@ApiModelProperty(value = "영화 시간표 정보")
private List<MovieTimeDTO> movieTimeDTOS;
public static MovieTimeListResponse from(List<MovieTimeDTO> movieTimeDtos) {
return new MovieTimeListResponse(movieTimeDtos);
}
private List<MovieTimeDTO> movieTimeDtos;
}

View File

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

View File

@@ -6,6 +6,7 @@ import com.ticketing.server.movie.domain.MovieTime;
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 com.ticketing.server.movie.service.interfaces.MovieTimeService;
import java.time.LocalDate;
import java.time.LocalDateTime;
@@ -25,8 +26,8 @@ public class MovieTimeServiceImpl implements MovieTimeService {
private final MovieTimeRepository movieTimeRepository;
@Override
public List<MovieTimeDTO> getMovieTimes(String title, LocalDate runningDate) {
Movie movie = movieRepository.findByTitle(title)
public MovieTimeListDTO getMovieTimes(Long movieId, LocalDate runningDate) {
Movie movie = movieRepository.findByIdAndDeletedAtNull(movieId)
.orElseThrow(ErrorCode::throwMovieNotFound);
LocalDateTime startOfDay = runningDate.atStartOfDay().plusHours(6);
@@ -34,10 +35,11 @@ public class MovieTimeServiceImpl implements MovieTimeService {
List<MovieTime> movieTimes = movieTimeRepository.findValidMovieTimes(movie, startOfDay, endOfDay);
return movieTimes.stream()
.map(MovieTimeDTO::from)
List<MovieTimeDTO> movieTimeDtos = movieTimes.stream()
.map(movieTime -> movieTime.toMovieTimeDTO())
.collect(Collectors.toList());
return new MovieTimeListDTO(movieTimeDtos);
}
}

View File

@@ -6,7 +6,7 @@ import lombok.AllArgsConstructor;
import lombok.Getter;
@Getter
@AllArgsConstructor()
@AllArgsConstructor
public class MovieListDTO {
private final List<MovieDTO> movieDtos;

View File

@@ -21,4 +21,5 @@ public class MovieRegisterDTO {
public Movie toMovie() {
return new Movie(this.title, this.runningTime);
}
}

View File

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

View File

@@ -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<MovieTimeDTO> movieTimeDtos;
public MovieTimeListResponse toResponse() {
return new MovieTimeListResponse(movieTimeDtos);
}
}

View File

@@ -1,11 +1,10 @@
package com.ticketing.server.movie.service.interfaces;
import com.ticketing.server.movie.service.dto.MovieTimeDTO;
import com.ticketing.server.movie.service.dto.MovieTimeListDTO;
import java.time.LocalDate;
import java.util.List;
public interface MovieTimeService {
List<MovieTimeDTO> getMovieTimes(String title, LocalDate runningDate);
MovieTimeListDTO getMovieTimes(Long movieId, LocalDate runningDate);
}