deps: Refactor dependencies (#3224)

* remove spring dep
move junit, logging, mockito under dep mgmt

* upgrade anti-corruption-layer deps

* async method invocation

* balking, bloc

* bridge to bytecode

* caching

* callback - cqrs

* component - health check

* hexagonal - metadata mapping

* rest of the patterns

* remove checkstyle, take spotless into use
This commit is contained in:
Ilkka Seppälä
2025-03-29 19:34:27 +02:00
committed by GitHub
parent 371439aeaa
commit 0ca162a55c
1863 changed files with 14408 additions and 17637 deletions
@@ -26,23 +26,19 @@
package com.iluwatar.sessionfacade;
/**
* The main entry point of the application that demonstrates the usage
* of the ShoppingFacade to manage the shopping process using the Session Facade pattern.
* This class serves as a client that interacts with the simplified
* interface provided by the ShoppingFacade, which encapsulates
* complex interactions with the underlying business services.
* The ShoppingFacade acts as a session bean that coordinates the communication
* between multiple services, hiding their complexity and providing a single, unified API.
* The main entry point of the application that demonstrates the usage of the ShoppingFacade to
* manage the shopping process using the Session Facade pattern. This class serves as a client that
* interacts with the simplified interface provided by the ShoppingFacade, which encapsulates
* complex interactions with the underlying business services. The ShoppingFacade acts as a session
* bean that coordinates the communication between multiple services, hiding their complexity and
* providing a single, unified API.
*/
public class App {
/**
* The entry point of the application.
* This method demonstrates how the ShoppingFacade, acting as a Session Facade, is used to:
* - Add items to the shopping cart
* - Process a payment
* - Place the order
* The session facade manages the communication between the individual services
* and simplifies the interactions for the client.
* The entry point of the application. This method demonstrates how the ShoppingFacade, acting as
* a Session Facade, is used to: - Add items to the shopping cart - Process a payment - Place the
* order The session facade manages the communication between the individual services and
* simplifies the interactions for the client.
*
* @param args the input arguments
*/
@@ -25,29 +25,24 @@
package com.iluwatar.sessionfacade;
import java.util.Map;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
/**
* The type Cart service.
* Represents the cart entity, has add to cart and remove from cart methods
* The type Cart service. Represents the cart entity, has add to cart and remove from cart methods
*/
@Slf4j
public class CartService {
/**
* -- GETTER --
* Gets cart.
*/
@Getter
private final Map<Integer, Product> cart;
/** -- GETTER -- Gets cart. */
@Getter private final Map<Integer, Product> cart;
private final Map<Integer, Product> productCatalog;
/**
* Instantiates a new Cart service.
*
* @param cart the cart
* @param cart the cart
* @param productCatalog the product catalog
*/
public CartService(Map<Integer, Product> cart, Map<Integer, Product> productCatalog) {
@@ -83,5 +78,4 @@ public class CartService {
LOGGER.info("No product is found in cart with id {}", productId);
}
}
}
@@ -29,12 +29,11 @@ import java.util.Map;
import lombok.extern.slf4j.Slf4j;
/**
* The OrderService class is responsible for finalizing a customer's order.
* It includes a method to calculate the total cost of the order, which follows
* the information expert principle from GRASP by assigning the responsibility
* of total calculation to this service.
* Additionally, it provides a method to complete the order, which empties the
* client's shopping cart once the order is finalized.
* The OrderService class is responsible for finalizing a customer's order. It includes a method to
* calculate the total cost of the order, which follows the information expert principle from GRASP
* by assigning the responsibility of total calculation to this service. Additionally, it provides a
* method to complete the order, which empties the client's shopping cart once the order is
* finalized.
*/
@Slf4j
public class OrderService {
@@ -49,14 +48,12 @@ public class OrderService {
this.cart = cart;
}
/**
* Order.
*/
/** Order. */
public void order() {
Double total = getTotal();
if (!this.cart.isEmpty()) {
LOGGER.info("Client has chosen to order {} with total {}", cart,
String.format("%.2f", total));
LOGGER.info(
"Client has chosen to order {} with total {}", cart, String.format("%.2f", total));
this.completeOrder();
} else {
LOGGER.info("Client's shopping cart is empty");
@@ -74,9 +71,7 @@ public class OrderService {
return total[0];
}
/**
* Complete order.
*/
/** Complete order. */
public void completeOrder() {
this.cart.clear();
}
@@ -29,19 +29,15 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* The PaymentService class is responsible for handling the selection and processing
* of different payment methods. It provides functionality to select a payment method
* (cash or credit card) and process the corresponding payment option. The class uses
* logging to inform the client of the selected payment method.
* It includes methods to:
* - Select the payment method based on the client's choice.
* - Process cash payments through the `cashPayment()` method.
* - Process credit card payments through the `creditCardPayment()` method.
* The PaymentService class is responsible for handling the selection and processing of different
* payment methods. It provides functionality to select a payment method (cash or credit card) and
* process the corresponding payment option. The class uses logging to inform the client of the
* selected payment method. It includes methods to: - Select the payment method based on the
* client's choice. - Process cash payments through the `cashPayment()` method. - Process credit
* card payments through the `creditCardPayment()` method.
*/
public class PaymentService {
/**
* The constant LOGGER.
*/
/** The constant LOGGER. */
public static Logger LOGGER = LoggerFactory.getLogger(PaymentService.class);
/**
@@ -59,16 +55,12 @@ public class PaymentService {
}
}
/**
* Cash payment.
*/
/** Cash payment. */
public void cashPayment() {
LOGGER.info("Client have chosen cash payment option");
}
/**
* Credit card payment.
*/
/** Credit card payment. */
public void creditCardPayment() {
LOGGER.info("Client have chosen credit card payment option");
}
@@ -25,14 +25,10 @@
package com.iluwatar.sessionfacade;
/**
* The type Product.
*/
/** The type Product. */
public record Product(int id, String name, double price, String description) {
@Override
public String toString() {
return "ID: " + id + "\nName: " + name + "\nPrice: $" + price + "\nDescription: " + description;
}
}
@@ -28,10 +28,9 @@ package com.iluwatar.sessionfacade;
import java.util.Map;
/**
* The type ProductCatalogService.
* This class manages a catalog of products. It holds a map of products,
* where each product is identified by a unique ID. The class
* provides functionality to access and manage the products in the catalog.
* The type ProductCatalogService. This class manages a catalog of products. It holds a map of
* products, where each product is identified by a unique ID. The class provides functionality to
* access and manage the products in the catalog.
*/
public class ProductCatalogService {
@@ -29,21 +29,16 @@ import java.util.HashMap;
import java.util.Map;
import lombok.extern.slf4j.Slf4j;
/**
* The ShoppingFacade class provides a simplified interface for clients to interact with the shopping system.
* It acts as a facade to handle operations related to a shopping cart, order processing, and payment.
* Responsibilities:
* - Add products to the shopping cart.
* - Remove products from the shopping cart.
* - Retrieve the current shopping cart.
* - Finalize an order by calling the order service.
* - Check if a payment is required based on the order total.
* - Process payment using different payment methods (e.g., cash, credit card).
* The ShoppingFacade class delegates operations to the following services:
* - CartService: Manages the cart and product catalog.
* - OrderService: Handles the order finalization process and calculation of the total.
* - PaymentService: Handles the payment processing based on the selected payment method.
* The ShoppingFacade class provides a simplified interface for clients to interact with the
* shopping system. It acts as a facade to handle operations related to a shopping cart, order
* processing, and payment. Responsibilities: - Add products to the shopping cart. - Remove products
* from the shopping cart. - Retrieve the current shopping cart. - Finalize an order by calling the
* order service. - Check if a payment is required based on the order total. - Process payment using
* different payment methods (e.g., cash, credit card). The ShoppingFacade class delegates
* operations to the following services: - CartService: Manages the cart and product catalog. -
* OrderService: Handles the order finalization process and calculation of the total. -
* PaymentService: Handles the payment processing based on the selected payment method.
*/
@Slf4j
public class ShoppingFacade {
@@ -51,13 +46,15 @@ public class ShoppingFacade {
private final OrderService orderService;
private final PaymentService paymentService;
/**
* Instantiates a new Shopping facade.
*/
/** Instantiates a new Shopping facade. */
public ShoppingFacade() {
Map<Integer, Product> productCatalog = new HashMap<>();
productCatalog.put(1, new Product(1, "Wireless Mouse", 25.99, "Ergonomic wireless mouse with USB receiver."));
productCatalog.put(2, new Product(2, "Gaming Keyboard", 79.99, "RGB mechanical gaming keyboard with programmable keys."));
productCatalog.put(
1, new Product(1, "Wireless Mouse", 25.99, "Ergonomic wireless mouse with USB receiver."));
productCatalog.put(
2,
new Product(
2, "Gaming Keyboard", 79.99, "RGB mechanical gaming keyboard with programmable keys."));
Map<Integer, Product> cart = new HashMap<>();
cartService = new CartService(cart, productCatalog);
orderService = new OrderService(cart);
@@ -91,9 +88,7 @@ public class ShoppingFacade {
this.cartService.removeFromCart(productId);
}
/**
* Order.
*/
/** Order. */
public void order() {
this.orderService.order();
}