Add virtual event sessions with Meet sync and platform-billed messaging.
Deploy Ladill Events / deploy (push) Successful in 41s

Events can define hybrid/virtual sessions synced to Meet rooms; SMS and email use wallet-billed platform APIs instead of Termii and Laravel mail.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
isaacclad
2026-07-01 22:08:09 +00:00
co-authored by Cursor
parent 5a8a462102
commit 06fedcfc55
18 changed files with 735 additions and 30 deletions
@@ -252,6 +252,11 @@ class EventRegistrationService
return;
}
$ownerPublicId = (string) $registration->qrCode?->user?->public_id;
if ($ownerPublicId === '') {
return;
}
$content = $registration->qrCode?->content() ?? [];
$eventName = $content['name'] ?? $registration->qrCode?->label ?? config('app.name');
$firstName = explode(' ', $registration->attendee_name)[0];
@@ -276,7 +281,38 @@ class EventRegistrationService
);
}
$this->sms->send($registration->attendee_phone, $message);
$joinUrl = $this->nextVirtualJoinUrl($content);
if ($joinUrl !== '') {
$message .= ' Join: '.$joinUrl;
}
$this->sms->send(
$ownerPublicId,
$registration->attendee_phone,
$message,
);
}
/** @param array<string, mixed> $content */
private function nextVirtualJoinUrl(array $content): string
{
$format = (string) ($content['format'] ?? 'in_person');
if (! in_array($format, ['virtual', 'hybrid'], true)) {
return '';
}
foreach ((array) ($content['virtual_sessions'] ?? []) as $session) {
if (! is_array($session)) {
continue;
}
$joinUrl = trim((string) ($session['join_url'] ?? ''));
if ($joinUrl !== '') {
return $joinUrl;
}
}
return '';
}
private function uniqueBadgeCode(): string