From 7ef9762c5caefa92773cb9c339a8634c4a5e3fe7 Mon Sep 17 00:00:00 2001 From: Dido Date: Sun, 18 May 2025 18:54:14 +0300 Subject: [PATCH 1/4] updated PackagedOrders.java and Stock.java models to accommodate event attributes. --- .../warehouse/Models/PackagedOrders.java | 22 ++++++++++++++++++- .../com/podzilla/warehouse/Models/Stock.java | 4 +++- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/podzilla/warehouse/Models/PackagedOrders.java b/src/main/java/com/podzilla/warehouse/Models/PackagedOrders.java index d9a56a3..d46e3ab 100644 --- a/src/main/java/com/podzilla/warehouse/Models/PackagedOrders.java +++ b/src/main/java/com/podzilla/warehouse/Models/PackagedOrders.java @@ -1,12 +1,16 @@ package com.podzilla.warehouse.Models; +import com.podzilla.mq.events.ConfirmationType; +import com.podzilla.mq.events.DeliveryAddress; import jakarta.persistence.*; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; import org.hibernate.annotations.CreationTimestamp; +import java.math.BigDecimal; import java.time.LocalDateTime; +import java.util.List; import java.util.UUID; @Setter @@ -17,8 +21,23 @@ public class PackagedOrders { @Id private UUID orderId; - private UUID packagerId; + @Column(nullable = false) + @OneToMany(mappedBy = "packagedOrder") + private List items; + + @Column(nullable = false) + private DeliveryAddress deliveryAddress; + @Column(nullable = false) + private BigDecimal totalAmount; + @Column(nullable = false) + private double orderLatitude; + @Column(nullable = false) + private double orderLongitude; + @Column(nullable = false) + private String signature; + @Column(nullable = false) + private ConfirmationType confirmationType; @CreationTimestamp private LocalDateTime packagedAt; @@ -32,5 +51,6 @@ public PackagedOrders(UUID orderId, UUID packagerId, LocalDateTime packagedAt) { public PackagedOrders(UUID orderId) { this.orderId = orderId; this.packagedAt = LocalDateTime.now(); + } } \ No newline at end of file diff --git a/src/main/java/com/podzilla/warehouse/Models/Stock.java b/src/main/java/com/podzilla/warehouse/Models/Stock.java index 19cd040..c5a07b4 100644 --- a/src/main/java/com/podzilla/warehouse/Models/Stock.java +++ b/src/main/java/com/podzilla/warehouse/Models/Stock.java @@ -34,7 +34,9 @@ public class Stock { @Column(nullable = false) private String category; - + @ManyToOne + @JoinColumn(name = "order_id", nullable = true) + private PackagedOrders packagedOrder; @CreationTimestamp @Column(updatable = false) private LocalDateTime createdAt; From cd92be15945a93c67e8bd0f11472dc71f97a74fd Mon Sep 17 00:00:00 2001 From: Dido Date: Sun, 18 May 2025 18:55:09 +0300 Subject: [PATCH 2/4] added new consturctor in PackagedOrders.java. --- .idea/compiler.xml | 10 +--------- .../podzilla/warehouse/Models/PackagedOrders.java | 13 +++++++++++++ 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/.idea/compiler.xml b/.idea/compiler.xml index f1e20ad..bfdf789 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -10,16 +10,8 @@ - - - - - - - - - + diff --git a/src/main/java/com/podzilla/warehouse/Models/PackagedOrders.java b/src/main/java/com/podzilla/warehouse/Models/PackagedOrders.java index d46e3ab..b141b82 100644 --- a/src/main/java/com/podzilla/warehouse/Models/PackagedOrders.java +++ b/src/main/java/com/podzilla/warehouse/Models/PackagedOrders.java @@ -53,4 +53,17 @@ public PackagedOrders(UUID orderId) { this.packagedAt = LocalDateTime.now(); } + public PackagedOrders(UUID orderId, UUID packagerId, List items, DeliveryAddress deliveryAddress, + BigDecimal totalAmount, double orderLatitude, double orderLongitude, String signature, + ConfirmationType confirmationType) { + this.orderId = orderId; + this.packagerId = packagerId; + this.items = items; + this.deliveryAddress = deliveryAddress; + this.totalAmount = totalAmount; + this.orderLatitude = orderLatitude; + this.orderLongitude = orderLongitude; + this.signature = signature; + this.confirmationType = confirmationType; + } } \ No newline at end of file From dfc488fee58e12efdd43d1c550178fa94df46c4e Mon Sep 17 00:00:00 2001 From: Dido Date: Sun, 18 May 2025 18:55:36 +0300 Subject: [PATCH 3/4] added new consturctor in PackagedOrders.java. --- src/main/java/com/podzilla/warehouse/Models/Stock.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/podzilla/warehouse/Models/Stock.java b/src/main/java/com/podzilla/warehouse/Models/Stock.java index c5a07b4..a3c0331 100644 --- a/src/main/java/com/podzilla/warehouse/Models/Stock.java +++ b/src/main/java/com/podzilla/warehouse/Models/Stock.java @@ -64,4 +64,5 @@ public Stock(String name, int quantity) { this.quantity = quantity; } + } \ No newline at end of file From 2547f65f0eddf16ccdc4bce9e639716ff7fba79b Mon Sep 17 00:00:00 2001 From: Ahmed Wael Date: Sun, 18 May 2025 22:56:32 +0300 Subject: [PATCH 4/4] added last event --- .idea/compiler.xml | 10 +++- .../warehouse/Events/EventFactory.java | 5 +- .../warehouse/Models/AssignedOrders.java | 46 +++++++++++++++++-- .../PackagedOrdersRepository.java | 2 + .../Services/AssignedOrdersService.java | 25 +++++++--- 5 files changed, 74 insertions(+), 14 deletions(-) diff --git a/.idea/compiler.xml b/.idea/compiler.xml index bfdf789..f1e20ad 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -10,9 +10,17 @@ - + + + + + + + + + diff --git a/src/main/java/com/podzilla/warehouse/Events/EventFactory.java b/src/main/java/com/podzilla/warehouse/Events/EventFactory.java index c37602f..dc3df58 100644 --- a/src/main/java/com/podzilla/warehouse/Events/EventFactory.java +++ b/src/main/java/com/podzilla/warehouse/Events/EventFactory.java @@ -93,16 +93,15 @@ public static OrderPackagedEvent createOrderPackagedEvent( public static OrderAssignedToCourierEvent createOrderAssignedToCourierEvent( UUID orderId, UUID courierId, - double totalAmount, + BigDecimal totalAmount, double orderLatitude, double orderLongitude, String signature, ConfirmationType confirmationType) { - BigDecimal totalAmountBigDecimal = BigDecimal.valueOf(totalAmount); return new OrderAssignedToCourierEvent( orderId.toString(), courierId.toString(), - totalAmountBigDecimal, + totalAmount, orderLatitude, orderLongitude, signature, diff --git a/src/main/java/com/podzilla/warehouse/Models/AssignedOrders.java b/src/main/java/com/podzilla/warehouse/Models/AssignedOrders.java index ab6c8bf..148a7fa 100644 --- a/src/main/java/com/podzilla/warehouse/Models/AssignedOrders.java +++ b/src/main/java/com/podzilla/warehouse/Models/AssignedOrders.java @@ -1,12 +1,16 @@ package com.podzilla.warehouse.Models; +import com.podzilla.mq.events.ConfirmationType; +import com.podzilla.mq.events.DeliveryAddress; import jakarta.persistence.*; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; import org.hibernate.annotations.CreationTimestamp; +import java.math.BigDecimal; import java.time.LocalDateTime; +import java.util.List; import java.util.UUID; @Entity @@ -28,18 +32,52 @@ public class AssignedOrders { @CreationTimestamp private LocalDateTime assignedAt; - public AssignedOrders(UUID orderId, UUID assignerId, UUID courierId) { + @Column(nullable = false) + @OneToMany(mappedBy = "packagedOrder") + private List items; + + @Column(nullable = false) + private DeliveryAddress deliveryAddress; + @Column(nullable = false) + private BigDecimal totalAmount; + @Column(nullable = false) + private double orderLatitude; + @Column(nullable = false) + private double orderLongitude; + @Column(nullable = false) + private String signature; + @Column(nullable = false) + private ConfirmationType confirmationType; + + public AssignedOrders(UUID orderId, UUID assignerId, UUID courierId, List items, + DeliveryAddress deliveryAddress, BigDecimal totalAmount, double orderLatitude, + double orderLongitude, String signature, ConfirmationType confirmationType) { this.orderId = orderId; this.assignerId = assignerId; this.courierId = courierId; this.assignedAt = LocalDateTime.now(); + this.items = items; + this.deliveryAddress = deliveryAddress; + this.totalAmount = totalAmount; + this.orderLatitude = orderLatitude; + this.orderLongitude = orderLongitude; + this.signature = signature; + this.confirmationType = confirmationType; } - - - public AssignedOrders(UUID orderId, UUID assignerId, UUID courierId, LocalDateTime assignedAt) { + + public AssignedOrders(UUID orderId, UUID assignerId, UUID courierId, LocalDateTime assignedAt, + List items, DeliveryAddress deliveryAddress, BigDecimal totalAmount, + double orderLatitude, double orderLongitude, String signature, ConfirmationType confirmationType) { this.orderId = orderId; this.assignerId = assignerId; this.courierId = courierId; this.assignedAt = assignedAt; + this.items = items; + this.deliveryAddress = deliveryAddress; + this.totalAmount = totalAmount; + this.orderLatitude = orderLatitude; + this.orderLongitude = orderLongitude; + this.signature = signature; + this.confirmationType = confirmationType; } } diff --git a/src/main/java/com/podzilla/warehouse/Repositories/PackagedOrdersRepository.java b/src/main/java/com/podzilla/warehouse/Repositories/PackagedOrdersRepository.java index 1f8934e..412b0bb 100644 --- a/src/main/java/com/podzilla/warehouse/Repositories/PackagedOrdersRepository.java +++ b/src/main/java/com/podzilla/warehouse/Repositories/PackagedOrdersRepository.java @@ -6,6 +6,7 @@ import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; +import java.util.Optional; import java.util.UUID; @Repository @@ -13,4 +14,5 @@ public interface PackagedOrdersRepository extends JpaRepository findByPackagerIdIsNull(Pageable pageable); Page findByPackagerId(UUID packagerId, Pageable pageable); Page findByOrderId(UUID orderId, Pageable pageable); + Optional findOneByOrderId(UUID orderId); } diff --git a/src/main/java/com/podzilla/warehouse/Services/AssignedOrdersService.java b/src/main/java/com/podzilla/warehouse/Services/AssignedOrdersService.java index 488bda6..44a3d3b 100644 --- a/src/main/java/com/podzilla/warehouse/Services/AssignedOrdersService.java +++ b/src/main/java/com/podzilla/warehouse/Services/AssignedOrdersService.java @@ -5,9 +5,10 @@ import com.podzilla.mq.events.OrderAssignedToCourierEvent; import com.podzilla.warehouse.Events.EventFactory; import com.podzilla.warehouse.Models.AssignedOrders; +import com.podzilla.warehouse.Models.PackagedOrders; import com.podzilla.warehouse.Repositories.AssignedOrdersRepository; +import com.podzilla.warehouse.Repositories.PackagedOrdersRepository; import lombok.RequiredArgsConstructor; -import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.CacheConfig; import org.springframework.cache.annotation.CacheEvict; @@ -27,6 +28,7 @@ public class AssignedOrdersService { @Autowired private AssignedOrdersRepository assignedOrdersRepository; + private PackagedOrdersRepository packagedOrdersRepository; @Cacheable(key = "'orderId:' + #orderId") public Optional> findByOrderId(UUID orderId) { @@ -45,13 +47,24 @@ public Optional> findByAssignerIdIsNull() { @CachePut(key = "'orderId:' + #orderId") public AssignedOrders assignOrder(UUID orderId, UUID assignerId, UUID courierId) { - AssignedOrders assignment = new AssignedOrders(orderId, assignerId, courierId); + PackagedOrders packagedOrder = packagedOrdersRepository.findOneByOrderId(orderId).get(); + AssignedOrders assignment = new AssignedOrders(orderId, assignerId, courierId, packagedOrder.getItems(), + packagedOrder.getDeliveryAddress(), packagedOrder.getTotalAmount(), packagedOrder.getOrderLatitude(), + packagedOrder.getOrderLongitude(), packagedOrder.getSignature(), packagedOrder.getConfirmationType()); assignedOrdersRepository.save(assignment); - //TODO: after merge -// OrderAssignedToCourierEvent event = EventFactory.createOrderAssignedToCourierEvent(orderId, courierId); -// -// eventPublisher.publishEvent(EventsConstants.ORDER_ASSIGNED_TO_COURIER, event); + OrderAssignedToCourierEvent event = + EventFactory.createOrderAssignedToCourierEvent( + orderId, + courierId, + assignment.getTotalAmount(), + assignment.getOrderLatitude(), + assignment.getOrderLongitude(), + assignment.getSignature(), + assignment.getConfirmationType() + ); + + eventPublisher.publishEvent(EventsConstants.ORDER_ASSIGNED_TO_COURIER, event); return assignment; }