Backend:
- New GET /api/v1/me/household endpoint. Returns the resident's
household (with members + barangay + assigned DOP) or { household:
null }. Used by the wizard to gate-keep the onboarding flow.
Frontend (customer-web/):
- /onboarding — 5-step wizard (Address+map, Size, Proof, Members,
Review). Submits POST /households then uploads proof + adds
members in sequence. Server-side guard redirects to /household
when one already exists.
- /household — full status view:
- Pending: live polling every 30s, "Refresh" button, status pill
- Approved: success state, link back to dashboard
- Rejected: shows reviewer's reason, ResubmitCard re-uploads
proof and flips status back to pending automatically
- Members card with add/remove (head is protected)
- /home now checks household state server-side:
- No household → redirect /onboarding
- Pending/rejected → status banner + link
- Approved → full dashboard with QR balance + next pickup +
quick-action grid
- New components:
- MapPicker — click-to-place pin via Leaflet (CDN-loaded), drag
to fine-tune, returns {lat, lng}
- ProofUpload — drag-and-drop with image preview, jpg/png/pdf,
8MB cap, file size + type validation
- API client adds me.household() and reuses existing household.*
+ uploadProof multipart helpers
Build: 12 routes compile clean, biggest first-load JS 122 kB
(/register), Wizard + Household views 5–7 kB each.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
40 lines
1.1 KiB
PHP
40 lines
1.1 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Api\V1\Me;
|
|
|
|
use App\Http\Controllers\Api\V1\ApiController;
|
|
use App\Http\Resources\HouseholdResource;
|
|
use App\Models\Household;
|
|
use Illuminate\Http\JsonResponse;
|
|
use Illuminate\Http\Request;
|
|
|
|
class MyHouseholdController extends ApiController
|
|
{
|
|
/**
|
|
* Resident fetches their own household without knowing the uuid.
|
|
* Returns `null` cleanly when none exists yet (used by the onboarding
|
|
* wizard to decide whether to start a new flow or show edit/status).
|
|
*/
|
|
public function show(Request $request): JsonResponse
|
|
{
|
|
$household = Household::with([
|
|
'head', 'barangay.cityMunicipality.province.region',
|
|
'members.user',
|
|
'assignedDropOffPoint',
|
|
])
|
|
->withCount('members')
|
|
->where('head_user_id', $request->user()->id)
|
|
->first();
|
|
|
|
if (! $household) {
|
|
return $this->ok([
|
|
'household' => null,
|
|
]);
|
|
}
|
|
|
|
return $this->ok([
|
|
'household' => new HouseholdResource($household),
|
|
]);
|
|
}
|
|
}
|