From a05022fae35cbb10590f18a70d1e371d59ec0b09 Mon Sep 17 00:00:00 2001 From: romanetar Date: Tue, 3 Feb 2026 16:25:35 +0100 Subject: [PATCH 1/2] feat: publish media file type lifecycle events to sponsor services Signed-off-by: romanetar --- .../SummitMediaFileTypeCreatedEventDTO.php | 55 +++++++++++++++++++ .../SummitMediaFileTypeDomainEvents.php | 21 +++++++ .../Model/Imp/SummitMediaFileTypeService.php | 26 ++++++++- config/queue.php | 3 + 4 files changed, 102 insertions(+), 3 deletions(-) create mode 100644 app/Events/SponsorServices/SummitMediaFileTypeCreatedEventDTO.php create mode 100644 app/Events/SponsorServices/SummitMediaFileTypeDomainEvents.php diff --git a/app/Events/SponsorServices/SummitMediaFileTypeCreatedEventDTO.php b/app/Events/SponsorServices/SummitMediaFileTypeCreatedEventDTO.php new file mode 100644 index 000000000..97a74b253 --- /dev/null +++ b/app/Events/SponsorServices/SummitMediaFileTypeCreatedEventDTO.php @@ -0,0 +1,55 @@ +id = $id; + $this->name = $name; + $this->description = $description; + $this->allowed_extensions = $allowed_extensions; + } + + public static function fromSummitMediaFileType($summit_media_file_type): self + { + return new self( + $summit_media_file_type->getId(), + $summit_media_file_type->getName(), + $summit_media_file_type->getDescription(), + $summit_media_file_type->getAllowedExtensions(), + ); + } + + public function serialize(): array + { + return [ + 'id' => $this->id, + 'name' => $this->name, + 'description' => $this->description, + 'allowed_extensions' => $this->allowed_extensions + ]; + } +} diff --git a/app/Events/SponsorServices/SummitMediaFileTypeDomainEvents.php b/app/Events/SponsorServices/SummitMediaFileTypeDomainEvents.php new file mode 100644 index 000000000..af4ff6500 --- /dev/null +++ b/app/Events/SponsorServices/SummitMediaFileTypeDomainEvents.php @@ -0,0 +1,21 @@ +tx_service->transaction(function() use($payload){ + $media_file_type = $this->tx_service->transaction(function() use($payload){ $type = $this->repository->getByName(trim($payload['name'])); if(!is_null($type)) throw new ValidationException(sprintf("Name %s already exists.", $payload['name'])); @@ -57,6 +61,12 @@ public function add(array $payload): SummitMediaFileType $this->repository->add($type); return $type; }); + + PublishSponsorServiceDomainEventsJob::dispatch( + SummitMediaFileTypeCreatedEventDTO::fromSummitMediaFileType($media_file_type)->serialize(), + SummitMediaFileTypeDomainEvents::SummitMediaFileTypeCreated); + + return $media_file_type; } /** @@ -77,7 +87,13 @@ public function update(int $id, array $payload): SummitMediaFileType throw new ValidationException(sprintf("Name %s already exists.", $payload['name'])); } - return SummitMediaFileTypeFactory::populate($type, $payload); + $media_file_type = SummitMediaFileTypeFactory::populate($type, $payload); + + PublishSponsorServiceDomainEventsJob::dispatch( + SummitMediaFileTypeCreatedEventDTO::fromSummitMediaFileType($media_file_type)->serialize(), + SummitMediaFileTypeDomainEvents::SummitMediaFileTypeUpdated); + + return $media_file_type; }); } @@ -94,6 +110,10 @@ public function delete(int $id): void throw new ValidationException("You can not delete a system defined type."); $this->repository->delete($type); + + PublishSponsorServiceDomainEventsJob::dispatch( + DeletedEventDTO::fromEntity($type)->serialize(), + SummitMediaFileTypeDomainEvents::SummitMediaFileTypeDeleted); }); } -} \ No newline at end of file +} diff --git a/config/queue.php b/config/queue.php index 2f3346bc3..6a175b9bb 100644 --- a/config/queue.php +++ b/config/queue.php @@ -184,6 +184,9 @@ * - summit_created ( see app/Events/SponsorServices/SummitDomainEvents.php ) * - summit_updated * - summit_deleted + * - summit_media_file_type_created ( see app/Events/SponsorServices/SummitMediaFileTypeDomainEvents.php ) + * - summit_media_file_type_updated + * - summit_media_file_type_deleted */ 'domain_events_message_broker' => [ 'driver' => 'rabbitmq', From 8021df82bc5154d3a9bb7124594baad3214cfd43 Mon Sep 17 00:00:00 2001 From: romanetar Date: Fri, 10 Apr 2026 19:04:01 +0200 Subject: [PATCH 2/2] fix: review feedback Signed-off-by: romanetar --- .../SummitMediaFileTypeCreatedEventDTO.php | 26 +++-- .../Model/Imp/SummitMediaFileTypeService.php | 28 ++--- app/Services/Model/Imp/SummitService.php | 24 ++--- .../Model/Imp/SummitSponsorService.php | 24 +++-- .../Model/Imp/SummitSponsorshipService.php | 101 ++++++++++-------- 5 files changed, 114 insertions(+), 89 deletions(-) diff --git a/app/Events/SponsorServices/SummitMediaFileTypeCreatedEventDTO.php b/app/Events/SponsorServices/SummitMediaFileTypeCreatedEventDTO.php index 97a74b253..e91166e6c 100644 --- a/app/Events/SponsorServices/SummitMediaFileTypeCreatedEventDTO.php +++ b/app/Events/SponsorServices/SummitMediaFileTypeCreatedEventDTO.php @@ -17,14 +17,14 @@ class SummitMediaFileTypeCreatedEventDTO { private int $id; private string $name; - private string $description; - private string $allowed_extensions; + private ?string $description; + private ?string $allowed_extensions; public function __construct( - int $id, - string $name, - string $description, - string $allowed_extensions + int $id, + string $name, + ?string $description, + ?string $allowed_extensions ) { $this->id = $id; @@ -45,11 +45,17 @@ public static function fromSummitMediaFileType($summit_media_file_type): self public function serialize(): array { - return [ - 'id' => $this->id, + $res = [ + 'id' => $this->id, 'name' => $this->name, - 'description' => $this->description, - 'allowed_extensions' => $this->allowed_extensions ]; + + if (!is_null($this->description)) + $res['description'] = $this->description; + + if (!is_null($this->allowed_extensions)) + $res['allowed_extensions'] = $this->allowed_extensions; + + return $res; } } diff --git a/app/Services/Model/Imp/SummitMediaFileTypeService.php b/app/Services/Model/Imp/SummitMediaFileTypeService.php index c52c683ad..4e12eff79 100644 --- a/app/Services/Model/Imp/SummitMediaFileTypeService.php +++ b/app/Services/Model/Imp/SummitMediaFileTypeService.php @@ -50,6 +50,7 @@ public function __construct /** * @inheritDoc + * @throws \Exception */ public function add(array $payload): SummitMediaFileType { @@ -71,10 +72,11 @@ public function add(array $payload): SummitMediaFileType /** * @inheritDoc + * @throws \Exception */ public function update(int $id, array $payload): SummitMediaFileType { - return $this->tx_service->transaction(function() use($id, $payload){ + $media_file_type = $this->tx_service->transaction(function() use($id, $payload){ $type = $this->repository->getById($id); if(is_null($type)) throw new EntityNotFoundException(); @@ -86,23 +88,23 @@ public function update(int $id, array $payload): SummitMediaFileType if(!is_null($type) && $type->getId() != $id) throw new ValidationException(sprintf("Name %s already exists.", $payload['name'])); } + return SummitMediaFileTypeFactory::populate($type, $payload); + }); - $media_file_type = SummitMediaFileTypeFactory::populate($type, $payload); - - PublishSponsorServiceDomainEventsJob::dispatch( - SummitMediaFileTypeCreatedEventDTO::fromSummitMediaFileType($media_file_type)->serialize(), - SummitMediaFileTypeDomainEvents::SummitMediaFileTypeUpdated); + PublishSponsorServiceDomainEventsJob::dispatch( + SummitMediaFileTypeCreatedEventDTO::fromSummitMediaFileType($media_file_type)->serialize(), + SummitMediaFileTypeDomainEvents::SummitMediaFileTypeUpdated); - return $media_file_type; - }); + return $media_file_type; } /** * @inheritDoc + * @throws \Exception */ public function delete(int $id): void { - $this->tx_service->transaction(function() use($id){ + $type = $this->tx_service->transaction(function() use($id){ $type = $this->repository->getById($id); if(is_null($type)) throw new EntityNotFoundException(); @@ -111,9 +113,11 @@ public function delete(int $id): void $this->repository->delete($type); - PublishSponsorServiceDomainEventsJob::dispatch( - DeletedEventDTO::fromEntity($type)->serialize(), - SummitMediaFileTypeDomainEvents::SummitMediaFileTypeDeleted); + return $type; }); + + PublishSponsorServiceDomainEventsJob::dispatch( + DeletedEventDTO::fromEntity($type)->serialize(), + SummitMediaFileTypeDomainEvents::SummitMediaFileTypeDeleted); } } diff --git a/app/Services/Model/Imp/SummitService.php b/app/Services/Model/Imp/SummitService.php index ec3afe8c7..07afb27b6 100644 --- a/app/Services/Model/Imp/SummitService.php +++ b/app/Services/Model/Imp/SummitService.php @@ -1585,10 +1585,11 @@ public function addSummit(array $data) * @return Summit * @throws EntityNotFoundException * @throws ValidationException + * @throws Exception */ public function updateSummit($summit_id, array $data) { - return $this->tx_service->transaction(function () use ($summit_id, $data) { + $summit = $this->tx_service->transaction(function () use ($summit_id, $data) { if (isset($data['name'])) { @@ -1656,14 +1657,13 @@ public function updateSummit($summit_id, array $data) ) ); } + return SummitFactory::populate($summit, $data); + }); - $summit = SummitFactory::populate($summit, $data); - - PublishSponsorServiceDomainEventsJob::dispatch( - SummitCreatedEventDTO::fromSummit($summit)->serialize(), SummitDomainEvents::SummitUpdated); + PublishSponsorServiceDomainEventsJob::dispatch( + SummitCreatedEventDTO::fromSummit($summit)->serialize(), SummitDomainEvents::SummitUpdated); - return $summit; - }); + return $summit; } /** @@ -1674,7 +1674,7 @@ public function updateSummit($summit_id, array $data) */ public function deleteSummit($summit_id) { - return $this->tx_service->transaction(function () use ($summit_id) { + $summit = $this->tx_service->transaction(function () use ($summit_id) { $summit = $this->summit_repository->getById($summit_id); @@ -1691,11 +1691,11 @@ public function deleteSummit($summit_id) Log::debug(sprintf("SummitService::deleteSummit summit_id %s", $summit_id)); $summit->markAsDeleted(); - - PublishSponsorServiceDomainEventsJob::dispatch( - DeletedEventDTO::fromEntity($summit)->serialize(), SummitDomainEvents::SummitDeleted); - + return $summit; }); + + PublishSponsorServiceDomainEventsJob::dispatch( + DeletedEventDTO::fromEntity($summit)->serialize(), SummitDomainEvents::SummitDeleted); } /** diff --git a/app/Services/Model/Imp/SummitSponsorService.php b/app/Services/Model/Imp/SummitSponsorService.php index d987f1bc3..6399009b0 100644 --- a/app/Services/Model/Imp/SummitSponsorService.php +++ b/app/Services/Model/Imp/SummitSponsorService.php @@ -184,10 +184,11 @@ public function addSponsor(Summit $summit, array $payload): Sponsor * @return Sponsor * @throws EntityNotFoundException * @throws ValidationException + * @throws \Exception */ public function updateSponsor(Summit $summit, int $sponsor_id, array $payload): Sponsor { - return $this->tx_service->transaction(function () use ($summit, $sponsor_id, $payload) { + $sponsor = $this->tx_service->transaction(function () use ($summit, $sponsor_id, $payload) { Log::debug ( sprintf @@ -332,12 +333,14 @@ function (array $acc, SummitSponsorship $sp): array { $summit->recalculateSummitSponsorOrder($sponsor, $payload['order']); } - PublishSponsorServiceDomainEventsJob::dispatch( - SummitSponsorCreatedEventDTO::fromSummitSponsor($sponsor)->serialize(), - SponsorDomainEvents::SponsorUpdated); - return $sponsor; }); + + PublishSponsorServiceDomainEventsJob::dispatch( + SummitSponsorCreatedEventDTO::fromSummitSponsor($sponsor)->serialize(), + SponsorDomainEvents::SponsorUpdated); + + return $sponsor; } /** @@ -348,17 +351,18 @@ function (array $acc, SummitSponsorship $sp): array { */ public function deleteSponsor(Summit $summit, int $sponsor_id): void { - $this->tx_service->transaction(function () use ($summit, $sponsor_id) { + $sponsor = $this->tx_service->transaction(function () use ($summit, $sponsor_id) { $summit_sponsor = $summit->getSummitSponsorById($sponsor_id); if (is_null($summit_sponsor)) throw new EntityNotFoundException("Sponsor not found."); $summit->removeSummitSponsor($summit_sponsor); - - PublishSponsorServiceDomainEventsJob::dispatch( - DeletedEventDTO::fromEntity($summit_sponsor)->serialize(), - SponsorDomainEvents::SponsorDeleted); + return $summit_sponsor; }); + + PublishSponsorServiceDomainEventsJob::dispatch( + DeletedEventDTO::fromEntity($sponsor)->serialize(), + SponsorDomainEvents::SponsorDeleted); } /** diff --git a/app/Services/Model/Imp/SummitSponsorshipService.php b/app/Services/Model/Imp/SummitSponsorshipService.php index 0c0c1189d..829234818 100644 --- a/app/Services/Model/Imp/SummitSponsorshipService.php +++ b/app/Services/Model/Imp/SummitSponsorshipService.php @@ -38,7 +38,8 @@ final class SummitSponsorshipService extends AbstractService implements ISummitS */ public function addSponsorships(Summit $summit, int $sponsor_id, array $summit_sponsorship_type_ids): array { - $sponsorships = $this->tx_service->transaction(function () use ($summit, $sponsor_id, $summit_sponsorship_type_ids) { + $summit_sponsor = null; + $sponsorships = $this->tx_service->transaction(function () use ($summit, $sponsor_id, $summit_sponsorship_type_ids, &$summit_sponsor) { $res = []; $summit_sponsor = $summit->getSummitSponsorById($sponsor_id); if (is_null($summit_sponsor)) @@ -52,13 +53,14 @@ public function addSponsorships(Summit $summit, int $sponsor_id, array $summit_s $summit_sponsor->addSponsorship($sponsorship); $res[] = $sponsorship; } - PublishSponsorServiceDomainEventsJob::dispatch( - SummitSponsorCreatedEventDTO::fromSummitSponsor($summit_sponsor)->serialize(), - SponsorDomainEvents::SponsorUpdated); return $res; }); + PublishSponsorServiceDomainEventsJob::dispatch( + SummitSponsorCreatedEventDTO::fromSummitSponsor($summit_sponsor)->serialize(), + SponsorDomainEvents::SponsorUpdated); + foreach ($sponsorships as $sponsorship) { PublishSponsorServiceDomainEventsJob::dispatch( SummitSponsorshipCreatedEventDTO::fromSponsorship($sponsorship)->serialize(), @@ -73,7 +75,9 @@ public function addSponsorships(Summit $summit, int $sponsor_id, array $summit_s */ public function removeSponsorship(Summit $summit, int $sponsor_id, int $sponsorship_id): void { - $this->tx_service->transaction(function () use ($summit, $sponsor_id, $sponsorship_id) { + $summit_sponsor = null; + $sponsorship = null; + $this->tx_service->transaction(function () use ($summit, $sponsor_id, $sponsorship_id, &$summit_sponsor, &$sponsorship) { $summit_sponsor = $summit->getSummitSponsorById($sponsor_id); if (is_null($summit_sponsor)) @@ -84,15 +88,15 @@ public function removeSponsorship(Summit $summit, int $sponsor_id, int $sponsors throw new EntityNotFoundException("Sponsorship {$sponsorship_id} not found in sponsor {$sponsor_id}."); $summit_sponsor->removeSponsorship($sponsorship); + }); - PublishSponsorServiceDomainEventsJob::dispatch( - SummitSponsorCreatedEventDTO::fromSummitSponsor($summit_sponsor)->serialize(), - SponsorDomainEvents::SponsorUpdated); + PublishSponsorServiceDomainEventsJob::dispatch( + SummitSponsorCreatedEventDTO::fromSummitSponsor($summit_sponsor)->serialize(), + SponsorDomainEvents::SponsorUpdated); - PublishSponsorServiceDomainEventsJob::dispatch( - DeletedEventDTO::fromEntity($sponsorship)->serialize(), - SponsorDomainEvents::SponsorshipRemoved); - }); + PublishSponsorServiceDomainEventsJob::dispatch( + DeletedEventDTO::fromEntity($sponsorship)->serialize(), + SponsorDomainEvents::SponsorshipRemoved); } /** @@ -101,7 +105,9 @@ public function removeSponsorship(Summit $summit, int $sponsor_id, int $sponsors */ public function addNewAddOn(Summit $summit, int $sponsor_id, int $sponsorship_id, array $payload): SummitSponsorshipAddOn { - $add_on = $this->tx_service->transaction(function () use ($summit, $sponsor_id, $sponsorship_id, $payload) { + $summit_sponsor = null; + $sponsorship = null; + $add_on = $this->tx_service->transaction(function () use ($summit, $sponsor_id, $sponsorship_id, $payload, &$summit_sponsor, &$sponsorship) { $summit_sponsor = $summit->getSummitSponsorById($sponsor_id); if (is_null($summit_sponsor)) throw new EntityNotFoundException("Sponsor not found."); @@ -113,18 +119,16 @@ public function addNewAddOn(Summit $summit, int $sponsor_id, int $sponsorship_id $add_on = SummitSponsorshipAddOnFactory::build($payload); $sponsorship->addAddOn($add_on); - PublishSponsorServiceDomainEventsJob::dispatch( - SummitSponsorCreatedEventDTO::fromSummitSponsor($summit_sponsor)->serialize(), - SponsorDomainEvents::SponsorUpdated); - - PublishSponsorServiceDomainEventsJob::dispatch( - SummitSponsorshipCreatedEventDTO::fromSponsorship($sponsorship)->serialize(), - SponsorDomainEvents::SponsorshipUpdated); - return $add_on; }); + PublishSponsorServiceDomainEventsJob::dispatch( + SummitSponsorCreatedEventDTO::fromSummitSponsor($summit_sponsor)->serialize(), + SponsorDomainEvents::SponsorUpdated); + PublishSponsorServiceDomainEventsJob::dispatch( + SummitSponsorshipCreatedEventDTO::fromSponsorship($sponsorship)->serialize(), + SponsorDomainEvents::SponsorshipUpdated); PublishSponsorServiceDomainEventsJob::dispatch( SummitSponsorshipAddOnCreatedEventDTO::fromSponsorshipAddOn($add_on)->serialize(), @@ -139,7 +143,10 @@ public function addNewAddOn(Summit $summit, int $sponsor_id, int $sponsorship_id */ public function updateAddOn(Summit $summit, int $sponsor_id, int $sponsorship_id, int $add_on_id, array $payload): SummitSponsorshipAddOn { - return $this->tx_service->transaction(function () use ($summit, $sponsor_id, $sponsorship_id, $add_on_id, $payload) { + $summit_sponsor = null; + $sponsorship = null; + $add_on = $this->tx_service->transaction(function () use ($summit, $sponsor_id, $sponsorship_id, $add_on_id, $payload, + &$summit_sponsor, &$sponsorship) { Log::debug ( sprintf @@ -165,22 +172,22 @@ public function updateAddOn(Summit $summit, int $sponsor_id, int $sponsorship_id if (is_null($add_on)) throw new EntityNotFoundException("AddOn {$add_on_id} not found for sponsorship {$sponsorship_id}."); - $res = SummitSponsorshipAddOnFactory::populate($add_on, $payload); + return SummitSponsorshipAddOnFactory::populate($add_on, $payload); + }); - PublishSponsorServiceDomainEventsJob::dispatch( - SummitSponsorCreatedEventDTO::fromSummitSponsor($summit_sponsor)->serialize(), - SponsorDomainEvents::SponsorUpdated); + PublishSponsorServiceDomainEventsJob::dispatch( + SummitSponsorCreatedEventDTO::fromSummitSponsor($summit_sponsor)->serialize(), + SponsorDomainEvents::SponsorUpdated); - PublishSponsorServiceDomainEventsJob::dispatch( - SummitSponsorshipCreatedEventDTO::fromSponsorship($sponsorship)->serialize(), - SponsorDomainEvents::SponsorshipUpdated); + PublishSponsorServiceDomainEventsJob::dispatch( + SummitSponsorshipCreatedEventDTO::fromSponsorship($sponsorship)->serialize(), + SponsorDomainEvents::SponsorshipUpdated); - PublishSponsorServiceDomainEventsJob::dispatch( - SummitSponsorshipAddOnCreatedEventDTO::fromSponsorshipAddOn($res)->serialize(), - SponsorDomainEvents::SponsorshipAddOnUpdated); + PublishSponsorServiceDomainEventsJob::dispatch( + SummitSponsorshipAddOnCreatedEventDTO::fromSponsorshipAddOn($add_on)->serialize(), + SponsorDomainEvents::SponsorshipAddOnUpdated); - return $res; - }); + return $add_on; } /** @@ -189,7 +196,11 @@ public function updateAddOn(Summit $summit, int $sponsor_id, int $sponsorship_id */ public function removeAddOn(Summit $summit, int $sponsor_id, int $sponsorship_id, int $add_on_id): void { - $this->tx_service->transaction(function () use ($summit, $sponsor_id, $sponsorship_id, $add_on_id) { + $summit_sponsor = null; + $sponsorship = null; + $add_on = null; + $this->tx_service->transaction(function () use ($summit, $sponsor_id, $sponsorship_id, $add_on_id, + &$summit_sponsor, &$sponsorship, &$add_on) { $summit_sponsor = $summit->getSummitSponsorById($sponsor_id); if (is_null($summit_sponsor)) @@ -204,18 +215,18 @@ public function removeAddOn(Summit $summit, int $sponsor_id, int $sponsorship_id throw new EntityNotFoundException("AddOn {$add_on_id} not found for sponsorship {$sponsorship_id}."); $sponsorship->removeAddOn($add_on); + }); - PublishSponsorServiceDomainEventsJob::dispatch( - SummitSponsorCreatedEventDTO::fromSummitSponsor($summit_sponsor)->serialize(), - SponsorDomainEvents::SponsorUpdated); + PublishSponsorServiceDomainEventsJob::dispatch( + SummitSponsorCreatedEventDTO::fromSummitSponsor($summit_sponsor)->serialize(), + SponsorDomainEvents::SponsorUpdated); - PublishSponsorServiceDomainEventsJob::dispatch( - SummitSponsorshipCreatedEventDTO::fromSponsorship($sponsorship)->serialize(), - SponsorDomainEvents::SponsorshipUpdated); + PublishSponsorServiceDomainEventsJob::dispatch( + SummitSponsorshipCreatedEventDTO::fromSponsorship($sponsorship)->serialize(), + SponsorDomainEvents::SponsorshipUpdated); - PublishSponsorServiceDomainEventsJob::dispatch( - DeletedEventDTO::fromEntity($add_on)->serialize(), - SponsorDomainEvents::SponsorshipAddOnRemoved); - }); + PublishSponsorServiceDomainEventsJob::dispatch( + DeletedEventDTO::fromEntity($add_on)->serialize(), + SponsorDomainEvents::SponsorshipAddOnRemoved); } }