refactor: find List<MovieTime> with native query

This commit is contained in:
손창현
2022-07-01 03:18:57 +09:00
parent d731cf0067
commit 237c32c323
4 changed files with 24 additions and 9 deletions

View File

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

View File

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

View File

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

View File

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