Is there an existing issue for this?
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
- Log in as a patient who has an assigned therapist
- Navigate to Appointments → Schedule an Appointment
- Select a service type, a date, and a specific time slot e.g. 10:00 AM
- Tap Schedule It
- 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:
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:
timestamp: DateTime.parse(date), // slot string never parsed or merged
📷 Screenshot
Not applicable. The corruption is in data written to Supabase.
💡 Suggested Improvements
- 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 ''.
- In
patient_schedule_appointment_model.dart, update toEntity() to accept
and use the time-resolved DateTime rather than parsing the date-only string.
- In
patient_schedule_appointment_entity.dart, ensure the full timestamp flows
through to toConsultationRequestEntity() unchanged.
- Add an
_isSubmitting guard on the Schedule It button to prevent duplicate
inserts on double tap.
Record
Is there an existing issue for this?
What happened?
📌 Issue Overview
The appointment booking flow silently discards the time slot the patient selects. Every appointment is written to the Supabase
sessiontable with a timestamp of midnight (T00:00:00) on the selected date, regardless of which slot was chosen.The
slotfield is captured inPatientScheduleAppointmentModelbuttoEntity()builds the timestamp using onlyDateTime.parse(date)- the date-only ISO string from_selectedDate!.toIso8601String(). The slot string is never parsed or merged into the timestamp.PatientScheduleAppointmentEntityhas no slot field at all.Additionally,
therapistIdis hardcoded to''increateAppointment()at line 180 ofappointments_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
sessiontable in Supabase🎯 Expected Behavior
The inserted row should have
timestamp = 2025-04-15T10:00:00.000reflecting theselected slot. The slot should then appear as unavailable for the same date.
🚨 Actual Behavior
The inserted row has
timestamp = 2025-04-15T00:00:00.000regardless of theselected slot.
therapist_idis empty string. The same slot remains bookableindefinitely since the availability check never matches a midnight timestamp.
Root cause in
appointments_provider.dartline 180-183:Root cause in
patient_schedule_appointment_model.dartline 34:📷 Screenshot
Not applicable. The corruption is in data written to Supabase.
💡 Suggested Improvements
appointments_provider.dart, parse_selectedTimeSlot(e.g. "10:00 AM")into hour and minute, then combine with
_selectedDateto produce a full DateTimebefore passing to the model. Also pass the resolved
therapistIdfrom theavailability fetch instead of hardcoding
''.patient_schedule_appointment_model.dart, updatetoEntity()to acceptand use the time-resolved DateTime rather than parsing the date-only string.
patient_schedule_appointment_entity.dart, ensure the full timestamp flowsthrough to
toConsultationRequestEntity()unchanged._isSubmittingguard on the Schedule It button to prevent duplicateinserts on double tap.
Record