-
Notifications
You must be signed in to change notification settings - Fork 0
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
6 changed files
with
234 additions
and
0 deletions.
There are no files selected for viewing
27 changes: 27 additions & 0 deletions
27
src/main/java/com/mookive/mookive_backend/movie/application/dto/response/MovieResponse.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,27 @@ | ||
package com.mookive.mookive_backend.movie.application.dto.response; | ||
|
||
import lombok.Builder; | ||
import lombok.Getter; | ||
import lombok.NoArgsConstructor; | ||
|
||
public class MovieResponse { | ||
|
||
@Getter | ||
@NoArgsConstructor | ||
public static class MovieDetailResponse { | ||
private String title; | ||
private String director; | ||
private String genre; | ||
private String year; | ||
private String plot; | ||
|
||
@Builder | ||
public MovieDetailResponse(String title, String director, String genre, String year, String plot) { | ||
this.title = title; | ||
this.director = director; | ||
this.genre = genre; | ||
this.year = year; | ||
this.plot = plot; | ||
} | ||
} | ||
} |
17 changes: 17 additions & 0 deletions
17
src/main/java/com/mookive/mookive_backend/movie/application/mapper/MovieMapper.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,17 @@ | ||
package com.mookive.mookive_backend.movie.application.mapper; | ||
|
||
import com.mookive.mookive_backend.movie.application.dto.response.MovieResponse; | ||
import com.mookive.mookive_backend.movie.domain.entity.Movie; | ||
|
||
public class MovieMapper { | ||
|
||
public static MovieResponse.MovieDetailResponse mapToMovieDetailResponse(Movie movie) { | ||
return MovieResponse.MovieDetailResponse.builder() | ||
.title(movie.getTitle()) | ||
.director(movie.getDirector()) | ||
.genre(movie.getGenre()) | ||
.year(movie.getYear()) | ||
.plot(movie.getPlot()) | ||
.build(); | ||
} | ||
} |
133 changes: 133 additions & 0 deletions
133
src/main/java/com/mookive/mookive_backend/movie/application/service/MovieGetService.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,133 @@ | ||
package com.mookive.mookive_backend.movie.application.service; | ||
|
||
import com.mookive.mookive_backend.movie.application.dto.response.MovieResponse; | ||
import com.mookive.mookive_backend.movie.application.infra.KmdbComponent; | ||
import com.mookive.mookive_backend.movie.application.infra.KoficComponent; | ||
import com.mookive.mookive_backend.movie.application.mapper.MovieMapper; | ||
import com.mookive.mookive_backend.movie.domain.entity.Movie; | ||
import com.mookive.mookive_backend.movie.domain.service.MovieQueryService; | ||
import com.mookive.mookive_backend.movie.domain.service.MovieSaveService; | ||
import lombok.*; | ||
import lombok.extern.slf4j.Slf4j; | ||
import org.json.JSONArray; | ||
import org.json.JSONException; | ||
import org.json.JSONObject; | ||
import org.springframework.beans.factory.annotation.Value; | ||
import org.springframework.stereotype.Service; | ||
|
||
@Service | ||
@RequiredArgsConstructor | ||
@Slf4j | ||
public class MovieGetService { | ||
|
||
private final MovieQueryService movieQueryService; | ||
private final MovieSaveService movieSaveService; | ||
private final KmdbComponent kmdbComponent; | ||
private final KoficComponent koficComponent; | ||
|
||
@Value("${kmdb.service-key}") | ||
private String kmdbServiceKey; | ||
|
||
@Value("${kmdb.collection}") | ||
private String collection; | ||
|
||
@Value("${kofic.service-key}") | ||
private String koficKey; | ||
|
||
/** | ||
TODO: 예외처리 | ||
*/ | ||
public MovieResponse.MovieDetailResponse getMovieInfo(String title) throws JSONException { | ||
Movie movie = movieQueryService.findByTitle(title); | ||
if(movie == null) { | ||
KmdbResponse kmdbResponse = getKmdbResponse(title); | ||
KoficResponse koficResponse = getKoficResponse(title); | ||
movie = Movie.builder() | ||
.title(koficResponse.getTitle()) | ||
.director(kmdbResponse.getDirector()) | ||
.genre(kmdbResponse.getGenre()) | ||
.plot(kmdbResponse.getPlot()) | ||
.year(koficResponse.getYear()) | ||
.build(); | ||
movieSaveService.saveMovie(movie); | ||
} | ||
return MovieMapper.mapToMovieDetailResponse(movie); | ||
} | ||
|
||
private JSONObject getDataResponse(String title) { | ||
JSONObject json = new JSONObject(kmdbComponent.findMovieByTitle(collection, kmdbServiceKey, title, "N")); | ||
JSONArray dataArray = (JSONArray) json.get("Data"); | ||
JSONObject dataObject = (JSONObject) dataArray.get(0); | ||
JSONArray dataResult = (JSONArray) dataObject.get("Result"); | ||
return (JSONObject) dataResult.get(0); | ||
} | ||
|
||
private KmdbResponse getKmdbResponse(String title) { | ||
JSONObject dataObject = getDataResponse(title); | ||
System.out.println(dataObject.toString()); | ||
Object genre = dataObject.get("genre"); | ||
Object director = getDirector(dataObject); | ||
Object plot = getPlotText(dataObject); | ||
return KmdbResponse.builder() | ||
.director((String) director) | ||
.genre((String) genre) | ||
.plot((String) plot) | ||
.build(); | ||
} | ||
|
||
private static Object getPlotText(JSONObject dataObject) { | ||
JSONObject plotObject = (JSONObject) dataObject.get("plots"); | ||
JSONArray plotArray = (JSONArray) plotObject.get("plot"); | ||
JSONObject plotData = (JSONObject) plotArray.get(0); | ||
return plotData.get("plotText"); | ||
} | ||
|
||
private static Object getDirector(JSONObject dataObject) { | ||
JSONObject directorObject = (JSONObject) dataObject.get("directors"); | ||
JSONArray directorArray = (JSONArray) directorObject.get("director"); | ||
JSONObject directorData = (JSONObject) directorArray.get(0); | ||
return directorData.get("directorNm"); | ||
} | ||
|
||
private KoficResponse getKoficResponse(String movieTitle) { | ||
JSONObject json = new JSONObject(koficComponent.findMovieByTitle(koficKey, movieTitle)); | ||
JSONObject jsonObject = (JSONObject) json.get("movieListResult"); | ||
JSONArray dataResult = (JSONArray) jsonObject.get("movieList"); | ||
JSONObject movie = (JSONObject) dataResult.get(0); //결과값이 여러개일 때 문제 | ||
String title = movie.get("movieNm").toString(); | ||
System.out.println(title); | ||
String year = movie.get("openDt").toString().substring(0, 4); | ||
return KoficResponse.builder() | ||
.title(title) | ||
.year(year) | ||
.build(); | ||
} | ||
|
||
@Getter | ||
@NoArgsConstructor(access = AccessLevel.PROTECTED) | ||
private static class KmdbResponse { | ||
private String director; | ||
private String genre; | ||
private String plot; | ||
|
||
@Builder | ||
public KmdbResponse(String director, String genre, String plot) { | ||
this.director = director; | ||
this.genre = genre; | ||
this.plot = plot; | ||
} | ||
} | ||
|
||
@Getter | ||
@NoArgsConstructor(access = AccessLevel.PROTECTED) | ||
private static class KoficResponse { | ||
private String title; | ||
private String year; | ||
|
||
@Builder | ||
public KoficResponse(String title, String year) { | ||
this.title = title; | ||
this.year = year; | ||
} | ||
} | ||
} |
17 changes: 17 additions & 0 deletions
17
src/main/java/com/mookive/mookive_backend/movie/domain/service/MovieQueryService.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,17 @@ | ||
package com.mookive.mookive_backend.movie.domain.service; | ||
|
||
import com.mookive.mookive_backend.movie.domain.entity.Movie; | ||
import com.mookive.mookive_backend.movie.domain.repository.MovieRepository; | ||
import lombok.RequiredArgsConstructor; | ||
import org.springframework.stereotype.Service; | ||
|
||
@Service | ||
@RequiredArgsConstructor | ||
public class MovieQueryService { | ||
|
||
private final MovieRepository movieRepository; | ||
|
||
public Movie findByTitle(String title) { | ||
return movieRepository.findByTitle(title); | ||
} | ||
} |
18 changes: 18 additions & 0 deletions
18
src/main/java/com/mookive/mookive_backend/movie/domain/service/MovieSaveService.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,18 @@ | ||
package com.mookive.mookive_backend.movie.domain.service; | ||
|
||
import com.mookive.mookive_backend.movie.domain.entity.Movie; | ||
import com.mookive.mookive_backend.movie.domain.repository.MovieRepository; | ||
import lombok.RequiredArgsConstructor; | ||
import org.springframework.stereotype.Service; | ||
|
||
@Service | ||
@RequiredArgsConstructor | ||
public class MovieSaveService { | ||
|
||
private final MovieRepository movieRepository; | ||
|
||
public void saveMovie(Movie movie) { | ||
movieRepository.save(movie); | ||
} | ||
|
||
} |
22 changes: 22 additions & 0 deletions
22
src/main/java/com/mookive/mookive_backend/movie/presentation/MovieController.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,22 @@ | ||
package com.mookive.mookive_backend.movie.presentation; | ||
|
||
|
||
import com.mookive.mookive_backend.movie.application.dto.response.MovieResponse; | ||
import com.mookive.mookive_backend.movie.application.service.MovieGetService; | ||
import lombok.RequiredArgsConstructor; | ||
import org.json.JSONException; | ||
import org.springframework.web.bind.annotation.GetMapping; | ||
import org.springframework.web.bind.annotation.RequestParam; | ||
import org.springframework.web.bind.annotation.RestController; | ||
|
||
@RestController | ||
@RequiredArgsConstructor | ||
public class MovieController { | ||
|
||
private final MovieGetService movieGetService; | ||
|
||
@GetMapping("/movie/info") | ||
public MovieResponse.MovieDetailResponse getMovieInfo(@RequestParam String title) throws JSONException { | ||
return movieGetService.getMovieInfo(title); | ||
} | ||
} |