This repository has been archived by the owner on Nov 9, 2017. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 7
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
5 changed files
with
211 additions
and
0 deletions.
There are no files selected for viewing
55 changes: 55 additions & 0 deletions
55
src/main/java/io/codechobo/movie/application/MovieService.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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()); | ||
} | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
7 changes: 7 additions & 0 deletions
7
src/main/java/io/codechobo/movie/domain/repository/MovieRepository.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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> { | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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
82
src/test/java/io/codechobo/movie/application/MovieServiceTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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()); | ||
} | ||
|
||
} |