validate([ 'owner_ref' => ['required', 'string', 'max:64'], ]); $owner = User::query()->where('public_id', $validated['owner_ref'])->firstOrFail(); return response()->json([ 'events' => $this->links->linkableEvents($owner), ]); } public function linkRoom(Request $request, QrCode $event): JsonResponse { $validated = $request->validate([ 'owner_ref' => ['required', 'string', 'max:64'], 'meet_room_uuid' => ['required', 'string', 'max:64'], 'meet_room_type' => ['required', 'string', 'in:town_hall,webinar'], 'join_url' => ['nullable', 'string', 'max:2048'], 'title' => ['nullable', 'string', 'max:255'], 'scheduled_at' => ['nullable', 'date'], 'duration_minutes' => ['nullable', 'integer', 'min:15', 'max:480'], 'virtual_session_id' => ['nullable', 'string', 'max:64'], ]); $owner = User::query()->where('public_id', $validated['owner_ref'])->firstOrFail(); abort_unless($event->type === QrCode::TYPE_EVENT, 404); $result = $this->links->linkRoom($owner, $event, $validated); return response()->json(['event' => $result]); } public function verifyRegistration(Request $request, QrCode $event): JsonResponse { $validated = $request->validate([ 'owner_ref' => ['required', 'string', 'max:64'], 'badge_code' => ['required', 'string', 'max:16'], ]); $owner = User::query()->where('public_id', $validated['owner_ref'])->firstOrFail(); abort_unless($event->user_id === $owner->id, 403); abort_unless($event->type === QrCode::TYPE_EVENT, 404); $result = app(EventRegistrationVerifyService::class)->verifyBadge($event, $validated['badge_code']); if (! $result) { return response()->json(['message' => 'Badge not found.'], 404); } return response()->json(['registration' => $result]); } public function verifySpeaker(Request $request, QrCode $event): JsonResponse { $validated = $request->validate([ 'owner_ref' => ['required', 'string', 'max:64'], 'speaker_token' => ['required', 'string', 'max:128'], ]); $owner = User::query()->where('public_id', $validated['owner_ref'])->firstOrFail(); abort_unless($event->user_id === $owner->id, 403); abort_unless($event->type === QrCode::TYPE_EVENT, 404); $result = app(\App\Services\Events\EventSpeakerInviteService::class) ->verifyToken($event, $validated['speaker_token']); if (! $result) { return response()->json(['message' => 'Speaker invite not found.'], 404); } return response()->json(['speaker' => $result]); } }