diff --git a/.idea/encodings.xml b/.idea/encodings.xml index 23e4f14..3b9bab3 100644 --- a/.idea/encodings.xml +++ b/.idea/encodings.xml @@ -1,8 +1,11 @@ - + + + + \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml new file mode 100644 index 0000000..d83aa6e --- /dev/null +++ b/.idea/jarRepositories.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml new file mode 100644 index 0000000..2b63946 --- /dev/null +++ b/.idea/uiDesigner.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 4aecfdd..9b232dd 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -1,11 +1,10 @@ + + - - - - - - \ No newline at end of file diff --git a/movie-catalog-service/src/main/java/io/javabrains/moviecatalogservice/MovieCatalogServiceApplication.java b/movie-catalog-service/src/main/java/io/javabrains/moviecatalogservice/MovieCatalogServiceApplication.java index 77a2858..5fc0162 100644 --- a/movie-catalog-service/src/main/java/io/javabrains/moviecatalogservice/MovieCatalogServiceApplication.java +++ b/movie-catalog-service/src/main/java/io/javabrains/moviecatalogservice/MovieCatalogServiceApplication.java @@ -2,6 +2,10 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.client.loadbalancer.LoadBalanced; +import org.springframework.context.annotation.Bean; +import org.springframework.web.client.RestTemplate; +import org.springframework.web.reactive.function.client.WebClient; @SpringBootApplication public class MovieCatalogServiceApplication { @@ -10,5 +14,16 @@ public static void main(String[] args) { SpringApplication.run(MovieCatalogServiceApplication.class, args); } + @LoadBalanced + @Bean + public RestTemplate getRestTemplate(){ + return new RestTemplate(); + } + + @Bean + public WebClient.Builder getWebClientBuilder(){ + return WebClient.builder(); + } + } diff --git a/movie-catalog-service/src/main/java/io/javabrains/moviecatalogservice/models/CatalogItem.java b/movie-catalog-service/src/main/java/io/javabrains/moviecatalogservice/models/CatalogItem.java new file mode 100644 index 0000000..6ced518 --- /dev/null +++ b/movie-catalog-service/src/main/java/io/javabrains/moviecatalogservice/models/CatalogItem.java @@ -0,0 +1,42 @@ +package io.javabrains.moviecatalogservice.models; + +public class CatalogItem { + + private String name; + private String desc; + private int rating; + + + public CatalogItem() { + } + + public CatalogItem(String name, String desc, int rating) { + this.name = name; + this.desc = desc; + this.rating = rating; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getDesc() { + return desc; + } + + public void setDesc(String desc) { + this.desc = desc; + } + + public int getRating() { + return rating; + } + + public void setRating(int rating) { + this.rating = rating; + } +} diff --git a/movie-catalog-service/src/main/java/io/javabrains/moviecatalogservice/models/Movie.java b/movie-catalog-service/src/main/java/io/javabrains/moviecatalogservice/models/Movie.java new file mode 100644 index 0000000..a1f4a20 --- /dev/null +++ b/movie-catalog-service/src/main/java/io/javabrains/moviecatalogservice/models/Movie.java @@ -0,0 +1,31 @@ +package io.javabrains.moviecatalogservice.models; + +public class Movie { + + private String movieId; + private String name; + + public Movie() { + } + + public Movie(String movieId, String name) { + this.movieId = movieId; + this.name = name; + } + + public String getMovieId() { + return movieId; + } + + public void setMovieId(String movieId) { + this.movieId = movieId; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} diff --git a/movie-catalog-service/src/main/java/io/javabrains/moviecatalogservice/models/Rating.java b/movie-catalog-service/src/main/java/io/javabrains/moviecatalogservice/models/Rating.java new file mode 100644 index 0000000..22c9a70 --- /dev/null +++ b/movie-catalog-service/src/main/java/io/javabrains/moviecatalogservice/models/Rating.java @@ -0,0 +1,31 @@ +package io.javabrains.moviecatalogservice.models; + +public class Rating { + + private String movieId; + private int rating; + + public Rating() { + } + + public Rating(String movieId, int rating) { + this.movieId = movieId; + this.rating = rating; + } + + public String getMovieId() { + return movieId; + } + + public void setMovieId(String movieId) { + this.movieId = movieId; + } + + public int getRating() { + return rating; + } + + public void setRating(int rating) { + this.rating = rating; + } +} diff --git a/movie-catalog-service/src/main/java/io/javabrains/moviecatalogservice/models/UserRating.java b/movie-catalog-service/src/main/java/io/javabrains/moviecatalogservice/models/UserRating.java new file mode 100644 index 0000000..95dbfae --- /dev/null +++ b/movie-catalog-service/src/main/java/io/javabrains/moviecatalogservice/models/UserRating.java @@ -0,0 +1,23 @@ +package io.javabrains.moviecatalogservice.models; + +import java.util.List; + +public class UserRating { + + private List ratings; + + public UserRating() { + } + + public UserRating(List ratings) { + this.ratings = ratings; + } + + public List getRatings() { + return ratings; + } + + public void setRatings(List ratings) { + this.ratings = ratings; + } +} diff --git a/movie-catalog-service/src/main/java/io/javabrains/moviecatalogservice/resources/MovieCatalogResource.java b/movie-catalog-service/src/main/java/io/javabrains/moviecatalogservice/resources/MovieCatalogResource.java new file mode 100644 index 0000000..a165b20 --- /dev/null +++ b/movie-catalog-service/src/main/java/io/javabrains/moviecatalogservice/resources/MovieCatalogResource.java @@ -0,0 +1,52 @@ +package io.javabrains.moviecatalogservice.resources; + +import io.javabrains.moviecatalogservice.models.CatalogItem; +import io.javabrains.moviecatalogservice.models.Movie; +import io.javabrains.moviecatalogservice.models.Rating; +import io.javabrains.moviecatalogservice.models.UserRating; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.client.RestTemplate; +import org.springframework.web.reactive.function.client.WebClient; + +import java.lang.reflect.ParameterizedType; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; + +@RestController +@RequestMapping("/catalog") +public class MovieCatalogResource { + + @Autowired + private RestTemplate restTemplate; + + @Autowired + private WebClient.Builder webClientBuilder; + + @GetMapping("/{userId}") + public List getCatalog(@PathVariable("userId") String userId){ + UserRating ratings = restTemplate.getForObject("http://ratings-data-service/ratingsdata/users/" + userId, UserRating.class); + + return ratings.getRatings().stream() + .map(rating -> { + Movie movie = restTemplate.getForObject("http://movie-info-service/movies/" + rating.getMovieId(), Movie.class); + return new CatalogItem(movie.getName(), "Test", rating.getRating()); + }) + .collect(Collectors.toList()); + } + +} + + + +// movie = webClientBuilder.build() +// .get() +// .uri("http://localhost:9091/movies/" + rating.getMovieId()) +// .retrieve() +// .bodyToMono(Movie.class) +// .block(); diff --git a/movie-catalog-service/src/main/resources/application.properties b/movie-catalog-service/src/main/resources/application.properties index e69de29..097feb5 100644 --- a/movie-catalog-service/src/main/resources/application.properties +++ b/movie-catalog-service/src/main/resources/application.properties @@ -0,0 +1,2 @@ +spring.application.name=movie-catalog-service +server.port=9090 diff --git a/movie-info-service/pom.xml b/movie-info-service/pom.xml index 0ee70dd..f7e2149 100644 --- a/movie-info-service/pom.xml +++ b/movie-info-service/pom.xml @@ -1,6 +1,6 @@ + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 org.springframework.boot @@ -16,6 +16,7 @@ 1.8 + Greenwich.RELEASE @@ -23,6 +24,11 @@ org.springframework.boot spring-boot-starter-web + + org.springframework.cloud + spring-cloud-starter-netflix-eureka-client + + org.springframework.boot @@ -31,6 +37,18 @@ + + + + org.springframework.cloud + spring-cloud-dependencies + ${spring-cloud.version} + pom + import + + + + @@ -40,4 +58,12 @@ - + + + spring-milestones + Spring Milestones + https://repo.spring.io/milestone + + + + \ No newline at end of file diff --git a/movie-info-service/src/main/java/io/javabrains/movieinfoservice/models/Movie.java b/movie-info-service/src/main/java/io/javabrains/movieinfoservice/models/Movie.java new file mode 100644 index 0000000..af0f1f6 --- /dev/null +++ b/movie-info-service/src/main/java/io/javabrains/movieinfoservice/models/Movie.java @@ -0,0 +1,31 @@ +package io.javabrains.movieinfoservice.models; + +public class Movie { + + private String movieId; + private String name; + + public Movie() { + } + + public Movie(String movieId, String name) { + this.movieId = movieId; + this.name = name; + } + + public String getMovieId() { + return movieId; + } + + public void setMovieId(String movieId) { + this.movieId = movieId; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} diff --git a/movie-info-service/src/main/java/io/javabrains/movieinfoservice/resources/MovieResource.java b/movie-info-service/src/main/java/io/javabrains/movieinfoservice/resources/MovieResource.java new file mode 100644 index 0000000..e808201 --- /dev/null +++ b/movie-info-service/src/main/java/io/javabrains/movieinfoservice/resources/MovieResource.java @@ -0,0 +1,22 @@ +package io.javabrains.movieinfoservice.resources; + + +import io.javabrains.movieinfoservice.models.Movie; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/movies") +public class MovieResource { + + @GetMapping("/{movieId}") + public Movie getMovieInfo(@PathVariable("movieId") String movieId){ + + + + return new Movie(movieId, "Test name"); + } + +} diff --git a/movie-info-service/src/main/resources/application.properties b/movie-info-service/src/main/resources/application.properties index e69de29..ca5650a 100644 --- a/movie-info-service/src/main/resources/application.properties +++ b/movie-info-service/src/main/resources/application.properties @@ -0,0 +1,2 @@ +spring.application.name=movie-info-service +server.port=9091 \ No newline at end of file diff --git a/ratings-data-service/pom.xml b/ratings-data-service/pom.xml index 699c8b3..e92c18e 100644 --- a/ratings-data-service/pom.xml +++ b/ratings-data-service/pom.xml @@ -1,6 +1,6 @@ + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 org.springframework.boot @@ -16,6 +16,7 @@ 1.8 + Greenwich.RELEASE @@ -23,6 +24,10 @@ org.springframework.boot spring-boot-starter-web + + org.springframework.cloud + spring-cloud-starter-netflix-eureka-client + org.springframework.boot @@ -31,6 +36,19 @@ + + + + org.springframework.cloud + spring-cloud-dependencies + ${spring-cloud.version} + pom + import + + + + + @@ -40,4 +58,4 @@ - + \ No newline at end of file diff --git a/ratings-data-service/src/main/java/io/javabrains/ratingsdataservice/models/Rating.java b/ratings-data-service/src/main/java/io/javabrains/ratingsdataservice/models/Rating.java new file mode 100644 index 0000000..697d947 --- /dev/null +++ b/ratings-data-service/src/main/java/io/javabrains/ratingsdataservice/models/Rating.java @@ -0,0 +1,31 @@ +package io.javabrains.ratingsdataservice.models; + +public class Rating { + + private String movieId; + private int rating; + + public Rating() { + } + + public Rating(String movieId, int rating) { + this.movieId = movieId; + this.rating = rating; + } + + public String getMovieId() { + return movieId; + } + + public void setMovieId(String movieId) { + this.movieId = movieId; + } + + public int getRating() { + return rating; + } + + public void setRating(int rating) { + this.rating = rating; + } +} diff --git a/ratings-data-service/src/main/java/io/javabrains/ratingsdataservice/models/UserRating.java b/ratings-data-service/src/main/java/io/javabrains/ratingsdataservice/models/UserRating.java new file mode 100644 index 0000000..60e9b40 --- /dev/null +++ b/ratings-data-service/src/main/java/io/javabrains/ratingsdataservice/models/UserRating.java @@ -0,0 +1,23 @@ +package io.javabrains.ratingsdataservice.models; + +import java.util.List; + +public class UserRating { + + private List ratings; + + public UserRating() { + } + + public UserRating(List ratings) { + this.ratings = ratings; + } + + public List getRatings() { + return ratings; + } + + public void setRatings(List ratings) { + this.ratings = ratings; + } +} diff --git a/ratings-data-service/src/main/java/io/javabrains/ratingsdataservice/resources/RatingsDataResource.java b/ratings-data-service/src/main/java/io/javabrains/ratingsdataservice/resources/RatingsDataResource.java new file mode 100644 index 0000000..95b7bc4 --- /dev/null +++ b/ratings-data-service/src/main/java/io/javabrains/ratingsdataservice/resources/RatingsDataResource.java @@ -0,0 +1,33 @@ +package io.javabrains.ratingsdataservice.resources; + +import io.javabrains.ratingsdataservice.models.Rating; +import io.javabrains.ratingsdataservice.models.UserRating; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Arrays; +import java.util.List; + +@RestController +@RequestMapping("/ratingsdata") +public class RatingsDataResource { + + @GetMapping("/{movieId}") + public Rating getRating(@PathVariable("movieId") String movieId){ + return new Rating(movieId, 4); + } + + @GetMapping("/users/{userId}") + public UserRating getRatings(@PathVariable("userId") String userId){ + UserRating userRating = new UserRating(); + userRating.setRatings(Arrays.asList( + new Rating("1234", 4), + new Rating("5678", 5) + )); + + return userRating; + } + +} diff --git a/ratings-data-service/src/main/resources/application.properties b/ratings-data-service/src/main/resources/application.properties index e69de29..d0b0e65 100644 --- a/ratings-data-service/src/main/resources/application.properties +++ b/ratings-data-service/src/main/resources/application.properties @@ -0,0 +1,2 @@ +spring.application.name=ratings-data-service +server.port=9092 \ No newline at end of file