AOSSIE-Org / AOSSIE-Org/NeuroTrack

BUG: Appointment booking ignores selected time slot, every appointment saved at midnight to Supabase

Đang mở
#219 0 bình luận 0 reaction 0 người được giao Xem trên GitHub
Ngôn ngữ chính
Dart
Star
29
Fork
50
Chỉ số merge pull request
Không có pull request nào được merge trong 30 ngày

Mô tả

### 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

Hướng dẫn đóng góp

Chưa lập chỉ mục được hướng dẫn đóng góp cho kho mã nguồn này

Đánh giá

Issue này chưa được đánh giá.

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.