refactor: find List<MovieTime> with native query
This commit is contained in:
@@ -32,8 +32,8 @@ public class MovieTime extends AbstractEntity {
|
||||
@NotNull
|
||||
private LocalDateTime endAt;
|
||||
|
||||
public MovieTimeDto toDto() {
|
||||
return new MovieTimeDto(this.getId(), this.round, this.theater.getTheaterNumber(), this.startAt, this.endAt);
|
||||
}
|
||||
// public MovieTimeDto toDto() {
|
||||
// return new MovieTimeDto(this.getId(), this.round, this.theater.getTheaterNumber(), this.startAt, this.endAt);
|
||||
// }
|
||||
|
||||
}
|
||||
|
||||
@@ -1,16 +1,21 @@
|
||||
package com.ticketing.server.movie.domain.repository;
|
||||
|
||||
import com.ticketing.server.movie.domain.Movie;
|
||||
import com.ticketing.server.movie.domain.MovieTime;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalTime;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.data.jpa.repository.Query;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
@Repository
|
||||
public interface MovieTimeRepository extends JpaRepository<MovieTime, Long> {
|
||||
|
||||
List<MovieTime> findByMovieAndRunningDate(Movie movie, LocalDate localDate);
|
||||
@Query(value = "SELECT * "
|
||||
+ "FROM movie_time "
|
||||
+ "WHERE movie_id = :movieId "
|
||||
+ "AND start_at "
|
||||
+ "BETWEEN date_format(start_at, :startOfDay) "
|
||||
+ "AND date_format(start_at, :endOfDay)", nativeQuery = true)
|
||||
List<MovieTime> findValidMovieTimes(long movieId, LocalDateTime startOfDay, LocalDateTime endOfDay);
|
||||
|
||||
}
|
||||
|
||||
@@ -10,6 +10,7 @@ import com.ticketing.server.movie.domain.repository.MovieTimeRepository;
|
||||
import com.ticketing.server.movie.service.dto.MovieTimeDto;
|
||||
import com.ticketing.server.movie.service.interfaces.MovieTimeService;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
@@ -30,10 +31,13 @@ public class MovieTimeServiceImpl implements MovieTimeService {
|
||||
Movie movie = movieRepository.findByTitle(title)
|
||||
.orElseThrow(MovieTimeServiceImpl::throwMovieNotFound);
|
||||
|
||||
List<MovieTime> movieTimes = movieTimeRepository.findByMovieAndRunningDate(movie, runningDate);
|
||||
LocalDateTime startOfDay = runningDate.atStartOfDay();
|
||||
LocalDateTime endOfDay = startOfDay.plusHours(30);
|
||||
|
||||
List<MovieTime> movieTimes = movieTimeRepository.findValidMovieTimes(movie.getId(), startOfDay, endOfDay);
|
||||
|
||||
return movieTimes.stream()
|
||||
.map(movieTime -> movieTime.toDto())
|
||||
.map(MovieTimeDto::from)
|
||||
.collect(Collectors.toList());
|
||||
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.ticketing.server.movie.service.dto;
|
||||
|
||||
import com.ticketing.server.movie.domain.MovieTime;
|
||||
import java.time.LocalDateTime;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
@@ -18,4 +19,9 @@ 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());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user