medora-provider/lib/data/services/consultation_booking_service.dart
DhanshCOSQ 0f72ecf6ad feature/medora-55 (#10)
Added Splash screen, logo and some minor changes in the code

Co-authored-by: Jipson George <152465898+Jipson-cosq@users.noreply.github.com>
Reviewed-on: cosqnet/telemednet#10
Co-authored-by: DhanshCOSQ <dhanshas@cosq.net>
Co-committed-by: DhanshCOSQ <dhanshas@cosq.net>
2024-11-14 12:53:33 +00:00

90 lines
2.6 KiB
Dart

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:medora/data/models/consultation_booking.dart';
class BookingService {
final FirebaseFirestore _firestore = FirebaseFirestore.instance;
Future<String> createBooking({
required String doctorId,
required String profileImageUrl,
required String doctorName,
required String patientId,
required String patientName,
required String location,
required DateTime appointmentDate,
required String appointmentTime,
required int consultationFee,
required String specialization,
}) async {
try {
final docRef = _firestore.collection('bookings').doc();
final booking = Booking(
id: docRef.id,
doctorId: doctorId,
doctorName: doctorName,
patientId: patientId,
patientName: patientName,
location: location,
appointmentDate: appointmentDate,
appointmentTime: appointmentTime,
consultationFee: consultationFee,
paymentStatus: PaymentStatus.pending,
createdAt: DateTime.now(),
specialization: specialization,
profileImageUrl: profileImageUrl,
);
docRef.set(booking.toMap());
return docRef.id;
} catch (e) {
throw Exception('Failed to create booking: $e');
}
}
Future<Booking> getBooking(String bookingId) async {
try {
final doc = await _firestore.collection('bookings').doc(bookingId).get();
if (!doc.exists) {
throw Exception('Booking not found');
}
return Booking.fromMap(doc.data()!);
} catch (e) {
throw Exception('Failed to get booking: $e');
}
}
Stream<List<Booking>> getPatientBookings(String patientId) {
return _firestore
.collection('bookings')
.where('patientId', isEqualTo: patientId)
.orderBy('appointmentDate', descending: true)
.snapshots()
.map((snapshot) =>
snapshot.docs.map((doc) => Booking.fromMap(doc.data())).toList());
}
Stream<List<Booking>> getDoctorBookings(String doctorId) {
return _firestore
.collection('bookings')
.where('doctorId', isEqualTo: doctorId)
.orderBy('appointmentDate', descending: true)
.snapshots()
.map((snapshot) =>
snapshot.docs.map((doc) => Booking.fromMap(doc.data())).toList());
}
Future<void> updatePaymentStatus(
String bookingId,
PaymentStatus status,
) async {
try {
await _firestore.collection('bookings').doc(bookingId).update({
'paymentStatus': status.toString().split('.').last,
});
} catch (e) {
throw Exception('Failed to update payment status: $e');
}
}
}