AOSSIE-Org / AOSSIE-Org/NeuroTrack
BUG: Appointment booking ignores selected time slot, every appointment saved at midnight to Supabase
- Dominant language
- Dart
- Stars
- 29
- Forks
- 50
- PR merge metrics
- No merged PRs in 30d
Description
### Is there an existing issue for this?
- [x] I have searched the existing issues
### What happened?
## 📌 Issue Overview
The appointment booking flow silently discards the time slot the patient selects. Every appointment is written to the Supabase `session` table with a timestamp of midnight (T00:00:00) on the selected date, regardless of which slot was chosen.
The `slot` field is captured in `PatientScheduleAppointmentModel` but `toEntity()` builds the timestamp using only `DateTime.parse(date)` - the date-only ISO string from `_selectedDate!.toIso8601String()`. The slot string is never parsed or merged into the timestamp. `PatientScheduleAppointmentEntity` has no slot field at all.
Additionally, `therapistId` is hardcoded to `''` in `createAppointment()` at line 180 of `appointments_provider.dart`, meaning every booking is inserted with an empty therapist ID.
As a result, the slot availability check which compares booked appointment hours against available slots never matches the midnight row, so the same slot can be booked unlimited times.
## 🔍 Steps to Reproduce
1. Log in as a patient who has an assigned therapist
2. Navigate to **Appointments → Schedule an Appointment**
3. Select a service type, a date, and a specific time slot e.g. **10:00 AM**
4. Tap **Schedule It**
5. Check the `session` table in Supabase
## 🎯 Expected Behavior
The inserted row should have `timestamp = 2025-04-15T10:00:00.000` reflecting the
selected slot. The slot should then appear as unavailable for the same date.
## 🚨 Actual Behavior
The inserted row has `timestamp = 2025-04-15T00:00:00.000` regardless of the
selected slot. `therapist_id` is empty string. The same slot remains bookable
indefinitely since the availability check never matches a midnight timestamp.
Root cause in `appointments_provider.dart` line 180-183:
```dart
therapistId: '', // hardcoded empty string
date: _selectedDate!.toIso8601String(), // midnight date only
slot: _selectedTimeSlot, // captured but never used downstream
```
Root cause in `patient_schedule_appointment_model.dart` line 34:
```dart
timestamp: DateTime.parse(date), // slot string never parsed or merged
```
## 📷 Screenshot
Not applicable. The corruption is in data written to Supabase.
## 💡 Suggested Improvements
1. In `appointments_provider.dart`, parse `_selectedTimeSlot` (e.g. "10:00 AM")
into hour and minute, then combine with `_selectedDate` to produce a full DateTime
before passing to the model. Also pass the resolved `therapistId` from the
availability fetch instead of hardcoding `''`.
2. In `patient_schedule_appointment_model.dart`, update `toEntity()` to accept
and use the time-resolved DateTime rather than parsing the date-only string.
3. In `patient_schedule_appointment_entity.dart`, ensure the full timestamp flows
through to `toConsultationRequestEntity()` unchanged.
4. Add an `_isSubmitting` guard on the Schedule It button to prevent duplicate
inserts on double tap.
### Record
- [x] I agree to follow this project's Code of Conduct
- [x] I want to work on this issue
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.