From cd5a16e5be0a763e277361eb30672891fad03f6b Mon Sep 17 00:00:00 2001 From: Ivan Franchin Date: Wed, 15 Jan 2025 16:30:32 -0300 Subject: [PATCH] Remove MapStruct dependency --- book-service/build.gradle | 9 ------- .../controller/BookController.java | 17 ++++++------- .../bookservice/dto/BookResponse.java | 6 +++++ .../bookservice/mapper/BookMapper.java | 25 ------------------- .../ivanfranchin/bookservice/model/Book.java | 22 ++++++++++++++++ .../controller/BookControllerTest.java | 3 +-- 6 files changed, 36 insertions(+), 46 deletions(-) delete mode 100644 book-service/src/main/java/com/ivanfranchin/bookservice/mapper/BookMapper.java diff --git a/book-service/build.gradle b/book-service/build.gradle index 3f63bca..482223d 100644 --- a/book-service/build.gradle +++ b/book-service/build.gradle @@ -27,8 +27,6 @@ repositories { } ext { - set('mapstructVersion', '1.6.3') - set('lombokMapstructBindingVersion', '0.2.0') set('springdocOpenApiVersion', '2.7.0') set('keycloakVersion', '26.0.3') set('httpClient5Version', '5.4.1') @@ -80,13 +78,6 @@ dependencies { // See: /~https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.0-Migration-Guide#apache-httpclient-in-resttemplate implementation "org.apache.httpcomponents.client5:httpclient5:${httpClient5Version}" - implementation "org.mapstruct:mapstruct:${mapstructVersion}" - annotationProcessor "org.mapstruct:mapstruct-processor:${mapstructVersion}" - testAnnotationProcessor "org.mapstruct:mapstruct-processor:${mapstructVersion}" - - // This dependency is needed so that Mapstruct can work with Lombok 1.18.16 - annotationProcessor "org.projectlombok:lombok-mapstruct-binding:${lombokMapstructBindingVersion}" - annotationProcessor 'org.projectlombok:lombok' compileOnly 'org.projectlombok:lombok' diff --git a/book-service/src/main/java/com/ivanfranchin/bookservice/controller/BookController.java b/book-service/src/main/java/com/ivanfranchin/bookservice/controller/BookController.java index e162c59..43609ec 100644 --- a/book-service/src/main/java/com/ivanfranchin/bookservice/controller/BookController.java +++ b/book-service/src/main/java/com/ivanfranchin/bookservice/controller/BookController.java @@ -3,7 +3,6 @@ import com.ivanfranchin.bookservice.dto.BookResponse; import com.ivanfranchin.bookservice.dto.CreateBookRequest; import com.ivanfranchin.bookservice.dto.UpdateBookRequest; -import com.ivanfranchin.bookservice.mapper.BookMapper; import com.ivanfranchin.bookservice.model.Book; import com.ivanfranchin.bookservice.service.BookService; import io.swagger.v3.oas.annotations.Operation; @@ -37,7 +36,6 @@ public class BookController { private final BookService bookService; - private final BookMapper bookMapper; @Operation(summary = "Get list of book. It can be filtered by author name") @GetMapping @@ -49,7 +47,7 @@ public List getBooks(@RequestParam(required = false) String author log.info("Get books"); } List books = filterByAuthorName ? bookService.getBooksByAuthorName(authorName) : bookService.getBooks(); - return books.stream().map(bookMapper::toBookResponse).collect(Collectors.toList()); + return books.stream().map(BookResponse::from).collect(Collectors.toList()); } @Operation(summary = "Get book by id") @@ -57,7 +55,7 @@ public List getBooks(@RequestParam(required = false) String author public BookResponse getBookById(@PathVariable String id) { log.info("Get books with id equals to {}", id); Book book = bookService.validateAndGetBookById(id); - return bookMapper.toBookResponse(book); + return BookResponse.from(book); } @Operation( @@ -67,9 +65,8 @@ public BookResponse getBookById(@PathVariable String id) { @PostMapping public BookResponse createBook(@Valid @RequestBody CreateBookRequest createBookRequest, Principal principal) { log.info("Post request made by {} to create a book {}", principal.getName(), createBookRequest); - Book book = bookMapper.toBook(createBookRequest); - book = bookService.saveBook(book); - return bookMapper.toBookResponse(book); + Book book = bookService.saveBook(Book.from(createBookRequest)); + return BookResponse.from(book); } @Operation( @@ -81,9 +78,9 @@ public BookResponse updateBook(@PathVariable String id, Principal principal) { log.info("Patch request made by {} to update book with id {}. New values {}", principal.getName(), id, updateBookRequest); Book book = bookService.validateAndGetBookById(id); - bookMapper.updateUserFromRequest(updateBookRequest, book); + Book.updateFrom(updateBookRequest, book); book = bookService.saveBook(book); - return bookMapper.toBookResponse(book); + return BookResponse.from(book); } @Operation( @@ -94,6 +91,6 @@ public BookResponse deleteBook(@PathVariable String id, Principal principal) { log.info("Delete request made by {} to remove book with id {}", principal.getName(), id); Book book = bookService.validateAndGetBookById(id); bookService.deleteBook(book); - return bookMapper.toBookResponse(book); + return BookResponse.from(book); } } diff --git a/book-service/src/main/java/com/ivanfranchin/bookservice/dto/BookResponse.java b/book-service/src/main/java/com/ivanfranchin/bookservice/dto/BookResponse.java index ac471a2..7fe9616 100644 --- a/book-service/src/main/java/com/ivanfranchin/bookservice/dto/BookResponse.java +++ b/book-service/src/main/java/com/ivanfranchin/bookservice/dto/BookResponse.java @@ -1,6 +1,12 @@ package com.ivanfranchin.bookservice.dto; +import com.ivanfranchin.bookservice.model.Book; + import java.math.BigDecimal; public record BookResponse(String id, String authorName, String title, BigDecimal price) { + + public static BookResponse from(Book book) { + return new BookResponse(book.getId(), book.getAuthorName(), book.getTitle(), book.getPrice()); + } } diff --git a/book-service/src/main/java/com/ivanfranchin/bookservice/mapper/BookMapper.java b/book-service/src/main/java/com/ivanfranchin/bookservice/mapper/BookMapper.java deleted file mode 100644 index 63af1ac..0000000 --- a/book-service/src/main/java/com/ivanfranchin/bookservice/mapper/BookMapper.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.ivanfranchin.bookservice.mapper; - -import com.ivanfranchin.bookservice.dto.BookResponse; -import com.ivanfranchin.bookservice.model.Book; -import com.ivanfranchin.bookservice.dto.CreateBookRequest; -import com.ivanfranchin.bookservice.dto.UpdateBookRequest; -import org.mapstruct.Mapper; -import org.mapstruct.Mapping; -import org.mapstruct.MappingTarget; -import org.mapstruct.NullValuePropertyMappingStrategy; - -@Mapper( - componentModel = "spring", - nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE -) -public interface BookMapper { - - @Mapping(target = "id", ignore = true) - Book toBook(CreateBookRequest createBookRequest); - - BookResponse toBookResponse(Book book); - - @Mapping(target = "id", ignore = true) - void updateUserFromRequest(UpdateBookRequest updateBookRequest, @MappingTarget Book book); -} diff --git a/book-service/src/main/java/com/ivanfranchin/bookservice/model/Book.java b/book-service/src/main/java/com/ivanfranchin/bookservice/model/Book.java index d5bfd1d..82a728a 100644 --- a/book-service/src/main/java/com/ivanfranchin/bookservice/model/Book.java +++ b/book-service/src/main/java/com/ivanfranchin/bookservice/model/Book.java @@ -1,5 +1,7 @@ package com.ivanfranchin.bookservice.model; +import com.ivanfranchin.bookservice.dto.CreateBookRequest; +import com.ivanfranchin.bookservice.dto.UpdateBookRequest; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @@ -25,4 +27,24 @@ public Book(String authorName, String title, BigDecimal price) { this.title = title; this.price = price; } + + public static Book from(CreateBookRequest createBookRequest) { + return new Book( + createBookRequest.getAuthorName(), + createBookRequest.getTitle(), + createBookRequest.getPrice() + ); + } + + public static void updateFrom(UpdateBookRequest updateBookRequest, Book book) { + if (updateBookRequest.getAuthorName() != null) { + book.setAuthorName(updateBookRequest.getAuthorName()); + } + if (updateBookRequest.getTitle() != null) { + book.setTitle(updateBookRequest.getTitle()); + } + if (updateBookRequest.getPrice() != null) { + book.setPrice(updateBookRequest.getPrice()); + } + } } diff --git a/book-service/src/test/java/com/ivanfranchin/bookservice/controller/BookControllerTest.java b/book-service/src/test/java/com/ivanfranchin/bookservice/controller/BookControllerTest.java index 1264943..f914767 100644 --- a/book-service/src/test/java/com/ivanfranchin/bookservice/controller/BookControllerTest.java +++ b/book-service/src/test/java/com/ivanfranchin/bookservice/controller/BookControllerTest.java @@ -4,7 +4,6 @@ import com.ivanfranchin.bookservice.dto.CreateBookRequest; import com.ivanfranchin.bookservice.dto.UpdateBookRequest; import com.ivanfranchin.bookservice.exception.BookNotFoundException; -import com.ivanfranchin.bookservice.mapper.BookMapperImpl; import com.ivanfranchin.bookservice.model.Book; import com.ivanfranchin.bookservice.security.JwtAuthConverterProperties; import com.ivanfranchin.bookservice.security.SecurityConfig; @@ -39,7 +38,7 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @WebMvcTest(BookController.class) -@Import({BookMapperImpl.class, JwtAuthConverterProperties.class, SecurityConfig.class}) +@Import({JwtAuthConverterProperties.class, SecurityConfig.class}) class BookControllerTest { @Autowired