ldc-boutique-cnc-sable/domain/Services/OrderService.php

63 lines
1.4 KiB
PHP
Raw Permalink Normal View History

2026-06-14 21:32:07 +02:00
<?php
declare(strict_types=1);
namespace Domain\Services;
use Domain\Models\Entities\Basket;
use Domain\Models\Entities\Order;
use Domain\Models\Entities\Shop;
use Domain\Models\Entities\Shopper;
use Domain\Models\ValueObjects\Entities\OrderId;
use Domain\Models\ValueObjects\OrderReference;
use Domain\Models\ValueObjects\PickupTimeSlot;
use Domain\Ports\Repositories\OrderRepository;
use Ramsey\Uuid\Uuid;
class OrderService
{
public function __construct(
private readonly OrderRepository $orderRepository,
) {
}
public function createOrderFromBasket(
Basket $basket,
PickupTimeSlot $pickupTimeSlot,
Shopper $shopper,
Shop $shop
): Order {
return Order::fromBasket(
2026-06-14 21:32:07 +02:00
id: $this->newOrderId(),
reference: $this->newReference(),
basket: $basket,
pickupTimeSlot: $pickupTimeSlot,
shopper: $shopper,
shop: $shop
2026-06-14 21:32:07 +02:00
);
}
private function newOrderId(): OrderId
{
return new OrderId(Uuid::uuid7());
}
private function newReference(): OrderReference
{
return new OrderReference(Uuid::uuid7());
2026-06-14 21:32:07 +02:00
}
public function cancelOrder(OrderId $id): void
{
$order = $this->orderRepository->find($id);
if (! $order) {
throw new \DomainException('Order not found');
}
$order->cancel();
$this->orderRepository->persist($order);
}
}