displays->findByToken($token) ?? abort(404); $screen->loadMissing(['organization', 'branch']); $this->displays->touch($screen); return view('qms.display.public', [ 'screen' => $screen, 'dataUrl' => route('qms.display.data', $token), 'playedUrl' => route('qms.display.announcement.played', ['token' => $token, 'announcement' => '__ID__']), 'pollMs' => config('qms.display_poll_ms', 1200), ]); } public function data(string $token): JsonResponse { $screen = $this->displays->findByToken($token) ?? abort(404); $this->displays->touch($screen); return response()->json($this->displays->payload($screen)); } public function played(string $token, VoiceAnnouncement $announcement): JsonResponse { $screen = $this->displays->findByToken($token) ?? abort(404); abort_unless($announcement->branch_id === $screen->branch_id, 404); $this->voice->markPlayed($announcement); return response()->json(['ok' => true]); } }