refactor: register Movie API

This commit is contained in:
손창현
2022-07-14 02:47:32 +09:00
parent a98e3609f2
commit 3c80a86f36
7 changed files with 47 additions and 29 deletions

View File

@@ -5,6 +5,7 @@ import static com.ticketing.server.user.domain.UserGrade.ROLES.STAFF;
import com.ticketing.server.movie.application.request.MovieRegisterRequest;
import com.ticketing.server.movie.application.response.MovieListResponse;
import com.ticketing.server.movie.application.response.MovieInfoResponse;
import com.ticketing.server.movie.service.dto.RegisteredMovieDTO;
import com.ticketing.server.movie.service.interfaces.MovieService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -33,11 +34,11 @@ public class MovieController {
@ApiOperation(value = "영화 정보 등록")
@Secured(STAFF)
public ResponseEntity<MovieInfoResponse> registerMovie(@RequestBody @Valid MovieRegisterRequest request) {
RegisteredMovieDTO registeredMovieDto = movieService.registerMovie(request.getTitle(), request.getRunningTime());
return ResponseEntity.status(HttpStatus.OK)
.body(
MovieInfoResponse.from(
movieService.registerMovie(request.getTitle(), request.getRunningTime())
)
registeredMovieDto.toResponse()
);
}
@@ -46,7 +47,7 @@ public class MovieController {
public ResponseEntity<MovieListResponse> getMovies() {
return ResponseEntity.status(HttpStatus.OK)
.body(
MovieListResponse.from(
new MovieListResponse(
movieService.getMovies()
)
);

View File

@@ -1,13 +1,11 @@
package com.ticketing.server.movie.application.response;
import com.ticketing.server.movie.service.dto.MovieDTO;
import io.swagger.annotations.ApiModelProperty;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Getter;
@Getter
@AllArgsConstructor(access = AccessLevel.PRIVATE)
@AllArgsConstructor
public class MovieInfoResponse {
@ApiModelProperty(value = "영화 ID")
@@ -16,8 +14,4 @@ public class MovieInfoResponse {
@ApiModelProperty(value = "영화 제목")
private String title;
public static MovieInfoResponse from(MovieDTO movieDto) {
return new MovieInfoResponse(movieDto.getMovieId(), movieDto.getTitle());
}
}

View File

@@ -3,19 +3,14 @@ package com.ticketing.server.movie.application.response;
import com.ticketing.server.movie.service.dto.MovieDTO;
import io.swagger.annotations.ApiModelProperty;
import java.util.List;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Getter;
@Getter
@AllArgsConstructor(access = AccessLevel.PRIVATE)
@AllArgsConstructor
public class MovieListResponse {
@ApiModelProperty(value = "영화 제목")
private List<MovieDTO> movieDtos;
public static MovieListResponse from(List<MovieDTO> movieDtos) {
return new MovieListResponse(movieDtos);
}
}

View File

@@ -1,7 +1,7 @@
package com.ticketing.server.movie.domain;
import com.ticketing.server.global.dto.repository.AbstractEntity;
import javax.persistence.Column;
import com.ticketing.server.movie.service.dto.MovieDTO;
import javax.persistence.Entity;
import javax.validation.constraints.NotNull;
import lombok.AccessLevel;
@@ -27,4 +27,8 @@ public class Movie extends AbstractEntity {
this.runningTime = runningTime;
}
public MovieDTO toMovieDTO() {
return new MovieDTO(this.id, this.title);
}
}

View File

@@ -4,7 +4,7 @@ import com.ticketing.server.global.exception.ErrorCode;
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.dto.RegisteredMovieDTO;
import com.ticketing.server.movie.service.interfaces.MovieService;
import java.util.List;
import java.util.Optional;
@@ -21,7 +21,7 @@ public class MovieServiceImpl implements MovieService {
private final MovieRepository movieRepository;
@Override
public MovieDTO registerMovie(String title, Long runningTime) {
public RegisteredMovieDTO registerMovie(String title, Long runningTime) {
Optional<Movie> movie = movieRepository.findValidMovieWithTitle(title);
if(movie.isEmpty()) {
@@ -29,7 +29,7 @@ public class MovieServiceImpl implements MovieService {
new Movie(title, runningTime)
);
return new MovieDTO(newMovie.getId(), newMovie.getTitle());
return new RegisteredMovieDTO(newMovie);
}
throw ErrorCode.throwDuplicateMovie();
@@ -40,9 +40,8 @@ public class MovieServiceImpl implements MovieService {
List<Movie> movies = movieRepository.findValidMovies();
return movies.stream()
.map(MovieDTO::from)
.map(movie -> movie.toMovieDTO())
.collect(Collectors.toList());
}
}

View File

@@ -0,0 +1,28 @@
package com.ticketing.server.movie.service.dto;
import com.ticketing.server.movie.application.response.MovieInfoResponse;
import com.ticketing.server.movie.domain.Movie;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Getter;
@Getter
@AllArgsConstructor(access = AccessLevel.PRIVATE)
public class RegisteredMovieDTO {
private final Long id;
private final String title;
public RegisteredMovieDTO(Movie movie) {
this(
movie.getId(),
movie.getTitle()
);
}
public MovieInfoResponse toResponse() {
return new MovieInfoResponse(id, title);
}
}

View File

@@ -1,15 +1,12 @@
package com.ticketing.server.movie.service.interfaces;
import com.ticketing.server.movie.domain.Movie;
import com.ticketing.server.movie.service.dto.MovieDTO;
import com.ticketing.server.movie.service.dto.MovieRegisterDTO;
import com.ticketing.server.movie.service.dto.RegisteredMovieDTO;
import java.util.List;
public interface MovieService {
MovieDTO registerMovie(String title, Long runningTime);
RegisteredMovieDTO registerMovie(String title, Long runningTime);
List<MovieDTO> getMovies();
Movie findValidMovieWithTitle(String title);
}