where('token_hash', hash('sha256', $token)) ->where('purpose', 'press_release_access') ->first(); if (! $magicLink) { return $this->renderError(__('Der Vorschau-Link ist ungültig.'), 404); } if ($magicLink->expires_at && $magicLink->expires_at->isPast()) { return $this->renderError(__('Der Vorschau-Link ist abgelaufen.'), 410); } $pressReleaseId = (int) ($magicLink->payload['press_release_id'] ?? 0); $pressRelease = $pressReleaseId ? PressRelease::withoutGlobalScopes() ->with(['company:id,name,slug', 'category.translations', 'images', 'user:id,name']) ->find($pressReleaseId) : null; if (! $pressRelease) { return $this->renderError(__('Die Pressemitteilung wurde nicht gefunden.'), 404); } return view('press-release-preview', [ 'pressRelease' => $pressRelease, 'expiresAt' => $magicLink->expires_at, ]); } private function renderError(string $message, int $status): Response { return response()->view('press-release-preview-error', [ 'message' => $message, ], $status); } }