From c8a879a8f268eb6e2a32a453bc09ff8b4537e6dc Mon Sep 17 00:00:00 2001 From: Raja Kolli Date: Wed, 19 Jun 2024 17:15:29 +0530 Subject: [PATCH] polish : remove public where possible (#502) --- .gitpod.Dockerfile | 9 --------- .gitpod.yml | 3 +-- spring-modulith-outbox-pattern/pom.xml | 2 +- .../outboxpattern/config/Initializer.java | 2 +- .../outboxpattern/config/LoggingAspect.java | 2 +- .../outboxpattern/config/SwaggerConfig.java | 2 +- .../outboxpattern/config/WebMvcConfig.java | 5 +++-- .../exception/GlobalExceptionHandler.java | 2 +- .../order/internal/OrderController.java | 19 +++++++++---------- .../order/internal/OrderMapper.java | 4 ++-- .../internal/OrderNotFoundException.java | 4 ++-- .../order/internal/OrderService.java | 19 ++++++++++++++----- .../{ => domain}/query/FindOrdersQuery.java | 2 +- .../request/OrderItemRequest.java | 2 +- .../{ => domain}/request/OrderRequest.java | 2 +- .../{ => domain}/response/PagedResult.java | 2 +- .../outboxpattern/producer/Producer.java | 4 +--- .../outboxpattern/ApplicationTest.java | 15 +++++++++++++++ .../order/internal/OrderControllerIT.java | 4 ++-- .../order/internal/OrderModuleIntTests.java | 4 ++-- 20 files changed, 60 insertions(+), 48 deletions(-) delete mode 100644 .gitpod.Dockerfile rename spring-modulith-outbox-pattern/src/main/java/com/example/outboxpattern/order/internal/{ => domain}/query/FindOrdersQuery.java (59%) rename spring-modulith-outbox-pattern/src/main/java/com/example/outboxpattern/order/internal/{ => domain}/request/OrderItemRequest.java (84%) rename spring-modulith-outbox-pattern/src/main/java/com/example/outboxpattern/order/internal/{ => domain}/request/OrderRequest.java (74%) rename spring-modulith-outbox-pattern/src/main/java/com/example/outboxpattern/order/internal/{ => domain}/response/PagedResult.java (92%) create mode 100644 spring-modulith-outbox-pattern/src/test/java/com/example/outboxpattern/ApplicationTest.java diff --git a/.gitpod.Dockerfile b/.gitpod.Dockerfile deleted file mode 100644 index 908c5fe0..00000000 --- a/.gitpod.Dockerfile +++ /dev/null @@ -1,9 +0,0 @@ -FROM gitpod/workspace-full - -USER root - -RUN bash -c ". /home/gitpod/.sdkman/bin/sdkman-init.sh \ - && sdk install java 21.0.3-graalce \ - && sdk default java 21.0.3-graalce" - - \ No newline at end of file diff --git a/.gitpod.yml b/.gitpod.yml index ca4d62b8..54a8d911 100644 --- a/.gitpod.yml +++ b/.gitpod.yml @@ -3,8 +3,7 @@ # Please adjust to your needs (see https://www.gitpod.io/docs/config-gitpod-file) # and commit this file to your remote git repository to share the goodness with others. -image: - file: .gitpod.Dockerfile +image: gitpod/workspace-java21 vscode: extensions: diff --git a/spring-modulith-outbox-pattern/pom.xml b/spring-modulith-outbox-pattern/pom.xml index 27c697e4..5092d7ad 100644 --- a/spring-modulith-outbox-pattern/pom.xml +++ b/spring-modulith-outbox-pattern/pom.xml @@ -259,7 +259,7 @@ - 2.38.0 + 2.47.0 diff --git a/spring-modulith-outbox-pattern/src/main/java/com/example/outboxpattern/config/Initializer.java b/spring-modulith-outbox-pattern/src/main/java/com/example/outboxpattern/config/Initializer.java index 8450b31a..a0c5dcb4 100644 --- a/spring-modulith-outbox-pattern/src/main/java/com/example/outboxpattern/config/Initializer.java +++ b/spring-modulith-outbox-pattern/src/main/java/com/example/outboxpattern/config/Initializer.java @@ -8,7 +8,7 @@ @Component @RequiredArgsConstructor @Slf4j -public class Initializer implements CommandLineRunner { +class Initializer implements CommandLineRunner { private final ApplicationProperties properties; diff --git a/spring-modulith-outbox-pattern/src/main/java/com/example/outboxpattern/config/LoggingAspect.java b/spring-modulith-outbox-pattern/src/main/java/com/example/outboxpattern/config/LoggingAspect.java index c603e0a5..7a188204 100644 --- a/spring-modulith-outbox-pattern/src/main/java/com/example/outboxpattern/config/LoggingAspect.java +++ b/spring-modulith-outbox-pattern/src/main/java/com/example/outboxpattern/config/LoggingAspect.java @@ -15,7 +15,7 @@ @Aspect @Component -public class LoggingAspect { +class LoggingAspect { private final Logger log = LoggerFactory.getLogger(this.getClass()); diff --git a/spring-modulith-outbox-pattern/src/main/java/com/example/outboxpattern/config/SwaggerConfig.java b/spring-modulith-outbox-pattern/src/main/java/com/example/outboxpattern/config/SwaggerConfig.java index 4530ff7a..0e0a8163 100644 --- a/spring-modulith-outbox-pattern/src/main/java/com/example/outboxpattern/config/SwaggerConfig.java +++ b/spring-modulith-outbox-pattern/src/main/java/com/example/outboxpattern/config/SwaggerConfig.java @@ -7,4 +7,4 @@ @Configuration(proxyBeanMethods = false) @OpenAPIDefinition(info = @Info(title = "spring-modulith-outbox-pattern", version = "v1"), servers = @Server(url = "/")) -public class SwaggerConfig {} +class SwaggerConfig {} diff --git a/spring-modulith-outbox-pattern/src/main/java/com/example/outboxpattern/config/WebMvcConfig.java b/spring-modulith-outbox-pattern/src/main/java/com/example/outboxpattern/config/WebMvcConfig.java index 2c25fbda..2c823cfe 100644 --- a/spring-modulith-outbox-pattern/src/main/java/com/example/outboxpattern/config/WebMvcConfig.java +++ b/spring-modulith-outbox-pattern/src/main/java/com/example/outboxpattern/config/WebMvcConfig.java @@ -2,16 +2,17 @@ import lombok.RequiredArgsConstructor; import org.springframework.context.annotation.Configuration; +import org.springframework.lang.NonNull; import org.springframework.web.servlet.config.annotation.CorsRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration @RequiredArgsConstructor -public class WebMvcConfig implements WebMvcConfigurer { +class WebMvcConfig implements WebMvcConfigurer { private final ApplicationProperties properties; @Override - public void addCorsMappings(CorsRegistry registry) { + public void addCorsMappings(@NonNull CorsRegistry registry) { registry.addMapping(properties.getCors().getPathPattern()) .allowedMethods(properties.getCors().getAllowedMethods()) .allowedHeaders(properties.getCors().getAllowedHeaders()) diff --git a/spring-modulith-outbox-pattern/src/main/java/com/example/outboxpattern/exception/GlobalExceptionHandler.java b/spring-modulith-outbox-pattern/src/main/java/com/example/outboxpattern/exception/GlobalExceptionHandler.java index 45bfb841..184782fe 100644 --- a/spring-modulith-outbox-pattern/src/main/java/com/example/outboxpattern/exception/GlobalExceptionHandler.java +++ b/spring-modulith-outbox-pattern/src/main/java/com/example/outboxpattern/exception/GlobalExceptionHandler.java @@ -18,7 +18,7 @@ @ControllerAdvice @Order(Ordered.HIGHEST_PRECEDENCE) -public class GlobalExceptionHandler { +class GlobalExceptionHandler { @ExceptionHandler(MethodArgumentNotValidException.class) @ResponseStatus(HttpStatus.BAD_REQUEST) diff --git a/spring-modulith-outbox-pattern/src/main/java/com/example/outboxpattern/order/internal/OrderController.java b/spring-modulith-outbox-pattern/src/main/java/com/example/outboxpattern/order/internal/OrderController.java index 3e211ee1..eaa3a9f2 100644 --- a/spring-modulith-outbox-pattern/src/main/java/com/example/outboxpattern/order/internal/OrderController.java +++ b/spring-modulith-outbox-pattern/src/main/java/com/example/outboxpattern/order/internal/OrderController.java @@ -2,9 +2,9 @@ import com.example.outboxpattern.config.Loggable; import com.example.outboxpattern.order.OrderRecord; -import com.example.outboxpattern.order.internal.query.FindOrdersQuery; -import com.example.outboxpattern.order.internal.request.OrderRequest; -import com.example.outboxpattern.order.internal.response.PagedResult; +import com.example.outboxpattern.order.internal.domain.query.FindOrdersQuery; +import com.example.outboxpattern.order.internal.domain.request.OrderRequest; +import com.example.outboxpattern.order.internal.domain.response.PagedResult; import com.example.outboxpattern.utils.AppConstants; import jakarta.validation.Valid; import java.net.URI; @@ -26,12 +26,12 @@ @RequestMapping("/api/orders") @RequiredArgsConstructor @Loggable -public class OrderController { +class OrderController { private final OrderService orderService; @GetMapping - public PagedResult getAllOrders( + PagedResult getAllOrders( @RequestParam(defaultValue = AppConstants.DEFAULT_PAGE_NUMBER, required = false) int pageNo, @RequestParam(defaultValue = AppConstants.DEFAULT_PAGE_SIZE, required = false) int pageSize, @RequestParam(defaultValue = AppConstants.DEFAULT_SORT_BY, required = false) String sortBy, @@ -41,12 +41,12 @@ public PagedResult getAllOrders( } @GetMapping("/{id}") - public ResponseEntity getOrderById(@PathVariable Long id) { + ResponseEntity getOrderById(@PathVariable Long id) { return orderService.findOrderById(id).map(ResponseEntity::ok).orElseThrow(() -> new OrderNotFoundException(id)); } @PostMapping - public ResponseEntity createOrder(@RequestBody @Validated OrderRequest orderRequest) { + ResponseEntity createOrder(@RequestBody @Validated OrderRequest orderRequest) { OrderRecord response = orderService.saveOrder(orderRequest); URI location = ServletUriComponentsBuilder.fromCurrentRequest() .path("/api/orders/{id}") @@ -56,13 +56,12 @@ public ResponseEntity createOrder(@RequestBody @Validated OrderRequ } @PutMapping("/{id}") - public ResponseEntity updateOrder( - @PathVariable Long id, @RequestBody @Valid OrderRequest orderRequest) { + ResponseEntity updateOrder(@PathVariable Long id, @RequestBody @Valid OrderRequest orderRequest) { return ResponseEntity.ok(orderService.updateOrder(id, orderRequest)); } @DeleteMapping("/{id}") - public ResponseEntity deleteOrder(@PathVariable Long id) { + ResponseEntity deleteOrder(@PathVariable Long id) { return orderService .findOrderById(id) .map(order -> { diff --git a/spring-modulith-outbox-pattern/src/main/java/com/example/outboxpattern/order/internal/OrderMapper.java b/spring-modulith-outbox-pattern/src/main/java/com/example/outboxpattern/order/internal/OrderMapper.java index 3704213c..baa4c0a8 100644 --- a/spring-modulith-outbox-pattern/src/main/java/com/example/outboxpattern/order/internal/OrderMapper.java +++ b/spring-modulith-outbox-pattern/src/main/java/com/example/outboxpattern/order/internal/OrderMapper.java @@ -3,10 +3,10 @@ import com.example.outboxpattern.config.Loggable; import com.example.outboxpattern.order.OrderItemRecord; import com.example.outboxpattern.order.OrderRecord; +import com.example.outboxpattern.order.internal.domain.request.OrderItemRequest; +import com.example.outboxpattern.order.internal.domain.request.OrderRequest; import com.example.outboxpattern.order.internal.entities.Order; import com.example.outboxpattern.order.internal.entities.OrderItem; -import com.example.outboxpattern.order.internal.request.OrderItemRequest; -import com.example.outboxpattern.order.internal.request.OrderRequest; import java.time.LocalDateTime; import java.util.List; import java.util.Objects; diff --git a/spring-modulith-outbox-pattern/src/main/java/com/example/outboxpattern/order/internal/OrderNotFoundException.java b/spring-modulith-outbox-pattern/src/main/java/com/example/outboxpattern/order/internal/OrderNotFoundException.java index 7bc4ba0d..28826d63 100644 --- a/spring-modulith-outbox-pattern/src/main/java/com/example/outboxpattern/order/internal/OrderNotFoundException.java +++ b/spring-modulith-outbox-pattern/src/main/java/com/example/outboxpattern/order/internal/OrderNotFoundException.java @@ -2,9 +2,9 @@ import com.example.outboxpattern.exception.ResourceNotFoundException; -public class OrderNotFoundException extends ResourceNotFoundException { +class OrderNotFoundException extends ResourceNotFoundException { - public OrderNotFoundException(Long id) { + OrderNotFoundException(Long id) { super("Order with Id '%d' Not found".formatted(id)); } } diff --git a/spring-modulith-outbox-pattern/src/main/java/com/example/outboxpattern/order/internal/OrderService.java b/spring-modulith-outbox-pattern/src/main/java/com/example/outboxpattern/order/internal/OrderService.java index 35f06859..436aaf63 100644 --- a/spring-modulith-outbox-pattern/src/main/java/com/example/outboxpattern/order/internal/OrderService.java +++ b/spring-modulith-outbox-pattern/src/main/java/com/example/outboxpattern/order/internal/OrderService.java @@ -2,10 +2,11 @@ import com.example.outboxpattern.config.Loggable; import com.example.outboxpattern.order.OrderRecord; +import com.example.outboxpattern.order.internal.domain.query.FindOrdersQuery; +import com.example.outboxpattern.order.internal.domain.request.OrderRequest; +import com.example.outboxpattern.order.internal.domain.response.PagedResult; import com.example.outboxpattern.order.internal.entities.Order; -import com.example.outboxpattern.order.internal.query.FindOrdersQuery; -import com.example.outboxpattern.order.internal.request.OrderRequest; -import com.example.outboxpattern.order.internal.response.PagedResult; +import jakarta.annotation.PostConstruct; import java.util.List; import java.util.Optional; import lombok.RequiredArgsConstructor; @@ -16,6 +17,8 @@ import org.springframework.data.domain.Sort; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.transaction.support.TransactionTemplate; +import org.springframework.util.Assert; @Service @Transactional(readOnly = true) @@ -26,6 +29,12 @@ class OrderService { private final OrderRepository orderRepository; private final OrderMapper orderMapper; private final ApplicationEventPublisher events; + private final TransactionTemplate transactionTemplate; + + @PostConstruct + void setPropagation() { + transactionTemplate.setPropagationBehaviorName("PROPAGATION_REQUIRES_NEW"); + } PagedResult findAllOrders(FindOrdersQuery findOrdersQuery) { @@ -61,7 +70,6 @@ OrderRecord saveOrder(OrderRequest orderRequest) { return orderRecord; } - @Transactional OrderRecord updateOrder(Long id, OrderRequest orderRequest) { Order order = orderRepository.findOrderById(id).orElseThrow(() -> new OrderNotFoundException(id)); @@ -69,8 +77,9 @@ OrderRecord updateOrder(Long id, OrderRequest orderRequest) { orderMapper.mapOrderWithRequest(order, orderRequest); // Save the updated order object - Order updatedOrder = orderRepository.save(order); + Order updatedOrder = transactionTemplate.execute(status -> orderRepository.save(order)); + Assert.notNull(updatedOrder, () -> "UpdatedOrder cant be Null"); return orderMapper.toResponse(updatedOrder); } diff --git a/spring-modulith-outbox-pattern/src/main/java/com/example/outboxpattern/order/internal/query/FindOrdersQuery.java b/spring-modulith-outbox-pattern/src/main/java/com/example/outboxpattern/order/internal/domain/query/FindOrdersQuery.java similarity index 59% rename from spring-modulith-outbox-pattern/src/main/java/com/example/outboxpattern/order/internal/query/FindOrdersQuery.java rename to spring-modulith-outbox-pattern/src/main/java/com/example/outboxpattern/order/internal/domain/query/FindOrdersQuery.java index b62e7453..22693f4a 100644 --- a/spring-modulith-outbox-pattern/src/main/java/com/example/outboxpattern/order/internal/query/FindOrdersQuery.java +++ b/spring-modulith-outbox-pattern/src/main/java/com/example/outboxpattern/order/internal/domain/query/FindOrdersQuery.java @@ -1,3 +1,3 @@ -package com.example.outboxpattern.order.internal.query; +package com.example.outboxpattern.order.internal.domain.query; public record FindOrdersQuery(int pageNo, int pageSize, String sortBy, String sortDir) {} diff --git a/spring-modulith-outbox-pattern/src/main/java/com/example/outboxpattern/order/internal/request/OrderItemRequest.java b/spring-modulith-outbox-pattern/src/main/java/com/example/outboxpattern/order/internal/domain/request/OrderItemRequest.java similarity index 84% rename from spring-modulith-outbox-pattern/src/main/java/com/example/outboxpattern/order/internal/request/OrderItemRequest.java rename to spring-modulith-outbox-pattern/src/main/java/com/example/outboxpattern/order/internal/domain/request/OrderItemRequest.java index 443b441c..5f41ef8a 100644 --- a/spring-modulith-outbox-pattern/src/main/java/com/example/outboxpattern/order/internal/request/OrderItemRequest.java +++ b/spring-modulith-outbox-pattern/src/main/java/com/example/outboxpattern/order/internal/domain/request/OrderItemRequest.java @@ -1,4 +1,4 @@ -package com.example.outboxpattern.order.internal.request; +package com.example.outboxpattern.order.internal.domain.request; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.Positive; diff --git a/spring-modulith-outbox-pattern/src/main/java/com/example/outboxpattern/order/internal/request/OrderRequest.java b/spring-modulith-outbox-pattern/src/main/java/com/example/outboxpattern/order/internal/domain/request/OrderRequest.java similarity index 74% rename from spring-modulith-outbox-pattern/src/main/java/com/example/outboxpattern/order/internal/request/OrderRequest.java rename to spring-modulith-outbox-pattern/src/main/java/com/example/outboxpattern/order/internal/domain/request/OrderRequest.java index d56334d9..11c210b1 100644 --- a/spring-modulith-outbox-pattern/src/main/java/com/example/outboxpattern/order/internal/request/OrderRequest.java +++ b/spring-modulith-outbox-pattern/src/main/java/com/example/outboxpattern/order/internal/domain/request/OrderRequest.java @@ -1,4 +1,4 @@ -package com.example.outboxpattern.order.internal.request; +package com.example.outboxpattern.order.internal.domain.request; import jakarta.validation.constraints.NotEmpty; import java.util.List; diff --git a/spring-modulith-outbox-pattern/src/main/java/com/example/outboxpattern/order/internal/response/PagedResult.java b/spring-modulith-outbox-pattern/src/main/java/com/example/outboxpattern/order/internal/domain/response/PagedResult.java similarity index 92% rename from spring-modulith-outbox-pattern/src/main/java/com/example/outboxpattern/order/internal/response/PagedResult.java rename to spring-modulith-outbox-pattern/src/main/java/com/example/outboxpattern/order/internal/domain/response/PagedResult.java index feb4a67f..4693eca8 100644 --- a/spring-modulith-outbox-pattern/src/main/java/com/example/outboxpattern/order/internal/response/PagedResult.java +++ b/spring-modulith-outbox-pattern/src/main/java/com/example/outboxpattern/order/internal/domain/response/PagedResult.java @@ -1,4 +1,4 @@ -package com.example.outboxpattern.order.internal.response; +package com.example.outboxpattern.order.internal.domain.response; import com.fasterxml.jackson.annotation.JsonProperty; import java.util.List; diff --git a/spring-modulith-outbox-pattern/src/main/java/com/example/outboxpattern/producer/Producer.java b/spring-modulith-outbox-pattern/src/main/java/com/example/outboxpattern/producer/Producer.java index 29f62902..a27a9c7d 100644 --- a/spring-modulith-outbox-pattern/src/main/java/com/example/outboxpattern/producer/Producer.java +++ b/spring-modulith-outbox-pattern/src/main/java/com/example/outboxpattern/producer/Producer.java @@ -5,13 +5,11 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.modulith.events.ApplicationModuleListener; import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; @Slf4j @Service -@Transactional @RequiredArgsConstructor -public class Producer { +class Producer { @ApplicationModuleListener void onOrderResponseEvent(OrderRecord orderRecord) { diff --git a/spring-modulith-outbox-pattern/src/test/java/com/example/outboxpattern/ApplicationTest.java b/spring-modulith-outbox-pattern/src/test/java/com/example/outboxpattern/ApplicationTest.java new file mode 100644 index 00000000..4681eb11 --- /dev/null +++ b/spring-modulith-outbox-pattern/src/test/java/com/example/outboxpattern/ApplicationTest.java @@ -0,0 +1,15 @@ +package com.example.outboxpattern; + +import com.example.outboxpattern.common.AbstractIntegrationTest; +import org.junit.jupiter.api.Test; +import org.springframework.modulith.core.ApplicationModules; + +class ApplicationTest extends AbstractIntegrationTest { + + @Test + void contextLoads() { + ApplicationModules applicationModules = ApplicationModules.of(Application.class); + + applicationModules.verify(); + } +} diff --git a/spring-modulith-outbox-pattern/src/test/java/com/example/outboxpattern/order/internal/OrderControllerIT.java b/spring-modulith-outbox-pattern/src/test/java/com/example/outboxpattern/order/internal/OrderControllerIT.java index 3e3ada4e..f2adca3c 100644 --- a/spring-modulith-outbox-pattern/src/test/java/com/example/outboxpattern/order/internal/OrderControllerIT.java +++ b/spring-modulith-outbox-pattern/src/test/java/com/example/outboxpattern/order/internal/OrderControllerIT.java @@ -15,10 +15,10 @@ import com.example.outboxpattern.common.AbstractIntegrationTest; import com.example.outboxpattern.common.listener.OrderListener; +import com.example.outboxpattern.order.internal.domain.request.OrderItemRequest; +import com.example.outboxpattern.order.internal.domain.request.OrderRequest; import com.example.outboxpattern.order.internal.entities.Order; import com.example.outboxpattern.order.internal.entities.OrderItem; -import com.example.outboxpattern.order.internal.request.OrderItemRequest; -import com.example.outboxpattern.order.internal.request.OrderRequest; import java.math.BigDecimal; import java.time.Duration; import java.time.LocalDateTime; diff --git a/spring-modulith-outbox-pattern/src/test/java/com/example/outboxpattern/order/internal/OrderModuleIntTests.java b/spring-modulith-outbox-pattern/src/test/java/com/example/outboxpattern/order/internal/OrderModuleIntTests.java index 2cc55d30..3865b12a 100644 --- a/spring-modulith-outbox-pattern/src/test/java/com/example/outboxpattern/order/internal/OrderModuleIntTests.java +++ b/spring-modulith-outbox-pattern/src/test/java/com/example/outboxpattern/order/internal/OrderModuleIntTests.java @@ -6,8 +6,8 @@ import com.example.outboxpattern.common.ContainersConfig; import com.example.outboxpattern.order.OrderRecord; -import com.example.outboxpattern.order.internal.request.OrderItemRequest; -import com.example.outboxpattern.order.internal.request.OrderRequest; +import com.example.outboxpattern.order.internal.domain.request.OrderItemRequest; +import com.example.outboxpattern.order.internal.domain.request.OrderRequest; import java.math.BigDecimal; import java.util.List; import java.util.concurrent.CompletableFuture;