Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
48 commits
Select commit Hold shift + click to select a range
3c7318e
added project base
MohammmedAhmed8 May 2, 2025
b0734f8
added .github file
MohammmedAhmed8 May 2, 2025
280a921
fixed linter issue
MohammmedAhmed8 May 2, 2025
c059be8
fixed linter issue
MohammmedAhmed8 May 2, 2025
d27f2e1
added order model, repository, service and controller
MohammmedAhmed8 May 3, 2025
05f9c90
fixed linter issues
MohammmedAhmed8 May 3, 2025
c26372d
Add endpoints to get orders by user ID, cancel orders, and update ord…
oaly2 May 4, 2025
da784fc
Fix linter issue
oaly2 May 4, 2025
5d20343
Resolve Comments
oaly2 May 4, 2025
8cc4b16
Adjusted lint checks
oaly2 May 4, 2025
7191cb3
added swagger and logger in the controller
MohammmedAhmed8 May 6, 2025
3542af2
Merge branch 'dev' into Crud-Operations
MohammmedAhmed8 May 6, 2025
fd5c1e5
fixed linter issues
MohammmedAhmed8 May 6, 2025
a5423a9
Added Global Exception Handler and Endpoint to Check out an order
oaly2 May 8, 2025
71d8612
Create docker-compose.yml
oaly2 May 10, 2025
ae077b0
Add DockerFile
oaly2 May 11, 2025
5e4bb96
Removed Checkout endpoint and Adjusted OrderStatus enum
oaly2 May 12, 2025
94a14a8
added order address
MohammmedAhmed8 May 12, 2025
afcea40
fixed linter issues
MohammmedAhmed8 May 12, 2025
7a36737
Merge branch 'dev' into Omar/3-endpoints
oaly2 May 12, 2025
306e5a9
Merge branch 'Crud-Operations' into Omar/3-endpoints
oaly2 May 12, 2025
d8dd9ff
Merge pull request #3 from Podzilla/Omar/3-endpoints
oaly2 May 12, 2025
e881d83
fixed errors
MohammmedAhmed8 May 12, 2025
c911c79
Chnage long -> UUID in OrderService
oaly2 May 12, 2025
3bf3427
Merge branch 'Crud-Operations' of https://github.com/Podzilla/order i…
oaly2 May 12, 2025
667adea
long -> UUID in OrderController
oaly2 May 12, 2025
5950a26
Add stock reservation and order placed messaging via RabbitMQ
oaly2 May 13, 2025
7d6888d
modified order consumer and order producer
MohammmedAhmed8 May 17, 2025
61eb999
removed unused classes
MohammmedAhmed8 May 17, 2025
b7c78d0
fixed linter issues
MohammmedAhmed8 May 17, 2025
d5ac88e
added track order
MohammmedAhmed8 May 17, 2025
db27a0b
modified get location url
MohammmedAhmed8 May 17, 2025
de6f836
Merge branch 'dev' into Crud-Operations
MohammmedAhmed8 May 17, 2025
784d7d4
fixed linter issue
MohammmedAhmed8 May 17, 2025
76687d4
added confirmation type, fixed linter issue
MohammmedAhmed8 May 17, 2025
4ffb195
added order long - lat
MohammmedAhmed8 May 17, 2025
bbeff45
fixed linter issue
MohammmedAhmed8 May 17, 2025
b5740a3
fixed run errors
MohammmedAhmed8 May 17, 2025
cbebb5b
Merge branch 'dev' into Crud-Operations
MohammmedAhmed8 May 17, 2025
21594a8
Added Builder design pattern
oaly2 May 17, 2025
3653097
deleted rabbitmq file
MohammmedAhmed8 May 17, 2025
abe48da
Added Strategy Design pattern for Order creation
oaly2 May 17, 2025
27aa36c
modified order canceled event, and listened to order delivery failed …
MohammmedAhmed8 May 18, 2025
e0e2c9c
Merge branch 'dev' into Crud-Operations
MohammmedAhmed8 May 18, 2025
a7f08bc
removed duplicated imports
MohammmedAhmed8 May 18, 2025
3d36c5a
Update src/main/java/com/podzilla/order/service/OrderService.java
MohammmedAhmed8 May 18, 2025
31eed6c
modified getOrderItems method
MohammmedAhmed8 May 18, 2025
a1d7abe
fixed linter
MohammmedAhmed8 May 18, 2025
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
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@
<dependency>
<groupId>com.github.Podzilla</groupId>
<artifactId>podzilla-utils-lib</artifactId>
<version>v1.1.11</version>
<version>v1.1.12</version>
</dependency>
</dependencies>
<build>
Expand Down
13 changes: 12 additions & 1 deletion src/main/java/com/podzilla/order/messaging/OrderConsumer.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import com.podzilla.mq.events.OrderPackagedEvent;
import com.podzilla.mq.events.WarehouseOrderFulfillmentFailedEvent;
import com.podzilla.mq.events.WarehouseStockReservedEvent;
import com.podzilla.mq.events.OrderDeliveryFailedEvent;
import com.podzilla.order.model.Address;
import com.podzilla.order.model.Order;
import com.podzilla.order.model.OrderProduct;
Expand Down Expand Up @@ -73,6 +74,16 @@ public void trackOrder(final BaseEvent payload) {
(CartCheckedoutEvent) payload;
handleCartCheckoutEvent(cartCheckedoutEvent);
}
if (payload instanceof OrderDeliveryFailedEvent) {
OrderDeliveryFailedEvent orderDeliveryFailedEvent =
(OrderDeliveryFailedEvent) payload;
log.info("❌ Order delivery failed for order: {}, reason: {}",
orderDeliveryFailedEvent.getOrderId(),
orderDeliveryFailedEvent.getReason());
orderService.updateOrderStatus(
UUID.fromString(orderDeliveryFailedEvent.getOrderId()),
OrderStatus.DELIVERY_FAILED);
}
}

private void handleWarehouseStockReservedEvent(
Expand Down Expand Up @@ -133,7 +144,7 @@ private void handleOrderAssignedToCourierEvent(final OrderAssignedToCourierEvent
UUID.fromString(orderAssignedToCourierEvent.getOrderId()),
new Order.Builder()
.courierId(UUID.fromString(orderAssignedToCourierEvent.getCourierId()))
.status(OrderStatus.ORDER_ASSIGNED_TO_COURIER)
.status(OrderStatus.ASSIGNED_TO_COURIER)
.build());
}

Expand Down
4 changes: 3 additions & 1 deletion src/main/java/com/podzilla/order/model/OrderStatus.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,11 @@ public enum OrderStatus {
PENDING,
PLACED,
PACKAGED,
ORDER_ASSIGNED_TO_COURIER,
ASSIGNED_TO_COURIER,
OUT_FOR_DELIVERY,
DELIVERED,
FULFILLMENT_FAILED,
DELIVERY_FAILED,
CANCELLED,
}

54 changes: 27 additions & 27 deletions src/main/java/com/podzilla/order/service/OrderService.java
Original file line number Diff line number Diff line change
@@ -1,28 +1,27 @@
package com.podzilla.order.service;

import com.podzilla.mq.events.DeliveryAddress;
import com.podzilla.mq.events.OrderCancelledEvent;
import com.podzilla.mq.events.OrderItem;
import com.podzilla.mq.events.OrderPlacedEvent;
import com.podzilla.mq.events.DeliveryAddress;
import com.podzilla.order.dtos.LocationDTO;
import com.podzilla.order.exception.InvalidActionException;
import com.podzilla.order.exception.NotFoundException;
import com.podzilla.order.messaging.OrderProducer;
import com.podzilla.order.model.Order;
import com.podzilla.order.model.OrderLocation;
import com.podzilla.order.model.OrderProduct;
import com.podzilla.order.model.OrderStatus;
import com.podzilla.order.repository.OrderRepository;
import com.podzilla.order.service.statusstrategy.OrderStatusStrategy;
import com.podzilla.order.service.statusstrategy.OrderStatusStrategyFactory;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.reactive.function.client.WebClient;
import com.podzilla.order.service.statusstrategy.OrderStatusStrategy;
import com.podzilla.order.service.statusstrategy.OrderStatusStrategyFactory;

import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.UUID;
Expand Down Expand Up @@ -148,17 +147,23 @@ public Order cancelOrder(final UUID id, final String reason) {
"Order not found with id: " + id);

Order order = existingOrder.get();
order.setStatus(OrderStatus.CANCELLED);
order.setUpdatedAt(LocalDateTime.now());
orderRepository.save(order);
OrderCancelledEvent orderCancelledEvent =
OrderCancelledEvent.builder()
.orderId(order.getId().toString())
.customerId(order.getUserId().toString())
.reason(reason)
.build();
orderProducer.sendCancelOrder(orderCancelledEvent);
return order;
OrderStatus status = order.getStatus();
if (status == OrderStatus.PENDING || status == OrderStatus.PACKAGED || status == OrderStatus.PLACED) {
order.setStatus(OrderStatus.CANCELLED);
order.setUpdatedAt(LocalDateTime.now());
orderRepository.save(order);
OrderCancelledEvent orderCancelledEvent =
OrderCancelledEvent.builder()
.orderId(order.getId().toString())
.customerId(order.getUserId().toString())
.items(getOrderItems(order))
.reason(reason)
.build();
orderProducer.sendCancelOrder(orderCancelledEvent);
return order;
}
log.warn("Order with id: {} cannot be cancelled", id);
throw new InvalidActionException("Order cannot be cancelled with id: " + id);
}

public Order updateOrderStatus(final UUID id,
Expand Down Expand Up @@ -204,17 +209,12 @@ private void checkNotFoundException(final Object value,
}

private List<OrderItem> getOrderItems(final Order order) {
List<OrderItem> orderItems = new ArrayList<>();
List<OrderProduct> orderProducts = order.getOrderProducts();
for (OrderProduct product : orderProducts) {
OrderItem orderItem = new OrderItem();
orderItem.setProductId(product.getId().toString());
orderItem.setQuantity(product.getQuantity());
orderItem.setPricePerUnit(product.getPricePerUnit());
orderItems.add(orderItem);
}
return orderItems;
return orderProducts.stream()
.map(product -> new OrderItem(
product.getProductId().toString(),
product.getQuantity(),
product.getPricePerUnit()))
.toList();
}


}