*/ final readonly class CampaignRequest implements AggregateRoot, HasTimestampIdentifier { private function __construct( public CampaignRequestId $id, public BrandCode $code, public Applicant $applicant, public Country $country, public CampaignType $campaignType, public ?PrintRules $printRules, public RequestedCoupon $requestedCoupon, public CampaignStatus $status, public ?\DateTimeInterface $updatedAt = null, ) {} public function id(): CampaignRequestId { return $this->id; } public function createdAt(): \DateTimeInterface { return $this->id->toDateTime(); } public function updatedAt(): ?\DateTimeInterface { return $this->updatedAt; } public static function hydrate( CampaignRequestId $id, BrandCode $code, Applicant $applicant, Country $country, CampaignType $campaignType, ?PrintRules $printRules, RequestedCoupon $requestedCoupon, CampaignStatus $status, ?\DateTimeInterface $updatedAt = null, ): self { return new self( id: $id, code: $code, applicant: $applicant, country: $country, campaignType: $campaignType, printRules: $printRules, requestedCoupon: $requestedCoupon, status: $status, updatedAt: $updatedAt, ); } }