ldc-mesbr-app/src/Domain/Models/Entities/RequestedCoupon.php
2026-09-25 11:54:47 +02:00

86 lines
2.7 KiB
PHP

<?php
declare(strict_types=1);
namespace Domain\Models\Entities;
use Domain\Models\ValueObjects\Coupon\CouponValidity;
use Domain\Models\ValueObjects\CouponName;
use Domain\Models\ValueObjects\CouponPicture;
use Domain\Models\ValueObjects\CouponProductName;
use Domain\Models\ValueObjects\GS1;
use Domain\Models\ValueObjects\MoneyAmount;
use Domain\Models\ValueObjects\Period;
use Domain\Models\ValueObjects\ProcessingCode;
use Domain\Models\ValueObjects\RequestedCoupon\RequestedCouponId;
use Domain\Models\ValueObjects\RequestedCoupon\RequestedCouponQuantity;
use Shared\DDD\Models\AggregateRoot;
use Shared\DDD\Models\HasTimestampIdentifier;
use Domain\Models\ValueObjects\WarningThresholdQuantity;
/**
* @implements \Shared\DDD\Models\AggregateRoot<\Domain\Models\ValueObjects\RequestedCoupon\RequestedCouponId>
*/
final readonly class RequestedCoupon implements AggregateRoot, HasTimestampIdentifier
{
private function __construct(
public RequestedCouponId $id,
public CouponName $name,
public CouponProductName $productName,
public RequestedCouponQuantity $quantity,
public WarningThresholdQuantity $warningThresholdQuantity,
public Period $period,
public MoneyAmount $moneyAmount,
public ProcessingCode $processingCode,
public CouponPicture $couponPicture,
public GS1 $gs1,
public CouponValidity $couponValidity,
public ?\DateTimeInterface $updatedAt = null,
) {
}
public function id(): RequestedCouponId
{
return $this->id;
}
public function createdAt(): \DateTimeInterface
{
return $this->id->toDateTime();
}
public function updatedAt(): ?\DateTimeInterface
{
return $this->updatedAt;
}
public static function hydrate(
RequestedCouponId $id,
CouponName $name,
CouponProductName $productName,
RequestedCouponQuantity $quantity,
WarningThresholdQuantity $warningThresholdQuantity,
Period $period,
MoneyAmount $moneyAmount,
ProcessingCode $processingCode,
CouponPicture $couponPicture,
GS1 $gs1,
CouponValidity $couponValidity,
?\DateTimeInterface $updatedAt = null,
): self {
return new self(
id: $id,
name: $name,
productName: $productName,
quantity: $quantity,
warningThresholdQuantity: $warningThresholdQuantity,
period: $period,
moneyAmount: $moneyAmount,
processingCode: $processingCode,
couponPicture: $couponPicture,
gs1: $gs1,
couponValidity: $couponValidity,
updatedAt: $updatedAt,
);
}
}