add: DUPLICATE MOVIE exception

This commit is contained in:
손창현
2022-07-10 23:38:03 +09:00
parent 2dd4121782
commit 15443d9d24
5 changed files with 48 additions and 14 deletions

View File

@@ -25,6 +25,7 @@ public enum ErrorCode {
/* 409 CONFLICT : Resource 의 현재 상태와 충돌. 보통 중복된 데이터 존재 */
DUPLICATE_EMAIL(CONFLICT, "이메일이 이미 존재합니다."),
DUPLICATE_MOVIE(CONFLICT, "해당 영화 정보가 이미 존재합니다."),
DELETED_EMAIL(CONFLICT, "이미 삭제된 이메일 입니다.");
private final HttpStatus httpStatus;
@@ -65,6 +66,10 @@ public enum ErrorCode {
throw new TicketingException(DUPLICATE_EMAIL);
}
public static TicketingException throwDuplicateMovie() {
throw new TicketingException(DUPLICATE_MOVIE);
}
public static TicketingException throwDeletedEmail() {
throw new TicketingException(DELETED_EMAIL);
}

View File

@@ -2,6 +2,7 @@ package com.ticketing.server.movie.application;
import com.ticketing.server.movie.application.request.MovieRegisterRequest;
import com.ticketing.server.movie.application.response.MovieListResponse;
import com.ticketing.server.movie.application.response.MovieTitleResponse;
import com.ticketing.server.movie.service.interfaces.MovieService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -29,14 +30,24 @@ public class MovieController {
@PostMapping()
@ApiOperation(value = "영화 정보 등록")
@Secured("ROLE_STAFF")
public ResponseEntity<MovieIdResponse> registerMovie(@RequestBody @Valid MovieRegisterRequest request) {
return
public ResponseEntity<MovieTitleResponse> registerMovie(@RequestBody @Valid MovieRegisterRequest request) {
return ResponseEntity.status(HttpStatus.OK)
.body(
MovieTitleResponse.from(
movieService.registerMovie(request.toMovieRegisterDTO())
)
);
}
@GetMapping()
@ApiOperation(value = "영화 목록 조회")
public ResponseEntity<MovieListResponse> getMovies() {
return ResponseEntity.status(HttpStatus.OK).body(MovieListResponse.from(movieService.getMovies()));
return ResponseEntity.status(HttpStatus.OK)
.body(
MovieListResponse.from(
movieService.getMovies()
)
);
}
}

View File

@@ -1,5 +1,6 @@
package com.ticketing.server.movie.application.request;
import com.ticketing.server.movie.service.dto.MovieRegisterDTO;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
@@ -17,4 +18,8 @@ public class MovieRegisterRequest {
@NotNull(message = "{validation.not.null.runningTime}")
private Long runningTime;
public MovieRegisterDTO toMovieRegisterDTO() {
return new MovieRegisterDTO(this.title, this.runningTime);
}
}

View File

@@ -1,11 +1,14 @@
package com.ticketing.server.movie.service;
import com.ticketing.server.global.exception.ErrorCode;
import com.ticketing.server.movie.application.request.MovieRegisterRequest;
import com.ticketing.server.movie.domain.Movie;
import com.ticketing.server.movie.domain.repository.MovieRepository;
import com.ticketing.server.movie.service.dto.MovieDTO;
import com.ticketing.server.movie.service.dto.MovieRegisterDTO;
import com.ticketing.server.movie.service.interfaces.MovieService;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@@ -16,19 +19,25 @@ import org.springframework.stereotype.Service;
@Slf4j
public class MovieServiceImpl implements MovieService {
private final MovieRepository movieRepository;
private final MovieRepository movieRepository;
public Movie registerMovie(MovieRegisterRequest request) {
public Movie registerMovie(MovieRegisterDTO movieRegisterDto) {
Optional<Movie> movie = movieRepository.findByTitle(movieRegisterDto.getTitle());
if(movie.isEmpty()) {
return movieRepository.save(movieRegisterDto.toMovie());
}
throw ErrorCode.
}
public List<MovieDTO> getMovies() {
List<Movie> movies = movieRepository.findValidMovies();
return movies.stream()
.map(MovieDTO::from)
.collect(Collectors.toList());
}
public List<MovieDTO> getMovies() {
List<Movie> movies = movieRepository.findValidMovies();
return movies.stream()
.map(MovieDTO::from)
.collect(Collectors.toList());
}
}

View File

@@ -1,5 +1,6 @@
package com.ticketing.server.movie.service.dto;
import com.ticketing.server.movie.domain.Movie;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
@@ -17,4 +18,7 @@ public class MovieRegisterDTO {
@NotNull(message = "{validation.not.null.runningTime}")
private Long runningTime;
public Movie toMovie() {
return new Movie(this.title, this.runningTime);
}
}