63 lines
3.0 KiB
Markdown
63 lines
3.0 KiB
Markdown
---
|
|
task: Fix GET /api/public/landing-page returning HTTP 500 — wrong response helper + pending migration
|
|
cycles: 3
|
|
context: true
|
|
private: false
|
|
started: 2026-05-16T15:59:26Z
|
|
finished: 2026-05-16T16:00:00Z
|
|
---
|
|
|
|
## files
|
|
- app/Http/Controllers/Admin/LandingPageController.php [lines 241-262] — uses `response()->json()` instead of `Response::json()` facade; also the only public (no-auth) method in the controller
|
|
- database/migrations/2026_04_11_000001_create_landing_pages_table.php — migration may not have been run on production; if `landing_pages` table is absent the query throws and returns 500
|
|
- routes/web.php [line 689] — `Route::get('/api/public/landing-page', ...)` — no middleware, correctly public
|
|
|
|
## steps
|
|
1. In `LandingPageController::getActiveLandingPage()` replace both `response()->json([...])` calls with `Response::json([...])` using the Hypervel facade (`use Hypervel\Support\Facades\Response;` is already imported at the top of the file — add it if missing).
|
|
2. Add a `try/catch` around `LandingPage::getActive()` so a missing table or DB error returns a graceful `{"success":false,"message":"..."}` 500 instead of the bare Server Error page, until the migration is confirmed run.
|
|
3. Confirm (or trigger via Ultimate Console → Migrate button, or `php artisan migrate --force` in the container) that the `landing_pages` migration has been applied on production.
|
|
|
|
## context
|
|
```php
|
|
// BROKEN — uses Laravel global helper response() which may not exist / behave differently in Hypervel:
|
|
public function getActiveLandingPage()
|
|
{
|
|
$page = LandingPage::getActive();
|
|
if (!$page) {
|
|
return response()->json([...]); // <-- wrong helper
|
|
}
|
|
return response()->json([...]); // <-- wrong helper
|
|
}
|
|
|
|
// FIX — use Hypervel facade:
|
|
use Hypervel\Support\Facades\Response;
|
|
|
|
public function getActiveLandingPage()
|
|
{
|
|
try {
|
|
$page = LandingPage::getActive();
|
|
} catch (\Throwable $e) {
|
|
return Response::json(['success' => false, 'data' => null, 'has_landing_page' => false]);
|
|
}
|
|
|
|
if (!$page) {
|
|
return Response::json(['success' => true, 'data' => null, 'has_landing_page' => false]);
|
|
}
|
|
|
|
return Response::json([
|
|
'success' => true,
|
|
'data' => ['title' => $page->title, 'html_content' => $page->html_content, 'description' => $page->description],
|
|
'has_landing_page' => true,
|
|
]);
|
|
}
|
|
```
|
|
|
|
Impact: `HomePublic.vue` fetches this endpoint on load to show the landing page to guest users. A 500 response causes the guest homepage to render empty/blank. Also breaks the cooperative public registration flow that depends on the public API layer being healthy.
|
|
|
|
Route: `GET /api/public/landing-page` — no middleware, no auth required.
|
|
|
|
## notes
|
|
- dictionary: ai-docs/dictionary.md
|
|
- linters: none
|
|
- constraints: Use `Response::json()` facade (not `response()->json()`). Use Hypervel migration imports (`Hyperf\Database\Schema\Blueprint`, `Hypervel\Database\Migrations\Migration`, `Hypervel\Support\Facades\Schema`) if adding a new migration.
|