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

6.9 KiB

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

  • Quick access from dashboard
  • Book Now button in navigation

Calendar View

  • Calendar showing available dates
  • Available time slots for selected date

Booking Form

  • Selected date/time (display)
  • Problem summary (required, textarea)
  • Submit button

Validation

  • Enforce 1 booking per day limit
  • Show warning if already booked that day
  • Prevent booking on unavailable slots

Submission Flow

  • Confirmation before submission
  • Success message with "Pending Review" status
  • Redirect to consultations list

Technical Notes

Reuse availability calendar from Story 3.3 and booking submission from Story 3.4.

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

  • Calendar displays correctly
  • Time slots selectable
  • 1-per-day limit enforced
  • Problem summary required
  • Confirmation shown
  • Booking submitted successfully
  • 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

  • Navigation "Book Now" item added with plus-circle icon
  • Route check fixed to use specific route (client.consultations.index) instead of wildcard
  • Bilingual translations added (EN: "Book Now", AR: "احجز الآن")
  • 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

Ready for Done - All acceptance criteria met, tests passing, clean implementation