From 237c32c3232a16ee81cce5df3b5fef009bc2486e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=86=90=EC=B0=BD=ED=98=84?= Date: Fri, 1 Jul 2022 03:18:57 +0900 Subject: [PATCH] refactor: find List with native query --- .../ticketing/server/movie/domain/MovieTime.java | 6 +++--- .../domain/repository/MovieTimeRepository.java | 13 +++++++++---- .../server/movie/service/MovieTimeServiceImpl.java | 8 ++++++-- .../server/movie/service/dto/MovieTimeDto.java | 6 ++++++ 4 files changed, 24 insertions(+), 9 deletions(-) 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 78b584f..9ad3ed7 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 @@ -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); +// } } 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 df40c2f..8f65553 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 @@ -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 { - List 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 findValidMovieTimes(long movieId, 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 e67697f..59bfb22 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 @@ -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 movieTimes = movieTimeRepository.findByMovieAndRunningDate(movie, runningDate); + LocalDateTime startOfDay = runningDate.atStartOfDay(); + LocalDateTime endOfDay = startOfDay.plusHours(30); + + List movieTimes = movieTimeRepository.findValidMovieTimes(movie.getId(), startOfDay, endOfDay); return movieTimes.stream() - .map(movieTime -> movieTime.toDto()) + .map(MovieTimeDto::from) .collect(Collectors.toList()); } 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 0441b55..c865d76 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,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()); + } + }