Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -35,11 +35,21 @@ final class PublishSponsorServiceDomainEventsJob implements ShouldQueue
private $event_type;

public function __construct(array $payload, string $event_type){
$this->payload = $payload;
$this->payload = $payload;
$this->event_type = $event_type;
Log::debug(sprintf("PublishSponsorServiceDomainEventsJob::__construct payload %s event_type %s ", json_encode($payload), $event_type));
}

public function getEventType(): string
{
return $this->event_type;
}

public function getPayload(): array
{
return $this->payload;
}

public function handle(): void
{
try {
Expand Down
106 changes: 96 additions & 10 deletions app/Services/Model/Imp/SummitSponsorService.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@

use App\Events\SponsorServices\SponsorDomainEvents;
use App\Events\SponsorServices\SummitSponsorCreatedEventDTO;
use App\Events\SponsorServices\SummitSponsorshipCreatedEventDTO;
use App\Events\SponsorServices\DeletedEventDTO;
use App\Http\Utils\IFileUploader;
use App\Jobs\SponsorServices\PublishSponsorServiceDomainEventsJob;
Expand Down Expand Up @@ -114,7 +115,7 @@ public function __construct
*/
public function addSponsor(Summit $summit, array $payload): Sponsor
{
$sponsor = $this->tx_service->transaction(function () use ($summit, $payload) {
[$sponsor, $new_sponsorships] = $this->tx_service->transaction(function () use ($summit, $payload) {
$company_id = intval($payload['company_id']);
$featured_event_id = isset($payload['featured_event_id']) ? intval($payload['featured_event_id']) : 0;

Expand All @@ -140,6 +141,7 @@ public function addSponsor(Summit $summit, array $payload): Sponsor
}

$sponsor = SponsorFactory::build($payload);
$new_sponsorships = [];

if(isset($payload['sponsorship_id'])) {
$type_id = intval($payload['sponsorship_id']);
Expand All @@ -150,6 +152,7 @@ public function addSponsor(Summit $summit, array $payload): Sponsor
$sponsorship = new SummitSponsorship();
$sponsorship->setType($summit_sponsorship_type);
$sponsor->addSponsorship($sponsorship);
$new_sponsorships[] = $sponsorship;
} else if(isset($payload['sponsorships'])) {
foreach ($payload['sponsorships'] as $sponsorship_payload) {
$type_id = isset($sponsorship_payload['type_id']) ?
Expand All @@ -162,17 +165,38 @@ public function addSponsor(Summit $summit, array $payload): Sponsor
$sponsorship = new SummitSponsorship();
$sponsorship->setType($summit_sponsorship_type);
$sponsor->addSponsorship($sponsorship);
$new_sponsorships[] = $sponsorship;
}
}

$summit->addSummitSponsor($sponsor);

return $sponsor;
return [$sponsor, $new_sponsorships];
});

PublishSponsorServiceDomainEventsJob::dispatch(
SummitSponsorCreatedEventDTO::fromSummitSponsor($sponsor)->serialize(),
SponsorDomainEvents::SponsorCreated);
try {
PublishSponsorServiceDomainEventsJob::dispatch(
SummitSponsorCreatedEventDTO::fromSummitSponsor($sponsor)->serialize(),
SponsorDomainEvents::SponsorCreated);
} catch (\Exception $e) {
Log::error(sprintf("SummitSponsorService::addSponsor failed to dispatch SponsorCreated for sponsor %s: %s", $sponsor->getId(), $e->getMessage()));
}

foreach ($new_sponsorships as $sponsorship) {
Log::debug(sprintf(
"SummitSponsorService::addSponsor dispatching SponsorshipCreated for sponsorship %s type %s sponsor %s",
$sponsorship->getId(),
$sponsorship->getType()->getId(),
$sponsor->getId()
));
try {
PublishSponsorServiceDomainEventsJob::dispatch(
SummitSponsorshipCreatedEventDTO::fromSponsorship($sponsorship)->serialize(),
SponsorDomainEvents::SponsorshipCreated);
} catch (\Exception $e) {
Log::error(sprintf("SummitSponsorService::addSponsor failed to dispatch SponsorshipCreated for sponsorship %s: %s", $sponsorship->getId(), $e->getMessage()));
}
}

return $sponsor;
}
Expand All @@ -187,7 +211,7 @@ public function addSponsor(Summit $summit, array $payload): Sponsor
*/
public function updateSponsor(Summit $summit, int $sponsor_id, array $payload): Sponsor
{
return $this->tx_service->transaction(function () use ($summit, $sponsor_id, $payload) {
[$sponsor, $added_sponsorships, $removed_sponsorship_ids, $updated_sponsorships] = $this->tx_service->transaction(function () use ($summit, $sponsor_id, $payload) {
Log::debug
(
sprintf
Expand Down Expand Up @@ -233,6 +257,10 @@ public function updateSponsor(Summit $summit, int $sponsor_id, array $payload):
}
}

$added_sponsorships = [];
$removed_sponsorship_ids = [];
$updated_sponsorships = [];

if(isset($payload['sponsorship_id'])) {
$type_id = intval($payload['sponsorship_id']);

Expand All @@ -253,7 +281,9 @@ public function updateSponsor(Summit $summit, int $sponsor_id, array $payload):
)
);
// update the first
$summit_sponsor->getSponsorships()->first()->setType($summit_sponsorship_type);
$sponsorship = $summit_sponsor->getSponsorships()->first();
$sponsorship->setType($summit_sponsorship_type);
$updated_sponsorships[] = $sponsorship;
}
else {
Log::debug
Expand All @@ -270,6 +300,7 @@ public function updateSponsor(Summit $summit, int $sponsor_id, array $payload):
$sponsorship = new SummitSponsorship();
$sponsorship->setType($summit_sponsorship_type);
$summit_sponsor->addSponsorship($sponsorship);
$added_sponsorships[] = $sponsorship;
Comment thread
romanetar marked this conversation as resolved.
}

} else if(isset($payload['sponsorships'])) {
Expand Down Expand Up @@ -307,6 +338,7 @@ function (array $acc, SummitSponsorship $sp): array {
// Remove types not in the new list
foreach ($current_sponsorships as $type_id => $sponsorship) {
if (!$new_sponsorship_types->contains($sponsorship->getType())) {
$removed_sponsorship_ids[] = $sponsorship->getId(); // capture id before Doctrine clears it on DELETE
$summit_sponsor->removeSponsorship($sponsorship);
}
}
Expand All @@ -317,6 +349,7 @@ function (array $acc, SummitSponsorship $sp): array {
$sponsorship = new SummitSponsorship();
$sponsorship->setType($type);
$summit_sponsor->addSponsorship($sponsorship);
$added_sponsorships[] = $sponsorship;
}
}

Expand All @@ -332,12 +365,65 @@ function (array $acc, SummitSponsorship $sp): array {
$summit->recalculateSummitSponsorOrder($sponsor, $payload['order']);
}

return [$sponsor, $added_sponsorships, $removed_sponsorship_ids, $updated_sponsorships];
});

try {
PublishSponsorServiceDomainEventsJob::dispatch(
SummitSponsorCreatedEventDTO::fromSummitSponsor($sponsor)->serialize(),
SummitSponsorCreatedEventDTO::fromSummitSponsor($sponsor)->serialize(),
SponsorDomainEvents::SponsorUpdated);
} catch (\Exception $e) {
Log::error(sprintf("SummitSponsorService::updateSponsor failed to dispatch SponsorUpdated for sponsor %s: %s", $sponsor_id, $e->getMessage()));
}

foreach ($removed_sponsorship_ids as $sponsorship_id) {
Log::debug(sprintf(
"SummitSponsorService::updateSponsor dispatching SponsorshipRemoved for sponsorship %s sponsor %s",
$sponsorship_id,
$sponsor_id
));
try {
PublishSponsorServiceDomainEventsJob::dispatch(
['id' => $sponsorship_id],
SponsorDomainEvents::SponsorshipRemoved);
} catch (\Exception $e) {
Log::error(sprintf("SummitSponsorService::updateSponsor failed to dispatch SponsorshipRemoved for sponsorship %s: %s", $sponsorship_id, $e->getMessage()));
}
}

foreach ($added_sponsorships as $sponsorship) {
Log::debug(sprintf(
"SummitSponsorService::updateSponsor dispatching SponsorshipCreated for sponsorship %s type %s sponsor %s",
$sponsorship->getId(),
$sponsorship->getType()->getId(),
$sponsor_id
));
try {
PublishSponsorServiceDomainEventsJob::dispatch(
SummitSponsorshipCreatedEventDTO::fromSponsorship($sponsorship)->serialize(),
SponsorDomainEvents::SponsorshipCreated);
} catch (\Exception $e) {
Log::error(sprintf("SummitSponsorService::updateSponsor failed to dispatch SponsorshipCreated for sponsorship %s: %s", $sponsorship->getId(), $e->getMessage()));
}
}

foreach ($updated_sponsorships as $sponsorship) {
Log::debug(sprintf(
"SummitSponsorService::updateSponsor dispatching SponsorshipUpdated for sponsorship %s type %s sponsor %s",
$sponsorship->getId(),
$sponsorship->getType()->getId(),
$sponsor_id
));
try {
PublishSponsorServiceDomainEventsJob::dispatch(
SummitSponsorshipCreatedEventDTO::fromSponsorship($sponsorship)->serialize(),
SponsorDomainEvents::SponsorshipUpdated);
} catch (\Exception $e) {
Log::error(sprintf("SummitSponsorService::updateSponsor failed to dispatch SponsorshipUpdated for sponsorship %s: %s", $sponsorship->getId(), $e->getMessage()));
}
}

return $sponsor;
});
return $sponsor;
}

/**
Expand Down
Loading
Loading