Skip to content

C.8: My Bookings

Summary

My Bookings shows the client's booked sessions, including pending, confirmed, reschedule-pending, and cancelled bookings. Clients can join upcoming confirmed meetings, request a reschedule when allowed, cancel pending or confirmed bookings with an optional reason, or retry when the booking list fails to load.

Role

  • Primary: Client
  • Secondary: Counselor, System

Entry Point

  • URL: /my-bookings
  • Navigation: Sidebar -> My Bookings

Preconditions

  • Authenticated: yes
  • Required role: client
  • Client has zero or more booking records

Steps

  1. Client opens /my-bookings.
  2. System queries the client's bookings with the default booking list limit.
  3. Page displays loading, error, empty, or booking list state.
  4. Each booking row shows session type, booking status, counselor name, and scheduled time range.
  5. For upcoming confirmed bookings with a meeting ID, client can click Join Meeting to open /meeting/:meetingId.
  6. For pending or confirmed bookings with a booking page slug, client can open the reschedule dialog.
  7. Client picks a new date, waits for available slots, selects a slot, and confirms the reschedule request.
  8. For pending or confirmed bookings, client can open the cancel dialog.
  9. Client optionally enters a cancellation reason and confirms cancellation.
  10. System invalidates the My Bookings query after cancel or reschedule mutations.

Diagram

Edge Cases

  • No bookings: Page shows an empty state explaining there are no bookings.
  • Load failure: Page shows an inline error state with a retry button.
  • Reschedule already requested: Booking shows a reschedule-pending badge and disables another reschedule request.
  • No available slots: Reschedule dialog shows a no-times message for the selected date.
  • Past slots: Past time slots are disabled.
  • Missing booking page slug: Reschedule action is hidden because available slots cannot be fetched.
  • Join action: Join Meeting is shown only for confirmed future bookings that have a meeting_id.

Screenshot Status

  • Captured: my-bookings.png
  • Captured: empty.png
  • Captured: error.png
  • Captured: cancel-dialog.png