initial: bootstrap from BukidBountyApp base
This commit is contained in:
62
.claude/plans/fffa63a98d16f82e93074ce23d9adbf0-complete.md
Normal file
62
.claude/plans/fffa63a98d16f82e93074ce23d9adbf0-complete.md
Normal file
@@ -0,0 +1,62 @@
|
||||
---
|
||||
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.
|
||||
Reference in New Issue
Block a user