diff --git a/documentation/modules/ROOT/pages/08_rest-client.adoc b/documentation/modules/ROOT/pages/08_rest-client.adoc index 8f8f646..87bbdb5 100644 --- a/documentation/modules/ROOT/pages/08_rest-client.adoc +++ b/documentation/modules/ROOT/pages/08_rest-client.adoc @@ -89,52 +89,68 @@ Create a new `Swapi` Java class in `src/main/java` in the `com.redhat.developers ---- package com.redhat.developers; -import java.util.List; +public class Swapi { -import com.fasterxml.jackson.annotation.JsonProperty; + private String title; + private int episode_id; + private String opening_crawl; + private String director; + private String producer; -public class Swapi { - - private List results; - public Swapi(@JsonProperty("results") List results) { - this.results = results; + public Swapi() { } - public List getResults() { - return results; + public Swapi(String title, int episode_id, String opening_crawl, String director, String producer) { + this.title = title; + this.episode_id = episode_id; + this.opening_crawl = opening_crawl; + this.director = director; + this.producer = producer; } - - public static class Results { - private int episodeId; - private String producer; - private String director; - private String opening_crawl; - - public Results(int episodeId, String producer, String director, String opening_crawl) { - this.episodeId = episodeId; - this.producer = producer; - this.director = director; - this.opening_crawl = opening_crawl; - } - public int getEpisodeId() { - return episodeId; - } - public String getProducer() { - return producer; - } + public String getTitle() { + return title; + } - public String getDirector() { - return director; - } + public void setTitle(String title) { + this.title = title; + } - public String getOpening_crawl() { - return opening_crawl; - } + public int getEpisode_id() { + return episode_id; + } + + public void setEpisode_id(int episode_id) { + this.episode_id = episode_id; + } + + public String getOpening_crawl() { + return opening_crawl; + } + + public void setOpening_crawl(String opening_crawl) { + this.opening_crawl = opening_crawl; + } + + public String getDirector() { + return director; + } + + public void setDirector(String director) { + this.director = director; + } + + public String getProducer() { + return producer; + } + + public void setProducer(String producer) { + this.producer = producer; } } + ---- === Create SwapiService @@ -148,25 +164,23 @@ Create a new `SwapiService` Java interface in `src/main/java` in the `com.redhat ---- package com.redhat.developers; -import org.eclipse.microprofile.rest.client.inject.RegisterRestClient; import jakarta.ws.rs.GET; import jakarta.ws.rs.Path; +import jakarta.ws.rs.PathParam; import jakarta.ws.rs.Produces; -import jakarta.ws.rs.QueryParam; import jakarta.ws.rs.core.MediaType; +import org.eclipse.microprofile.rest.client.inject.RegisterRestClient; -import com.redhat.developers.Swapi.Results; - -@Path("/api") @RegisterRestClient public interface SwapiService { + @GET - @Path("/films") @Produces(MediaType.APPLICATION_JSON) - Swapi getMovieByTitle(@QueryParam("search") String title); - + @Path("/films/{id}") + public Swapi getFilmById(@PathParam("id") String id); } + ---- == Configure REST Client properties @@ -176,7 +190,7 @@ Add the following properties to your `application.properties` in `src/main/resou [.console-input] [source,properties] ---- -quarkus.rest-client."com.redhat.developers.SwapiService".url=https://swapi.dev +quarkus.rest-client."com.redhat.developers.SwapiService".url=https://swapi.info/api ---- == Create MovieDTO @@ -191,38 +205,36 @@ Create a new `MovieDTO` Java class in `src/main/java` in the `com.redhat.develop package com.redhat.developers; import java.sql.Date; -import java.util.List; - -import com.redhat.developers.Swapi.Results; public class MovieDTO { + private String title; private Date releaseDate; - private int episodeId; - private String producer; - private String director; + private int episode_id; private String opening_crawl; + private String director; + private String producer; - private MovieDTO(String title, Date releaseDate, int episodeId, String producer, String director, String opening_crawl) { + public MovieDTO() { + } + + private MovieDTO(String title, Date releaseDate, int episode_id, String opening_crawl, String director, String producer) { this.title = title; this.releaseDate = releaseDate; - this.episodeId = episodeId; - this.producer = producer; - this.director = director; + this.episode_id = episode_id; this.opening_crawl = opening_crawl; + this.director = director; + this.producer = producer; } - public static MovieDTO of(Movie movie, Swapi swapi){ - List results = swapi.getResults(); - Results result = results.get(0); - + public static MovieDTO of(Movie movie, Swapi swapi) { return new MovieDTO( - movie.title, - movie.releaseDate, - result.getEpisodeId(), - result.getProducer(), - result.getDirector(), - result.getOpening_crawl() + movie.title, + movie.releaseDate, + swapi.getEpisode_id(), + swapi.getOpening_crawl(), + swapi.getDirector(), + swapi.getProducer() ); } @@ -230,26 +242,51 @@ public class MovieDTO { return title; } + public void setTitle(String title) { + this.title = title; + } + public Date getReleaseDate() { return releaseDate; } - public int getEpisodeId() { - return episodeId; + public void setReleaseDate(Date releaseDate) { + this.releaseDate = releaseDate; } - public String getProducer() { - return producer; + public int getEpisode_id() { + return episode_id; } - public String getDirector() { - return director; + public void setEpisode_id(int episode_id) { + this.episode_id = episode_id; } public String getOpening_crawl() { return opening_crawl; } + + public void setOpening_crawl(String opening_crawl) { + this.opening_crawl = opening_crawl; + } + + public String getDirector() { + return director; + } + + public void setDirector(String director) { + this.director = director; + } + + public String getProducer() { + return producer; + } + + public void setProducer(String producer) { + this.producer = producer; + } } + ---- == Change MovieResource to use SwapiService @@ -263,41 +300,35 @@ Change the `MovieResource` Java class in `src/main/java` in the `com.redhat.deve ---- package com.redhat.developers; -import java.util.List; -import java.util.stream.Collectors; - -import org.eclipse.microprofile.rest.client.inject.RestClient; - -import jakarta.inject.Inject; import jakarta.transaction.Transactional; -import jakarta.ws.rs.Consumes; -import jakarta.ws.rs.GET; -import jakarta.ws.rs.POST; -import jakarta.ws.rs.Path; -import jakarta.ws.rs.Produces; -import jakarta.ws.rs.QueryParam; +import jakarta.ws.rs.*; import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.core.Response; -import jakarta.ws.rs.core.Response.Status; +import org.eclipse.microprofile.rest.client.inject.RestClient; -@Path("/movie") +import java.util.List; +import java.util.stream.Collectors; + +@Path("movie") +@Produces(MediaType.APPLICATION_JSON) public class MovieResource { @RestClient - @Inject SwapiService swapiService; @GET - @Produces(MediaType.APPLICATION_JSON) - public List movies(@QueryParam("year") String year) { + public List getMovie(@QueryParam("year") String year) { + if (year != null) { - return Movie.findByYear(Integer.parseInt(year)).stream() - .map(movie -> MovieDTO.of(movie, swapiService.getMovieByTitle(movie.title))) - .collect(Collectors.toList()); + return Movie.findByYear(Integer.parseInt(year)).stream() + .map(movie -> MovieDTO.of(movie, swapiService.getFilmById(String.valueOf(movie.id)))) + .collect(Collectors.toList()); + } else{ + return Movie.listAll().stream() + .map(movie -> MovieDTO.of(movie, swapiService.getFilmById(String.valueOf(movie.id)))) + .collect(Collectors.toList()); } - return Movie.listAll().stream() - .map(movie -> MovieDTO.of(movie, swapiService.getMovieByTitle(movie.title))) - .collect(Collectors.toList()); + } @Transactional @@ -307,9 +338,10 @@ public class MovieResource { public Response newMovie(Movie movie) { movie.id = null; movie.persist(); - return Response.status(Status.CREATED).entity(movie).build(); + return Response.status(Response.Status.CREATED).entity(movie).build(); } } + ---- == Invoke the endpoint