libra/docs/stories/story-7.5-new-booking-inter...

194 lines
6.9 KiB
Markdown

# Story 7.5: New Booking Interface
**Status:** Ready for Review
## Epic Reference
**Epic 7:** Client Dashboard
## User Story
As a **client**,
I want **to submit new consultation booking requests**,
So that **I can schedule meetings with the lawyer**.
## Acceptance Criteria
### Access
- [x] Quick access from dashboard
- [x] Book Now button in navigation
### Calendar View
- [x] Calendar showing available dates
- [x] Available time slots for selected date
### Booking Form
- [x] Selected date/time (display)
- [x] Problem summary (required, textarea)
- [x] Submit button
### Validation
- [x] Enforce 1 booking per day limit
- [x] Show warning if already booked that day
- [x] Prevent booking on unavailable slots
### Submission Flow
- [x] Confirmation before submission
- [x] Success message with "Pending Review" status
- [x] Redirect to consultations list
## Technical Notes
Reuse availability calendar from Story 3.3 and booking submission from Story 3.4.
```php
new class extends Component {
public ?string $selectedDate = null;
public ?string $selectedTime = null;
public string $problemSummary = '';
public function submit(): void
{
// Validation and submission logic from Story 3.4
}
public function canBookDate(string $date): bool
{
return !auth()->user()->consultations()
->whereDate('scheduled_date', $date)
->whereIn('status', ['pending', 'approved'])
->exists();
}
};
```
## Definition of Done
- [x] Calendar displays correctly
- [x] Time slots selectable
- [x] 1-per-day limit enforced
- [x] Problem summary required
- [x] Confirmation shown
- [x] Booking submitted successfully
- [x] Tests pass
## Estimation
**Complexity:** Medium | **Effort:** 3-4 hours
---
## Dev Agent Record
### Agent Model Used
Claude Opus 4.5
### File List
| File | Action |
|------|--------|
| `resources/views/components/layouts/app/sidebar.blade.php` | Modified - Added "Book Now" navigation item for clients |
| `lang/en/navigation.php` | Modified - Added `book_now` translation key |
| `lang/ar/navigation.php` | Modified - Added `book_now` translation key |
| `tests/Feature/Client/BookingSubmissionTest.php` | Modified - Added navigation visibility tests |
### Change Log
- Added "Book Now" (`plus-circle` icon) navigation item to client sidebar
- Added bilingual translation keys for "Book Now" / "احجز الآن"
- Added 3 new tests for navigation visibility (client sees, admin doesn't see, link works)
- Fixed `current` route check for My Consultations nav item (changed from wildcard to specific route)
### Completion Notes
- Most functionality already existed from Stories 3.3 (availability calendar) and 3.4 (booking submission)
- The booking page (`client/consultations/book.blade.php`) was fully implemented with:
- Calendar with available dates (via `livewire:availability-calendar`)
- Time slot selection
- Problem summary form with validation (min 20, max 2000 chars)
- 1-per-day limit enforcement
- Confirmation step before submission
- Success message and redirect to consultations list
- Dashboard already had quick access via "Book Consultation" button
- Only missing piece was "Book Now" in the sidebar navigation
- All 124 client tests pass
## QA Results
### Review Date: 2025-12-28
### Reviewed By: Quinn (Test Architect)
### Code Quality Assessment
**Overall: Excellent** - The implementation is clean, focused, and follows established patterns. The story correctly identified that most functionality already existed from Stories 3.3 and 3.4. The only new work was adding the "Book Now" navigation item and corresponding translations. The implementation is minimal yet complete.
**Highlights:**
- Proper reuse of existing booking page component (no code duplication)
- Correct use of Flux UI components for navigation
- Bilingual translations properly added
- Smart fix for `current` route check (changed from wildcard to specific route to avoid Book Now appearing active on My Consultations)
### Refactoring Performed
None required - the implementation is well-structured and minimal.
### Compliance Check
- Coding Standards: ✓ Follows Blade/PHP formatting conventions
- Project Structure: ✓ Translations in correct files, sidebar follows established patterns
- Testing Strategy: ✓ 21 tests (3 new navigation tests + 18 existing booking tests), all pass
- All ACs Met: ✓ See traceability below
### Requirements Traceability
| AC | Description | Test Coverage |
|----|-------------|---------------|
| **Access** |
| Quick access from dashboard | ✓ Dashboard has "Book Consultation" button (`dashboard.blade.php:97-102`, `dashboard.blade.php:230-238`) |
| Book Now button in navigation | ✓ `client sees book now link in navigation` test |
| **Calendar View** |
| Calendar showing available dates | ✓ Existing `availability-calendar` component (Story 3.3) |
| Available time slots for selected date | ✓ Existing component + `client cannot book unavailable slot` test |
| **Booking Form** |
| Selected date/time display | ✓ `book.blade.php:159-169` - displays selected time with change button |
| Problem summary (required, textarea) | ✓ `problem summary is required`, `min 20 chars`, `max 2000 chars` tests |
| Submit button | ✓ `book.blade.php:225-232` |
| **Validation** |
| 1 booking per day limit | ✓ `client cannot book more than once per day` test |
| Warning if already booked | ✓ Error displayed via `@error('selectedDate')` |
| Prevent booking unavailable slots | ✓ `client cannot book unavailable slot` test |
| **Submission Flow** |
| Confirmation before submission | ✓ `confirmation step displays before final submission` test |
| Success message with Pending status | ✓ `success message shown after submission`, `booking is created with pending status` tests |
| Redirect to consultations list | ✓ `authenticated client can submit booking request` asserts redirect |
### Improvements Checklist
- [x] Navigation "Book Now" item added with plus-circle icon
- [x] Route check fixed to use specific route (`client.consultations.index`) instead of wildcard
- [x] Bilingual translations added (EN: "Book Now", AR: "احجز الآن")
- [x] 3 new navigation tests added covering visibility and functionality
No remaining items for dev to address.
### Security Review
No security concerns. The booking submission:
- Uses DB transactions with `lockForUpdate()` to prevent race conditions
- Validates user authentication via middleware
- Properly sanitizes problem summary via validation rules
- Audit logging in place via AdminLog
### Performance Considerations
No performance concerns. The implementation:
- Uses existing calendar component (no additional queries)
- Navigation uses efficient route checking
- No N+1 query issues in the new code
### Files Modified During Review
None - no changes required.
### Gate Status
Gate: **PASS** → docs/qa/gates/7.5-new-booking-interface.yml
### Recommended Status
**Ready for Done** - All acceptance criteria met, tests passing, clean implementation