diff --git a/api/api-samples/pom.xml b/api/api-samples/pom.xml new file mode 100644 index 000000000..1f23ed5e4 --- /dev/null +++ b/api/api-samples/pom.xml @@ -0,0 +1,33 @@ + + + + + io.americanexpress.synapse + api + 0.4.10-SNAPSHOT + + + 4.0.0 + api-samples + pom + + + + sample-api-imperative-book + + + diff --git a/api/api-samples/sample-api-imperative-book/pom.xml b/api/api-samples/sample-api-imperative-book/pom.xml new file mode 100644 index 000000000..a7dcf6850 --- /dev/null +++ b/api/api-samples/sample-api-imperative-book/pom.xml @@ -0,0 +1,39 @@ + + + + + + api-samples + io.americanexpress.synapse + 0.4.10-SNAPSHOT + + + 4.0.0 + sample-api-imperative-book + + + + + io.americanexpress.synapse + synapse-api-rest-imperative + + + io.americanexpress.synapse + sample-service-imperative-book + + + diff --git a/api/api-samples/sample-api-imperative-book/src/main/java/io/americanexpress/synapse/api/rest/sample/imperativebook/BookApplication.java b/api/api-samples/sample-api-imperative-book/src/main/java/io/americanexpress/synapse/api/rest/sample/imperativebook/BookApplication.java new file mode 100644 index 000000000..de0471404 --- /dev/null +++ b/api/api-samples/sample-api-imperative-book/src/main/java/io/americanexpress/synapse/api/rest/sample/imperativebook/BookApplication.java @@ -0,0 +1,30 @@ +package io.americanexpress.synapse.api.rest.sample.imperativebook; + +import org.slf4j.ext.XLogger; +import org.slf4j.ext.XLoggerFactory; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +/** + * {@code BookApplication} starts the Spring Boot Application for the book rest sample. + * + * @author Tanvir Islam + */ +@SpringBootApplication() +public class BookApplication { + + /** + * The logger. + */ + private static final XLogger LOGGER = XLoggerFactory.getXLogger(BookApplication.class); + + /** + * Runs the application. + * + * @param args the var args + */ + public static void main(String[] args) { + SpringApplication.run(BookApplication.class, args); + LOGGER.info("Rest Book Imperative Sample Application is up and running..."); + } +} diff --git a/api/api-samples/sample-api-imperative-book/src/main/java/io/americanexpress/synapse/api/rest/sample/imperativebook/config/BookApiConfig.java b/api/api-samples/sample-api-imperative-book/src/main/java/io/americanexpress/synapse/api/rest/sample/imperativebook/config/BookApiConfig.java new file mode 100644 index 000000000..dfb35c6f1 --- /dev/null +++ b/api/api-samples/sample-api-imperative-book/src/main/java/io/americanexpress/synapse/api/rest/sample/imperativebook/config/BookApiConfig.java @@ -0,0 +1,30 @@ +package io.americanexpress.synapse.api.rest.sample.imperativebook.config; + +import com.fasterxml.jackson.databind.ObjectMapper; +import io.americanexpress.service.sample.imperativebook.config.BookServiceConfig; +import io.americanexpress.synapse.api.rest.imperative.config.BaseApiImperativeRestConfig; +import io.americanexpress.synapse.api.rest.imperative.interceptor.MetricInterceptor; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; + +/** + * {@code BookApiConfig} sets configuration for the Book API. + * + * @author Tanvir Islam + */ +@Configuration +@Import(BookServiceConfig.class) +@ComponentScan("io.americanexpress.synapse.api.rest.sample.imperativebook") +public class BookApiConfig extends BaseApiImperativeRestConfig { + + /** + * Constructor taking in objectMapper & metricInterceptor. + * + * @param defaultObjectMapper the default object mapper + * @param interceptor the metric interceptor + */ + public BookApiConfig(ObjectMapper defaultObjectMapper, MetricInterceptor interceptor) { + super(defaultObjectMapper, interceptor); + } +} diff --git a/api/api-samples/sample-api-imperative-book/src/main/java/io/americanexpress/synapse/api/rest/sample/imperativebook/config/BookEndpoint.java b/api/api-samples/sample-api-imperative-book/src/main/java/io/americanexpress/synapse/api/rest/sample/imperativebook/config/BookEndpoint.java new file mode 100644 index 000000000..5223dacac --- /dev/null +++ b/api/api-samples/sample-api-imperative-book/src/main/java/io/americanexpress/synapse/api/rest/sample/imperativebook/config/BookEndpoint.java @@ -0,0 +1,21 @@ +package io.americanexpress.synapse.api.rest.sample.imperativebook.config; + +/** + * {@code BookEndpoint} sets the endpoints for this API. + * + * @author Tanvir Islam + */ +public class BookEndpoint { + + /** + * Private constructor for class with constants. + */ + private BookEndpoint() { + + } + + /** + * Books resource for all endpoints in this API. + */ + public static final String BOOK_ENDPOINT = "/books"; +} diff --git a/api/api-samples/sample-api-imperative-book/src/main/java/io/americanexpress/synapse/api/rest/sample/imperativebook/controller/GetPolyBookController.java b/api/api-samples/sample-api-imperative-book/src/main/java/io/americanexpress/synapse/api/rest/sample/imperativebook/controller/GetPolyBookController.java new file mode 100644 index 000000000..db27908c5 --- /dev/null +++ b/api/api-samples/sample-api-imperative-book/src/main/java/io/americanexpress/synapse/api/rest/sample/imperativebook/controller/GetPolyBookController.java @@ -0,0 +1,19 @@ +package io.americanexpress.synapse.api.rest.sample.imperativebook.controller; + +import io.americanexpress.service.sample.imperativebook.model.GetPolyBookServiceRequest; +import io.americanexpress.service.sample.imperativebook.model.GetPolyBookServiceResponse; +import io.americanexpress.service.sample.imperativebook.service.GetPolyBookService; +import io.americanexpress.synapse.api.rest.imperative.controller.BaseGetPolyImperativeRestController; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import static io.americanexpress.synapse.api.rest.sample.imperativebook.config.BookEndpoint.BOOK_ENDPOINT; + +/** + * {@code GetPolyBookController} gets multiple book resources by a path variable. + * + * @author Tanvir Islam + */ +@RestController +@RequestMapping(BOOK_ENDPOINT) +public class GetPolyBookController extends BaseGetPolyImperativeRestController { +} diff --git a/api/api-samples/sample-api-imperative-book/src/main/java/io/americanexpress/synapse/api/rest/sample/imperativebook/controller/ReadPolyBookController.java b/api/api-samples/sample-api-imperative-book/src/main/java/io/americanexpress/synapse/api/rest/sample/imperativebook/controller/ReadPolyBookController.java new file mode 100644 index 000000000..1571603a1 --- /dev/null +++ b/api/api-samples/sample-api-imperative-book/src/main/java/io/americanexpress/synapse/api/rest/sample/imperativebook/controller/ReadPolyBookController.java @@ -0,0 +1,19 @@ +package io.americanexpress.synapse.api.rest.sample.imperativebook.controller; + +import io.americanexpress.service.sample.imperativebook.model.ReadPolyBookServiceRequest; +import io.americanexpress.service.sample.imperativebook.model.ReadPolyBookServiceResponse; +import io.americanexpress.service.sample.imperativebook.service.ReadPolyBookService; +import io.americanexpress.synapse.api.rest.imperative.controller.BaseReadPolyImperativeRestController; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import static io.americanexpress.synapse.api.rest.sample.imperativebook.config.BookEndpoint.BOOK_ENDPOINT; + +/** + * {@code ReadPolyBookController} reads multiple book resources with specific criteria + * + * @author Tanvir Islam + */ +@RestController +@RequestMapping(BOOK_ENDPOINT) +public class ReadPolyBookController extends BaseReadPolyImperativeRestController { +} diff --git a/api/api-samples/sample-api-imperative-book/src/test/resources/read-poly-book-service-request.json b/api/api-samples/sample-api-imperative-book/src/test/resources/read-poly-book-service-request.json new file mode 100644 index 000000000..b1a793746 --- /dev/null +++ b/api/api-samples/sample-api-imperative-book/src/test/resources/read-poly-book-service-request.json @@ -0,0 +1,7 @@ +{ + "author": "j.k. rowling", + "pageInformation": { + "page": "1", + "size": "1" + } +} diff --git a/api/synapse-api-rest-imperative/src/main/java/io/americanexpress/synapse/api/rest/imperative/controller/BaseGetPolyImperativeRestController.java b/api/synapse-api-rest-imperative/src/main/java/io/americanexpress/synapse/api/rest/imperative/controller/BaseGetPolyImperativeRestController.java new file mode 100644 index 000000000..323734dbe --- /dev/null +++ b/api/synapse-api-rest-imperative/src/main/java/io/americanexpress/synapse/api/rest/imperative/controller/BaseGetPolyImperativeRestController.java @@ -0,0 +1,58 @@ +package io.americanexpress.synapse.api.rest.imperative.controller; + +import io.americanexpress.synapse.api.rest.imperative.controller.helpers.PolyResponseEntityCreator; +import io.americanexpress.synapse.service.imperative.model.BaseServiceRequest; +import io.americanexpress.synapse.service.imperative.model.BaseServiceResponse; +import io.americanexpress.synapse.service.imperative.model.PageResponse; +import io.americanexpress.synapse.service.imperative.service.BaseService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.responses.ApiResponses; +import org.springframework.http.HttpHeaders; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestHeader; +import java.util.List; + +/** + * {@code BaseGetPolyImperativeRestController} class specifies the prototypes for listening for requests from the consumer + * to Read (GET) a resource. This Controller expects no request and a list of objects as response, hence, "Poly" in the name. + * + * @param an object extending {@link BaseServiceRequest} + * @param an object extending {@link BaseServiceResponse} + * @param an object extending {@link BaseService} + * @author Tanvir Islam + */ +public class BaseGetPolyImperativeRestController< + I extends BaseServiceRequest, + O extends BaseServiceResponse, + S extends BaseService> + > extends BaseController { + + /** + * Get a list of multiple resources from the back end service. + * + * @param httpHeaders containing the HTTP headers from the consumer + * @param serviceRequest body from the consumer + * @return a list of resources from the back end service + */ + @Operation(summary = "Read operation based on path.", description = "Read a collection of resources based on request criteria.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "Ok"), + @ApiResponse(responseCode = "204", description = "No Content"), + @ApiResponse(responseCode = "400", description = "Bad Request"), + @ApiResponse(responseCode = "401", description = "Unauthorized"), + @ApiResponse(responseCode = "403", description = "Forbidden"), + @ApiResponse(responseCode = "404", description = "Not Found") + }) + @GetMapping + public ResponseEntity> read(@RequestHeader HttpHeaders httpHeaders, I serviceRequest) { + logger.entry(serviceRequest); + + final PageResponse page = service.execute(serviceRequest); + final ResponseEntity> responseEntity = PolyResponseEntityCreator.create(page); + + logger.exit(responseEntity); + return responseEntity; + } +} diff --git a/api/synapse-api-rest-imperative/src/main/java/io/americanexpress/synapse/api/rest/imperative/controller/helpers/PolyResponseEntityCreator.java b/api/synapse-api-rest-imperative/src/main/java/io/americanexpress/synapse/api/rest/imperative/controller/helpers/PolyResponseEntityCreator.java index ae201c852..aa80ae0af 100644 --- a/api/synapse-api-rest-imperative/src/main/java/io/americanexpress/synapse/api/rest/imperative/controller/helpers/PolyResponseEntityCreator.java +++ b/api/synapse-api-rest-imperative/src/main/java/io/americanexpress/synapse/api/rest/imperative/controller/helpers/PolyResponseEntityCreator.java @@ -39,7 +39,7 @@ public static ResponseEntity> create(Pag final ResponseEntity> responseEntity; List pageContent = null; if (page != null) { - pageContent = page.getResponsesForPage(); + pageContent = page.getPageSize() > 0 ? page.getResponsesForPage() : page.getResponses(); } if (page == null || CollectionUtils.isEmpty(pageContent)) { responseEntity = new ResponseEntity<>(HttpStatus.NO_CONTENT); diff --git a/service/service-samples/sample-service-imperative-book/src/main/java/io/americanexpress/service/sample/imperativebook/config/BookServiceConfig.java b/service/service-samples/sample-service-imperative-book/src/main/java/io/americanexpress/service/sample/imperativebook/config/BookServiceConfig.java index 8c5d2017d..addee493b 100644 --- a/service/service-samples/sample-service-imperative-book/src/main/java/io/americanexpress/service/sample/imperativebook/config/BookServiceConfig.java +++ b/service/service-samples/sample-service-imperative-book/src/main/java/io/americanexpress/service/sample/imperativebook/config/BookServiceConfig.java @@ -14,12 +14,16 @@ package io.americanexpress.service.sample.imperativebook.config; import io.americanexpress.synapse.service.imperative.config.BaseImperativeServiceConfig; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; /** * The type Book service config. * * @author Francois Gutt */ +@Configuration +@ComponentScan("io.americanexpress.service.sample.imperativebook") public class BookServiceConfig extends BaseImperativeServiceConfig { } diff --git a/service/service-samples/sample-service-imperative-book/src/main/java/io/americanexpress/service/sample/imperativebook/model/GetPolyBookServiceRequest.java b/service/service-samples/sample-service-imperative-book/src/main/java/io/americanexpress/service/sample/imperativebook/model/GetPolyBookServiceRequest.java new file mode 100644 index 000000000..7e929a4f1 --- /dev/null +++ b/service/service-samples/sample-service-imperative-book/src/main/java/io/americanexpress/service/sample/imperativebook/model/GetPolyBookServiceRequest.java @@ -0,0 +1,11 @@ +package io.americanexpress.service.sample.imperativebook.model; + +import io.americanexpress.synapse.service.imperative.model.BaseServiceRequest; + +/** + * {@code GetPolyBookServiceRequest} class is the request model for {@link io.americanexpress.service.sample.imperativebook.service.GetPolyBookService} + * + * @author Tanvir Islam + */ +public class GetPolyBookServiceRequest extends BaseBook implements BaseServiceRequest { +} diff --git a/service/service-samples/sample-service-imperative-book/src/main/java/io/americanexpress/service/sample/imperativebook/model/GetPolyBookServiceResponse.java b/service/service-samples/sample-service-imperative-book/src/main/java/io/americanexpress/service/sample/imperativebook/model/GetPolyBookServiceResponse.java new file mode 100644 index 000000000..80d952f3a --- /dev/null +++ b/service/service-samples/sample-service-imperative-book/src/main/java/io/americanexpress/service/sample/imperativebook/model/GetPolyBookServiceResponse.java @@ -0,0 +1,11 @@ +package io.americanexpress.service.sample.imperativebook.model; + +import io.americanexpress.synapse.service.imperative.model.BaseServiceResponse; + +/** + * {@code GetPolyBookServiceResponse} class is the response model for {@link io.americanexpress.service.sample.imperativebook.service.GetPolyBookService} + * + * @author Tanvir Islam + */ +public class GetPolyBookServiceResponse extends BaseBook implements BaseServiceResponse { +} diff --git a/service/service-samples/sample-service-imperative-book/src/main/java/io/americanexpress/service/sample/imperativebook/model/ReadPolyBookServiceRequest.java b/service/service-samples/sample-service-imperative-book/src/main/java/io/americanexpress/service/sample/imperativebook/model/ReadPolyBookServiceRequest.java new file mode 100644 index 000000000..2b24296ff --- /dev/null +++ b/service/service-samples/sample-service-imperative-book/src/main/java/io/americanexpress/service/sample/imperativebook/model/ReadPolyBookServiceRequest.java @@ -0,0 +1,34 @@ +package io.americanexpress.service.sample.imperativebook.model; + +import io.americanexpress.synapse.service.imperative.model.BasePaginatedServiceRequest; + +/** + * {@code ReadPolyBookServiceRequest} class is the request model for {@link io.americanexpress.service.sample.imperativebook.service.ReadPolyBookService} + * + * @author Tanvir Islam + */ +public class ReadPolyBookServiceRequest extends BasePaginatedServiceRequest { + + /** + * Author of the book. + */ + private String author; + + /** + * Get the author of the book. + * + * @return the author of the book + */ + public String getAuthor() { + return author; + } + + /** + * Set the author of the book. + * + * @param author the author of the book + */ + public void setAuthor(String author) { + this.author = author; + } +} diff --git a/service/service-samples/sample-service-imperative-book/src/main/java/io/americanexpress/service/sample/imperativebook/model/ReadPolyBookServiceResponse.java b/service/service-samples/sample-service-imperative-book/src/main/java/io/americanexpress/service/sample/imperativebook/model/ReadPolyBookServiceResponse.java new file mode 100644 index 000000000..b7094cb58 --- /dev/null +++ b/service/service-samples/sample-service-imperative-book/src/main/java/io/americanexpress/service/sample/imperativebook/model/ReadPolyBookServiceResponse.java @@ -0,0 +1,11 @@ +package io.americanexpress.service.sample.imperativebook.model; + +import io.americanexpress.synapse.service.imperative.model.BaseServiceResponse; + +/** + * {@code ReadPolyBookServiceResponse} class is the request model for {@link io.americanexpress.service.sample.imperativebook.service.ReadPolyBookService} + * + * @author Tanvir Islam + */ +public class ReadPolyBookServiceResponse extends BaseBook implements BaseServiceResponse { +} diff --git a/service/service-samples/sample-service-imperative-book/src/main/java/io/americanexpress/service/sample/imperativebook/service/GetPolyBookService.java b/service/service-samples/sample-service-imperative-book/src/main/java/io/americanexpress/service/sample/imperativebook/service/GetPolyBookService.java new file mode 100644 index 000000000..ba19f38d0 --- /dev/null +++ b/service/service-samples/sample-service-imperative-book/src/main/java/io/americanexpress/service/sample/imperativebook/service/GetPolyBookService.java @@ -0,0 +1,44 @@ +package io.americanexpress.service.sample.imperativebook.service; + +import io.americanexpress.service.sample.imperativebook.model.GetPolyBookServiceRequest; +import io.americanexpress.service.sample.imperativebook.model.GetPolyBookServiceResponse; +import io.americanexpress.service.sample.imperativebook.service.helper.GetBookServiceResponseCreator; +import io.americanexpress.synapse.service.imperative.model.PageResponse; +import io.americanexpress.synapse.service.imperative.service.BaseService; +import org.springframework.stereotype.Component; +import java.util.List; + +/** + * {@code GetPolyBookService} gets multiple book resources. + * + * @author Tanvir Islam + */ +@Component +public class GetPolyBookService extends BaseService> { + + /** + * Creates the book response. + */ + private final GetBookServiceResponseCreator getBookServiceResponseCreator; + + /** + * Constructor creates a new instance of ReadBookService with the given values. + * + * @param getBookServiceResponseCreator the base book service response creator + */ + public GetPolyBookService(GetBookServiceResponseCreator getBookServiceResponseCreator) { + this.getBookServiceResponseCreator = getBookServiceResponseCreator; + } + + /** + * Gets multiple book resources. + * + * @param request the request object. + * @return a list of book resources. + */ + @Override + protected PageResponse doExecute(GetPolyBookServiceRequest request) { + var response = getBookServiceResponseCreator.create(); + return new PageResponse<>(List.of(response, response)); + } +} diff --git a/service/service-samples/sample-service-imperative-book/src/main/java/io/americanexpress/service/sample/imperativebook/service/ReadPolyBookService.java b/service/service-samples/sample-service-imperative-book/src/main/java/io/americanexpress/service/sample/imperativebook/service/ReadPolyBookService.java new file mode 100644 index 000000000..01f6cce32 --- /dev/null +++ b/service/service-samples/sample-service-imperative-book/src/main/java/io/americanexpress/service/sample/imperativebook/service/ReadPolyBookService.java @@ -0,0 +1,46 @@ +package io.americanexpress.service.sample.imperativebook.service; + +import io.americanexpress.service.sample.imperativebook.model.ReadPolyBookServiceRequest; +import io.americanexpress.service.sample.imperativebook.model.ReadPolyBookServiceResponse; +import io.americanexpress.service.sample.imperativebook.service.helper.ReadBookServiceResponseCreator; +import io.americanexpress.synapse.service.imperative.model.PageResponse; +import io.americanexpress.synapse.service.imperative.service.BaseService; +import org.springframework.stereotype.Component; +import java.util.List; + +/** + * {@code ReadPolyBookService} reads multiple book resources with specified criteria. + * + * @author Tanvir Islam + */ +@Component +public class ReadPolyBookService extends BaseService> { + + /** + * Creates the book response. + */ + private final ReadBookServiceResponseCreator readBookServiceResponseCreator; + + /** + * Constructor creates a new instance of ReadBookService with the given values. + * + * @param readBookServiceResponseCreator the base book service response creator + */ + public ReadPolyBookService(ReadBookServiceResponseCreator readBookServiceResponseCreator) { + this.readBookServiceResponseCreator = readBookServiceResponseCreator; + } + + /** + * Reads multiple book resources with specified criteria. + * + * @param request the request object. + * @return a list of book resources. + */ + @Override + protected PageResponse doExecute(ReadPolyBookServiceRequest request) { + var response = readBookServiceResponseCreator.create(request); + var otherResponse = readBookServiceResponseCreator.create(request); + otherResponse.setCost(35); + return new PageResponse<>(List.of(response, otherResponse), request.getPageInformation()); + } +} diff --git a/service/service-samples/sample-service-imperative-book/src/main/java/io/americanexpress/service/sample/imperativebook/service/helper/GetBookServiceResponseCreator.java b/service/service-samples/sample-service-imperative-book/src/main/java/io/americanexpress/service/sample/imperativebook/service/helper/GetBookServiceResponseCreator.java new file mode 100644 index 000000000..790594cd6 --- /dev/null +++ b/service/service-samples/sample-service-imperative-book/src/main/java/io/americanexpress/service/sample/imperativebook/service/helper/GetBookServiceResponseCreator.java @@ -0,0 +1,28 @@ +package io.americanexpress.service.sample.imperativebook.service.helper; + +import io.americanexpress.service.sample.imperativebook.model.GetPolyBookServiceResponse; +import org.springframework.stereotype.Component; + +/** + * {@code GetBookServiceResponseCreator} creates the response for getting multiple books. + * + * @author Tanvir Islam + */ +@Component +public class GetBookServiceResponseCreator { + + /** + * Creates a new {@link GetPolyBookServiceResponse} object. + * + * @return a new {@link GetPolyBookServiceResponse} object. + */ + public GetPolyBookServiceResponse create() { + var getPolyBookServiceResponse = new GetPolyBookServiceResponse(); + getPolyBookServiceResponse.setTitle("Harry Potter"); + getPolyBookServiceResponse.setAuthor("J.K. Rowling"); + getPolyBookServiceResponse.setCost(15); + getPolyBookServiceResponse.setYear(2005); + getPolyBookServiceResponse.setPublisher("Publishing Co."); + return getPolyBookServiceResponse; + } +} diff --git a/service/service-samples/sample-service-imperative-book/src/main/java/io/americanexpress/service/sample/imperativebook/service/helper/ReadBookServiceResponseCreator.java b/service/service-samples/sample-service-imperative-book/src/main/java/io/americanexpress/service/sample/imperativebook/service/helper/ReadBookServiceResponseCreator.java index 2ef7f98ce..9eead9adf 100644 --- a/service/service-samples/sample-service-imperative-book/src/main/java/io/americanexpress/service/sample/imperativebook/service/helper/ReadBookServiceResponseCreator.java +++ b/service/service-samples/sample-service-imperative-book/src/main/java/io/americanexpress/service/sample/imperativebook/service/helper/ReadBookServiceResponseCreator.java @@ -15,6 +15,8 @@ import io.americanexpress.service.sample.imperativebook.model.BaseBook; import io.americanexpress.service.sample.imperativebook.model.ReadBookServiceResponse; +import io.americanexpress.service.sample.imperativebook.model.ReadPolyBookServiceRequest; +import io.americanexpress.service.sample.imperativebook.model.ReadPolyBookServiceResponse; import org.springframework.stereotype.Component; /** @@ -42,4 +44,20 @@ public ReadBookServiceResponse create(BaseBook request) { return readBookServiceResponse; } + + /** + * Creates the poly book service response. + * + * @param request the body received from the controller. + * @return response body to the controller. + */ + public ReadPolyBookServiceResponse create(ReadPolyBookServiceRequest request) { + var readBookServiceResponse = new ReadPolyBookServiceResponse(); + readBookServiceResponse.setTitle("Harry Potter"); + readBookServiceResponse.setAuthor(request.getAuthor()); + readBookServiceResponse.setCost(15); + readBookServiceResponse.setYear(2005); + readBookServiceResponse.setPublisher("Publishing Co."); + return readBookServiceResponse; + } }