Skip to content
This repository has been archived by the owner on Nov 9, 2017. It is now read-only.

Commit

Permalink
Merge 9195ea6 into 2a08a84
Browse files Browse the repository at this point in the history
  • Loading branch information
reiphiel committed Sep 25, 2016
2 parents 2a08a84 + 9195ea6 commit 80c6e91
Show file tree
Hide file tree
Showing 5 changed files with 211 additions and 0 deletions.
55 changes: 55 additions & 0 deletions src/main/java/io/codechobo/movie/application/MovieService.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
package io.codechobo.movie.application;

import io.codechobo.movie.domain.Movie;
import io.codechobo.movie.domain.repository.MovieRepository;
import io.codechobo.movie.dto.MovieDto;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.validation.Valid;

@Service
@Transactional
public class MovieService {

@Autowired
private MovieRepository movieRepository;

public MovieDto getMovie(final Long no) {
if (no == null) {
throw new IllegalArgumentException();
}
final Movie movie = this.movieRepository.findOne(no);
//TODO 컨버팅 유틸리티 필요
if (movie == null) {
return null;
}
return new MovieDto(movie.getNo(), movie.getTitle(), movie.getGenre(), movie.getRunningTime(), movie.getReleaseDate());
}

public MovieDto registerMovie(@Valid final MovieDto movieDto) {
final Movie movie = this.movieRepository.save(new Movie(movieDto.getTitle(), movieDto.getGenre(), movieDto.getRunningTime(), movieDto.getReleaseDate()));
//TODO 컨버팅 유틸리티 필요
return new MovieDto(movie.getNo(), movie.getTitle(), movie.getGenre(), movie.getRunningTime(), movie.getReleaseDate());
}

public MovieDto modifyMovie(@Valid final MovieDto movieDto) {
if (movieDto.getNo() == null) {
throw new IllegalArgumentException();
}
if (!this.movieRepository.exists(movieDto.getNo())) {
throw new IllegalArgumentException();
}
final Movie movie = this.movieRepository.save(new Movie(movieDto.getNo(), movieDto.getTitle(), movieDto.getGenre(), movieDto.getRunningTime(), movieDto.getReleaseDate()));
return new MovieDto(movie.getNo(), movie.getTitle(), movie.getGenre(), movie.getRunningTime(), movie.getReleaseDate());
}

public void removeMovie(final MovieDto movieDto) {
if (movieDto.getNo() == null) {
throw new IllegalArgumentException();
}
this.movieRepository.delete(movieDto.getNo());
}

}
16 changes: 16 additions & 0 deletions src/main/java/io/codechobo/movie/domain/Movie.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package io.codechobo.movie.domain;

import lombok.Getter;
import lombok.NoArgsConstructor;

import javax.persistence.*;
import java.util.ArrayList;
Expand All @@ -9,6 +10,7 @@

@Entity
@Getter
@NoArgsConstructor
public class Movie {

@GeneratedValue
Expand Down Expand Up @@ -52,6 +54,20 @@ public class Movie {
//TODO 별도의 타입으로?
private List<String> actors = new ArrayList<>();


public Movie(final String title, final String genre, final Integer runningTime, final Date releaseDate) {
this(null, title, genre, runningTime, releaseDate);
}

public Movie(final Long no, final String title, final String genre, final Integer runningTime, final Date releaseDate) {
this.no = no;
this.title = title;
this.genre = genre;
this.runningTime = runningTime;
this.releaseDate = releaseDate;
}


//TODO 영화타입 or 상영타입 or 스크린타입
public enum MovieType {
TWO_DIMENSION,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package io.codechobo.movie.domain.repository;

import io.codechobo.movie.domain.Movie;
import org.springframework.data.jpa.repository.JpaRepository;

public interface MovieRepository extends JpaRepository<Movie, Long> {
}
51 changes: 51 additions & 0 deletions src/main/java/io/codechobo/movie/dto/MovieDto.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package io.codechobo.movie.dto;

import lombok.Getter;
import lombok.Setter;

import java.util.Date;

@Setter
@Getter
public class MovieDto {

private Long no;

/**
* 제목
*/
private String title;

/**
* 장르
*/
private String genre;

/**
* 러닝타임
*/
private Integer runningTime;

/**
* 개봉일
*/
private Date releaseDate;

public MovieDto(final Long no) {
this.no = no;
}

public MovieDto(final String title, final String genre, final Integer runningTime, final Date releaseDate) {
this(null, title, genre, runningTime, releaseDate);
}

public MovieDto(final Long no, final String title, final String genre, final Integer runningTime, final Date releaseDate) {
this.no = no;
this.title = title;
this.genre = genre;
this.runningTime = runningTime;
if (releaseDate!=null) {
this.releaseDate = new Date(releaseDate.getTime());
}
}
}
82 changes: 82 additions & 0 deletions src/test/java/io/codechobo/movie/application/MovieServiceTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
package io.codechobo.movie.application;

import io.codechobo.movie.dto.MovieDto;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.junit4.SpringRunner;

import java.util.Calendar;

import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertThat;


@RunWith(SpringRunner.class)
@SpringBootTest
@ActiveProfiles(profiles = "test")
public class MovieServiceTest {

@Autowired
private MovieService movieService;

@Test
public void 영화_등록__취득_테스트() {
final MovieDto fixture = generateFixture();
final MovieDto registered = this.movieService.registerMovie(fixture);
final MovieDto retrieved = this.movieService.getMovie(registered.getNo());

assertNotNull(registered.getNo());
assertThat(registered.getNo(), is(retrieved.getNo()));
assertThat(registered.getTitle(), is(retrieved.getTitle()));
assertThat(registered.getGenre(), is(retrieved.getGenre()));
assertThat(registered.getRunningTime(), is(retrieved.getRunningTime()));
assertThat(registered.getReleaseDate().getTime(), is(retrieved.getReleaseDate().getTime()));
}

@Test
public void 영화_수정_테스트() {
final MovieDto fixture = generateFixture();
final MovieDto registered = this.movieService.registerMovie(fixture);

registered.setTitle(registered.getTitle()+"_MOD");
registered.setGenre(registered.getGenre()+"_MOD");
registered.setRunningTime(100);
final Calendar calendar = Calendar.getInstance();
calendar.set(2016, 8, 8, 0, 0, 0);
calendar.set(Calendar.MILLISECOND, 0);
registered.setReleaseDate(calendar.getTime());
final MovieDto modified = this.movieService.modifyMovie(registered);

final MovieDto retrieved = this.movieService.getMovie(registered.getNo());

assertNotNull(modified.getNo());
assertThat(modified.getNo(), is(retrieved.getNo()));
assertThat(modified.getTitle(), is(retrieved.getTitle()));
assertThat(modified.getGenre(), is(retrieved.getGenre()));
assertThat(modified.getRunningTime(), is(retrieved.getRunningTime()));
assertThat(modified.getReleaseDate().getTime(), is(retrieved.getReleaseDate().getTime()));
}

@Test
public void 영화_삭제_테스트() {
final MovieDto fixture = generateFixture();
final MovieDto registered = this.movieService.registerMovie(fixture);
this.movieService.removeMovie(new MovieDto(registered.getNo()));
final MovieDto retrieved = this.movieService.getMovie(registered.getNo());
assertNull(retrieved);
}


private MovieDto generateFixture() {
final Calendar calendar = Calendar.getInstance();
calendar.set(2016, 8, 7, 0, 0, 0);
calendar.set(Calendar.MILLISECOND, 0);
return new MovieDto("밀정", "첩보", 140, calendar.getTime());
}

}

0 comments on commit 80c6e91

Please sign in to comment.