feat: getMovieTimes API
This commit is contained in:
@@ -19,6 +19,7 @@ public enum ErrorCode {
|
||||
|
||||
/* 404 NOT_FOUND : Resource 를 찾을 수 없음 */
|
||||
EMAIL_NOT_FOUND(NOT_FOUND, "해당 이메일을 찾을 수 없습니다."),
|
||||
MOVIE_NOT_FOUND(NOT_FOUND, "해당 제목의 영화를 찾을 수 없습니다."),
|
||||
REFRESH_TOKEN_NOT_FOUND(NOT_FOUND, "리프레쉬 토큰을 찾을 수 없습니다."),
|
||||
|
||||
/* 409 CONFLICT : Resource 의 현재 상태와 충돌. 보통 중복된 데이터 존재 */
|
||||
|
||||
@@ -54,6 +54,7 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
|
||||
.antMatchers(HttpMethod.POST, "/api/auth/refresh").permitAll()
|
||||
.antMatchers(HttpMethod.POST, "/api/users").permitAll()
|
||||
.antMatchers("/api/movies/**").permitAll()
|
||||
.antMatchers("/api/movieTimes/**").permitAll()
|
||||
.antMatchers("/l7check").permitAll()
|
||||
.antMatchers("/actuator/**").permitAll()
|
||||
.antMatchers("/api/v3/", "/swagger-ui/**", "/swagger/", "/swagger-resources/**", "/v3/api-docs").permitAll()
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
package com.ticketing.server.movie.application;
|
||||
|
||||
import com.ticketing.server.movie.application.response.MovieTimeListResponse;
|
||||
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 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.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/api/movieTimes")
|
||||
@Api(value = "MovieTime API", tags = {"Movie Time"})
|
||||
@RequiredArgsConstructor
|
||||
@Slf4j
|
||||
public class MovieTimeController {
|
||||
|
||||
private final MovieTimeService movieTimeService;
|
||||
|
||||
@GetMapping
|
||||
@ApiOperation(value = "영화 시간표 조회")
|
||||
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)));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -1,8 +0,0 @@
|
||||
package com.ticketing.server.movie.application;
|
||||
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
@RestController
|
||||
public class MovieTimesController {
|
||||
|
||||
}
|
||||
@@ -1,6 +1,5 @@
|
||||
package com.ticketing.server.movie.application.response;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import com.ticketing.server.movie.service.dto.MovieDto;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import java.util.List;
|
||||
@@ -13,7 +12,6 @@ import lombok.Getter;
|
||||
public class MovieListResponse {
|
||||
|
||||
@ApiModelProperty(value = "영화 제목")
|
||||
@JsonProperty
|
||||
private List<MovieDto> movieDtos;
|
||||
|
||||
public static MovieListResponse from(List<MovieDto> movieDtos) {
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
package com.ticketing.server.movie.application.response;
|
||||
|
||||
import com.ticketing.server.movie.service.dto.MovieTimeDto;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import java.util.List;
|
||||
import lombok.AccessLevel;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
@Getter
|
||||
@AllArgsConstructor(access = AccessLevel.PRIVATE)
|
||||
public class MovieTimeListResponse {
|
||||
|
||||
@ApiModelProperty(value = "영화 시간표 정보")
|
||||
private List<MovieTimeDto> movieTimeDtos;
|
||||
|
||||
public static MovieTimeListResponse from(List<MovieTimeDto> movieTimeDtos) {
|
||||
return new MovieTimeListResponse(movieTimeDtos);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
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.LocalDate;
|
||||
import java.time.LocalTime;
|
||||
import javax.persistence.Entity;
|
||||
@@ -35,4 +36,8 @@ public class MovieTime extends AbstractEntity {
|
||||
@NotNull
|
||||
private LocalTime endAt;
|
||||
|
||||
public MovieTimeDto toDto() {
|
||||
return new MovieTimeDto(this.getId(), this.round, this.theater.getTheaterNumber(), this.startAt, this.endAt);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
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.util.List;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
@Repository
|
||||
public interface MovieTimeRepository extends JpaRepository<MovieTime, Long> {
|
||||
|
||||
List<MovieTime> findByMovieAndRunningDate(Movie movie, LocalDate localDate);
|
||||
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
package com.ticketing.server.movie.domain.repository;
|
||||
|
||||
import com.ticketing.server.movie.domain.MovieTime;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
@Repository
|
||||
public interface MovieTimesRepository extends JpaRepository<MovieTime, Long> {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
package com.ticketing.server.movie.service;
|
||||
|
||||
import static com.ticketing.server.global.exception.ErrorCode.MOVIE_NOT_FOUND;
|
||||
|
||||
import com.ticketing.server.global.exception.TicketingException;
|
||||
import com.ticketing.server.movie.domain.Movie;
|
||||
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.interfaces.MovieTimeService;
|
||||
import java.time.LocalDate;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
@Slf4j
|
||||
public class MovieTimeServiceImpl implements MovieTimeService {
|
||||
|
||||
private final MovieRepository movieRepository;
|
||||
|
||||
private final MovieTimeRepository movieTimeRepository;
|
||||
|
||||
@Override
|
||||
public List<MovieTimeDto> getMovieTimes(String title, LocalDate runningDate) {
|
||||
Movie movie = movieRepository.findByTitle(title)
|
||||
.orElseThrow(MovieTimeServiceImpl::throwMovieNotFound);
|
||||
|
||||
List<MovieTime> movieTimes = movieTimeRepository.findByMovieAndRunningDate(movie, runningDate);
|
||||
|
||||
return movieTimes.stream()
|
||||
.map(movieTime -> movieTime.toDto())
|
||||
.collect(Collectors.toList());
|
||||
|
||||
}
|
||||
|
||||
private static RuntimeException throwMovieNotFound() {
|
||||
throw new TicketingException(MOVIE_NOT_FOUND);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,9 +0,0 @@
|
||||
package com.ticketing.server.movie.service;
|
||||
|
||||
import com.ticketing.server.movie.service.interfaces.MovieTimesService;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@Service
|
||||
public class MovieTimesServiceImpl implements MovieTimesService {
|
||||
|
||||
}
|
||||
@@ -1,12 +1,12 @@
|
||||
package com.ticketing.server.movie.service.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
@AllArgsConstructor
|
||||
@Getter
|
||||
public class MovieDto {
|
||||
|
||||
@JsonProperty
|
||||
private String title;
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
package com.ticketing.server.movie.service.dto;
|
||||
|
||||
import java.time.LocalTime;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
@AllArgsConstructor
|
||||
@Getter
|
||||
public class MovieTimeDto {
|
||||
|
||||
private long movieTimeId;
|
||||
|
||||
private Integer theaterNumber;
|
||||
|
||||
private Integer round;
|
||||
|
||||
private LocalTime startAt;
|
||||
|
||||
private LocalTime endAt;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
package com.ticketing.server.movie.service.interfaces;
|
||||
|
||||
import com.ticketing.server.movie.service.dto.MovieTimeDto;
|
||||
import java.time.LocalDate;
|
||||
import java.util.List;
|
||||
|
||||
public interface MovieTimeService {
|
||||
|
||||
List<MovieTimeDto> getMovieTimes(String title, LocalDate runningDate);
|
||||
|
||||
}
|
||||
@@ -1,5 +0,0 @@
|
||||
package com.ticketing.server.movie.service.interfaces;
|
||||
|
||||
public interface MovieTimesService {
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user