Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,12 @@
<version>5.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.30</version>
<scope>provided</scope>
</dependency>
</dependencies>

</project>
50 changes: 50 additions & 0 deletions src/main/java/Main.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
import java.time.LocalDateTime;
import java.util.List;

public class Main {
public static void main(String[] args) {
Product product1 = new Product("2","Gibson");
Product product2 = new Product("3","Fender");

ProductRepo productRepo1 = new ProductRepo();
productRepo1.addProduct(product1);
productRepo1.addProduct(product2);
//System.out.println(productRepo1);

List<String> productIds = List.of(product1.id(), product2.id());
List<String> leer = List.of("412");
List<Product> guitars1 = List.of(product1,product2);
List<Product> guitars2 = List.of(product1);
Order order1 = new Order("123", guitars1,LocalDateTime.now());
Order order2 = new Order("234",guitars2,LocalDateTime.now().plusSeconds(1));

OrderListRepo orderListRepo1 = new OrderListRepo();
orderListRepo1.addOrder(order1);
orderListRepo1.addOrder(order2);
//System.out.println("Order List Repository: " + orderListRepo1);

ShopService shopService1 = new ShopService(productRepo1, orderListRepo1);
//shopService1.addOrder(productIds);

shopService1.updateOrder("123",OrderStatus.COMPLETED);
Order mod1 = shopService1.updateOrder("123",OrderStatus.COMPLETED);
System.out.println("mode1: " + mod1);

List<Order> completedOrder = shopService1.getOrdersByStatus(OrderStatus.COMPLETED);
List<Order> processingOrder = shopService1.getOrdersByStatus(OrderStatus.PROCESSING);
System.out.println("Processing Order: " + processingOrder);
System.out.println("Completed Order: " + completedOrder);


//System.out.println(productRepo1.getProductById("3"));

try {
shopService1.addOrder(leer);
}
catch (ProductDoesNotExist exception) {
System.out.println(exception.getMessage());
}


}
}
10 changes: 9 additions & 1 deletion src/main/java/Order.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,15 @@
import java.time.LocalDateTime;
import java.util.List;
import lombok.With;

@With
public record Order(
String id,
List<Product> products
List<Product> products,
OrderStatus status,
LocalDateTime timestamp
) {
public Order(String id, List<Product> products, LocalDateTime localdatetime) {
this(id, products, OrderStatus.PROCESSING,localdatetime);
}
}
7 changes: 7 additions & 0 deletions src/main/java/OrderListRepo.java
Original file line number Diff line number Diff line change
Expand Up @@ -30,4 +30,11 @@ public void removeOrder(String id) {
}
}
}

@Override
public String toString() {
return "OrderListRepo{" +
"orders=" + orders +
'}';
}
}
5 changes: 5 additions & 0 deletions src/main/java/OrderStatus.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
public enum OrderStatus {
PROCESSING,
IN_DELIVERY,
COMPLETED
}
6 changes: 6 additions & 0 deletions src/main/java/ProductDoesNotExist.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
public class ProductDoesNotExist extends RuntimeException {
public ProductDoesNotExist(String message) {

super(message);
}
}
15 changes: 12 additions & 3 deletions src/main/java/ProductRepo.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;

public class ProductRepo {
private List<Product> products;
Expand All @@ -13,13 +14,14 @@ public List<Product> getProducts() {
return products;
}

public Product getProductById(String id) {
//Coding: Optional Product
public Optional<Product> getProductById(String id) {
for (Product product : products) {
if (product.id().equals(id)) {
return product;
return Optional.of(product);
}
}
return null;
return Optional.empty();
}

public Product addProduct(Product newProduct) {
Expand All @@ -35,4 +37,11 @@ public void removeProduct(String id) {
}
}
}

@Override
public String toString() {
return "ProductRepo{" +
"products=" + products +
'}';
}
}
44 changes: 38 additions & 6 deletions src/main/java/ShopService.java
Original file line number Diff line number Diff line change
@@ -1,24 +1,56 @@
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.UUID;
import java.util.stream.Collectors;

public class ShopService {
private ProductRepo productRepo = new ProductRepo();
private OrderRepo orderRepo = new OrderMapRepo();


public ShopService(ProductRepo productRepo, OrderRepo orderRepo) {
this.productRepo = productRepo;
this.orderRepo = orderRepo;
}


//changed to Optional
//Modify the 'addOrder' method in the ShopService so that an exception
public Order addOrder(List<String> productIds) {
List<Product> products = new ArrayList<>();
for (String productId : productIds) {
Product productToOrder = productRepo.getProductById(productId);
if (productToOrder == null) {
System.out.println("Product mit der Id: " + productId + " konnte nicht bestellt werden!");
return null;
Optional<Product> productToOrderOpt = productRepo.getProductById(productId);
if (productToOrderOpt.isEmpty()) {
throw new ProductDoesNotExist("Product mit der Id: " + productId + " not exist");
// System.out.println("Product mit der Id: " + productId + " konnte nicht bestellt werden!");
// return null;
}
Product productToOrder = productToOrderOpt.get();
products.add(productToOrder);
}
Order newOrder = new Order(UUID.randomUUID().toString(), products, LocalDateTime.now());
return orderRepo.addOrder(newOrder);
}

public Order updateOrder(String id, OrderStatus status){
for(Order order : orderRepo.getOrders()){
if (order.id().equals(id)){
Order orderUpdate = order.withStatus(status);
orderRepo.removeOrder(order.id());
orderRepo.addOrder(orderUpdate);
return orderUpdate;
}
}
return null;
}

Order newOrder = new Order(UUID.randomUUID().toString(), products);

return orderRepo.addOrder(newOrder);
public List<Order> getOrdersByStatus(OrderStatus status) {
return orderRepo.getOrders().stream()
.filter(order -> order.status() == status)
.collect(Collectors.toList());
}

}
4 changes: 2 additions & 2 deletions src/test/java/ShopServiceTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ class ShopServiceTest {
@Test
void addOrderTest() {
//GIVEN
ShopService shopService = new ShopService();
ShopService shopService = new ShopService(new ProductRepo(), new OrderListRepo());
List<String> productsIds = List.of("1");

//WHEN
Expand All @@ -24,7 +24,7 @@ void addOrderTest() {
@Test
void addOrderTest_whenInvalidProductId_expectNull() {
//GIVEN
ShopService shopService = new ShopService();
ShopService shopService = new ShopService(new ProductRepo(),new OrderListRepo());
List<String> productsIds = List.of("1", "2");

//WHEN
Expand Down