#11 Rewrote, moved code to OrderManager

This commit is contained in:
Shan Ruhhammer
2023-06-25 03:04:32 +02:00
parent d3f89b726a
commit 5f6fa3fec9
2 changed files with 84 additions and 102 deletions

View File

@@ -1,10 +1,88 @@
package de.rwu.easydrop.service.processing;
/**
* Processes dropshipping orders.
*
* TODO implement
*/
public class OrderManager {
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import de.rwu.easydrop.Main;
import de.rwu.easydrop.exception.InvalidCatalogueException;
import de.rwu.easydrop.model.Product;
import de.rwu.easydrop.model.ProductCatalogue;
import de.rwu.easydrop.model.ProductPair;
import de.rwu.easydrop.util.FormattingUtil;
/**
* Creates dropshipping orders based on price margin.
*
* @since 0.3.0
*/
public final class OrderManager {
/**
* Temporary logging instance.
*/
private static final Logger LOGGER = LoggerFactory.getLogger(OrderManager.class);
/**
* Private constructor to prevent unwanted instantiation.
*
* @throws UnsupportedOperationException always
*/
private OrderManager() throws UnsupportedOperationException {
throw new UnsupportedOperationException("This is a stateless class, don't instantiate it.");
}
/**
* Creates orders for products with sufficient margin.
*
* @param pCats Product Catalogues
*/
public static void createOrders(final List<ProductCatalogue> pCats) {
for (ProductCatalogue pCat : pCats) {
ProductPair pair = getHighestMarginProducts(pCat);
// TODO: create actual orders/transactions, remove logger
double margin = pair.getProduct2().getCurrentPrice() -
pair.getProduct1().getCurrentPrice();
String marginFormatted = FormattingUtil.formatEuro(margin);
LOGGER.info("{}: Margin {} ({} to {})",
pCat.getProductName(),
marginFormatted,
pair.getProduct1().getDataOrigin(),
pair.getProduct2().getDataOrigin());
}
}
/**
* Returns the cheapest and most expensive product of a catalogue to guarantee
* the biggest margin as a pair.
*
* @param pCat Product Catalogue
* @return Cheapest Product, Most Expensive Product as a Product Pair
*/
public static ProductPair getHighestMarginProducts(final ProductCatalogue pCat) {
if (pCat.getProducts().size() < 2) {
throw new InvalidCatalogueException("Product Catalogue holds less than 2 products!");
}
// Initialize indexes
Product cheapestProduct = pCat.getProducts().get(0);
Product mostExpensiveProduct = pCat.getProducts().get(0);
for (Product product : pCat.getProducts()) {
if (product.getCurrentPrice() < cheapestProduct.getCurrentPrice()) {
cheapestProduct = product;
}
if (product.getCurrentPrice() > mostExpensiveProduct.getCurrentPrice()) {
mostExpensiveProduct = product;
}
}
if (cheapestProduct.getCurrentPrice() == mostExpensiveProduct.getCurrentPrice()) {
throw new InvalidCatalogueException("Price margin is zero!");
}
return new ProductPair(cheapestProduct, mostExpensiveProduct);
}
}