From 15443d9d24ad56151734faf8e6fdc171eb86d506 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=86=90=EC=B0=BD=ED=98=84?= Date: Sun, 10 Jul 2022 23:38:03 +0900 Subject: [PATCH] add: DUPLICATE MOVIE exception --- .../server/global/exception/ErrorCode.java | 5 +++ .../movie/application/MovieController.java | 17 ++++++++-- .../request/MovieRegisterRequest.java | 5 +++ .../movie/service/MovieServiceImpl.java | 31 ++++++++++++------- .../movie/service/dto/MovieRegisterDTO.java | 4 +++ 5 files changed, 48 insertions(+), 14 deletions(-) diff --git a/server/src/main/java/com/ticketing/server/global/exception/ErrorCode.java b/server/src/main/java/com/ticketing/server/global/exception/ErrorCode.java index cea053a..27ec239 100644 --- a/server/src/main/java/com/ticketing/server/global/exception/ErrorCode.java +++ b/server/src/main/java/com/ticketing/server/global/exception/ErrorCode.java @@ -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); } diff --git a/server/src/main/java/com/ticketing/server/movie/application/MovieController.java b/server/src/main/java/com/ticketing/server/movie/application/MovieController.java index a395f71..570c890 100644 --- a/server/src/main/java/com/ticketing/server/movie/application/MovieController.java +++ b/server/src/main/java/com/ticketing/server/movie/application/MovieController.java @@ -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 registerMovie(@RequestBody @Valid MovieRegisterRequest request) { - return + public ResponseEntity registerMovie(@RequestBody @Valid MovieRegisterRequest request) { + return ResponseEntity.status(HttpStatus.OK) + .body( + MovieTitleResponse.from( + movieService.registerMovie(request.toMovieRegisterDTO()) + ) + ); } @GetMapping() @ApiOperation(value = "영화 목록 조회") public ResponseEntity getMovies() { - return ResponseEntity.status(HttpStatus.OK).body(MovieListResponse.from(movieService.getMovies())); + return ResponseEntity.status(HttpStatus.OK) + .body( + MovieListResponse.from( + movieService.getMovies() + ) + ); } } diff --git a/server/src/main/java/com/ticketing/server/movie/application/request/MovieRegisterRequest.java b/server/src/main/java/com/ticketing/server/movie/application/request/MovieRegisterRequest.java index 74c7c49..1d2ee4f 100644 --- a/server/src/main/java/com/ticketing/server/movie/application/request/MovieRegisterRequest.java +++ b/server/src/main/java/com/ticketing/server/movie/application/request/MovieRegisterRequest.java @@ -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); + } + } diff --git a/server/src/main/java/com/ticketing/server/movie/service/MovieServiceImpl.java b/server/src/main/java/com/ticketing/server/movie/service/MovieServiceImpl.java index 6aae950..d8b957f 100644 --- a/server/src/main/java/com/ticketing/server/movie/service/MovieServiceImpl.java +++ b/server/src/main/java/com/ticketing/server/movie/service/MovieServiceImpl.java @@ -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 = movieRepository.findByTitle(movieRegisterDto.getTitle()); + + if(movie.isEmpty()) { + return movieRepository.save(movieRegisterDto.toMovie()); + } + + throw ErrorCode. + } + + public List getMovies() { + List movies = movieRepository.findValidMovies(); + + return movies.stream() + .map(MovieDTO::from) + .collect(Collectors.toList()); } - public List getMovies() { - List movies = movieRepository.findValidMovies(); - - return movies.stream() - .map(MovieDTO::from) - .collect(Collectors.toList()); - - } - } diff --git a/server/src/main/java/com/ticketing/server/movie/service/dto/MovieRegisterDTO.java b/server/src/main/java/com/ticketing/server/movie/service/dto/MovieRegisterDTO.java index 787d845..08c8ad2 100644 --- a/server/src/main/java/com/ticketing/server/movie/service/dto/MovieRegisterDTO.java +++ b/server/src/main/java/com/ticketing/server/movie/service/dto/MovieRegisterDTO.java @@ -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); + } }