fix(admin): pagination, patch tests, and per-page limits

Backend:
- Fix GetAllAdminBookingsHandler and SearchAdminBookingsHandler to
  return totalPages in response
- Auto-record patch tests when booking status progresses to "completed"
- Add GET/POST /api/admin/users/{id}/patch-tests endpoints
  Frontend:
- BookingsCard: proper pagination with 4 per page, prev/next buttons
- UsersCard, BookingCreateModal, WalkInCreateModal: per_page=4 for user
  search
- Add PatchTestModal for manual patch test entry in UserModal
- Hide patch test section when user has no eligible services
  Database:
- Add UNIQUE constraint on user_service_patch_tests(user_id, service_id)
This commit is contained in:
2026-02-20 22:17:37 +00:00
parent 5a4cd29b44
commit 7b0259c0db
11 changed files with 454 additions and 76 deletions
+9 -5
View File
@@ -102,7 +102,7 @@
#### Admin Dashboard (`/admin`)
- [x] Auth guard with role check
- [x] ImageUpload component
- [x] UsersCard + UserModal
- [x] UsersCard + UserModal + PatchTestModal
- [x] BookingsCard + BookingModal
- [x] HolidayHours (exceptional hours management)
- [x] WeeklySchedule (default hours management)
@@ -120,6 +120,7 @@
- [x] Customer details form (guest or authenticated)
- [x] Auth store with token refresh logic
- [x] **Admin booking flows** - Call-in and walk-in use `/api/services/eligible-for/{user_id}` for user-specific eligibility
- [x] **Manual patch test entry** - Admin can record patch test completion via User Details → Patch Test modal (for 2-minute walk-in patch tests)
- [ ] **Customer booking submit** - `submitBooking()` only logs, needs `POST /api/bookings`
- [ ] Payment integration (Square placeholder)
@@ -253,6 +254,8 @@ flowchart TD
| POST | `/api/admin/bookings/{id}/cancel` | Cancel booking |
| GET | `/api/admin/users` | List users |
| GET | `/api/admin/users/{id}` | Get user details |
| GET | `/api/admin/users/{id}/patch-tests/eligible` | Get services requiring patch test that user hasn't completed |
| POST | `/api/admin/users/{id}/patch-tests` | Record patch test completion for user |
| GET | `/api/admin/today/current-next` | Current and next appointment |
| GET | `/api/admin/today/appointments` | Today's appointments |
| GET | `/api/admin/today/pending-approvals` | Pending approval queue |
@@ -443,10 +446,11 @@ src/lib/components/
│ ├── BookingModal.svelte
│ ├── BookingsCard.svelte
│ ├── CallInBooking.svelte
│ ├── HolidayHours.svelte
│ ├── ImageUpload.svelte
│ ├── ServicesManagement.svelte
│ ├── UserModal.svelte
│ ├── HolidayHours.svelte
│ ├── ImageUpload.svelte
│ ├── PatchTestModal.svelte
│ ├── ServicesManagement.svelte
│ ├── UserModal.svelte
│ ├── UsersCard.svelte
│ ├── WalkInBooking.svelte
│ └── WalkInCreateModal.svelte