diff --git a/app/Events/SponsorServices/SummitMediaFileTypeCreatedEventDTO.php b/app/Events/SponsorServices/SummitMediaFileTypeCreatedEventDTO.php new file mode 100644 index 000000000..e91166e6c --- /dev/null +++ b/app/Events/SponsorServices/SummitMediaFileTypeCreatedEventDTO.php @@ -0,0 +1,61 @@ +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 + { + $res = [ + 'id' => $this->id, + 'name' => $this->name, + ]; + + 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/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,14 +62,21 @@ 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; } /** * @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(); @@ -76,17 +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); }); + + PublishSponsorServiceDomainEventsJob::dispatch( + SummitMediaFileTypeCreatedEventDTO::fromSummitMediaFileType($media_file_type)->serialize(), + SummitMediaFileTypeDomainEvents::SummitMediaFileTypeUpdated); + + 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(); @@ -94,6 +112,12 @@ public function delete(int $id): void throw new ValidationException("You can not delete a system defined type."); $this->repository->delete($type); + + return $type; }); + + PublishSponsorServiceDomainEventsJob::dispatch( + DeletedEventDTO::fromEntity($type)->serialize(), + SummitMediaFileTypeDomainEvents::SummitMediaFileTypeDeleted); } -} \ No newline at end of file +} 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); } } 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',