From 1f7134799b5396abb053f0c12d364e048f89f007 Mon Sep 17 00:00:00 2001 From: Achintha Isuru Date: Mon, 16 Feb 2026 15:48:45 -0500 Subject: [PATCH] feat(availability): Refactor AvailabilityRepositoryImpl to use DataConnectService and simplify dependency injection --- .../availability_repository_impl.dart | 50 +++++-------------- .../lib/src/staff_availability_module.dart | 7 +-- 2 files changed, 13 insertions(+), 44 deletions(-) diff --git a/apps/mobile/packages/features/staff/availability/lib/src/data/repositories_impl/availability_repository_impl.dart b/apps/mobile/packages/features/staff/availability/lib/src/data/repositories_impl/availability_repository_impl.dart index c68ae129..4c7a1afe 100644 --- a/apps/mobile/packages/features/staff/availability/lib/src/data/repositories_impl/availability_repository_impl.dart +++ b/apps/mobile/packages/features/staff/availability/lib/src/data/repositories_impl/availability_repository_impl.dart @@ -1,4 +1,3 @@ -import 'package:firebase_auth/firebase_auth.dart' as firebase; import 'package:firebase_data_connect/firebase_data_connect.dart'; import 'package:krow_data_connect/krow_data_connect.dart' as dc; import 'package:krow_domain/krow_domain.dart'; @@ -10,44 +9,19 @@ import '../../domain/repositories/availability_repository.dart'; /// not specific date availability. Therefore, updating availability for a specific /// date will update the availability for that Day of Week globally (Recurring). class AvailabilityRepositoryImpl - with dc.DataErrorHandler implements AvailabilityRepository { - final dc.ExampleConnector _dataConnect; - final firebase.FirebaseAuth _firebaseAuth; - String? _cachedStaffId; + final dc.DataConnectService _service; - AvailabilityRepositoryImpl({ - required dc.ExampleConnector dataConnect, - required firebase.FirebaseAuth firebaseAuth, - }) : _dataConnect = dataConnect, - _firebaseAuth = firebaseAuth; - - Future _getStaffId() async { - if (_cachedStaffId != null) return _cachedStaffId!; - - final firebase.User? user = _firebaseAuth.currentUser; - if (user == null) { - throw NotAuthenticatedException( - technicalMessage: 'User not authenticated'); - } - - final QueryResult result = - await _dataConnect.getStaffByUserId(userId: user.uid).execute(); - if (result.data.staffs.isEmpty) { - throw const ServerException(technicalMessage: 'Staff profile not found'); - } - _cachedStaffId = result.data.staffs.first.id; - return _cachedStaffId!; - } + AvailabilityRepositoryImpl() : _service = dc.DataConnectService.instance; @override Future> getAvailability(DateTime start, DateTime end) async { - return executeProtected(() async { - final String staffId = await _getStaffId(); + return _service.run(() async { + final String staffId = await _service.getStaffId(); // 1. Fetch Weekly recurring availability final QueryResult result = - await _dataConnect.listStaffAvailabilitiesByStaffId(staffId: staffId).limit(100).execute(); + await _service.connector.listStaffAvailabilitiesByStaffId(staffId: staffId).limit(100).execute(); final List items = result.data.staffAvailabilities; @@ -124,8 +98,8 @@ class AvailabilityRepositoryImpl @override Future updateDayAvailability(DayAvailability availability) async { - return executeProtected(() async { - final String staffId = await _getStaffId(); + return _service.run(() async { + final String staffId = await _service.getStaffId(); final dc.DayOfWeek dow = _toBackendDay(availability.date.weekday); // Update each slot in the backend. @@ -143,8 +117,8 @@ class AvailabilityRepositoryImpl @override Future> applyQuickSet(DateTime start, DateTime end, String type) async { - return executeProtected(() async { - final String staffId = await _getStaffId(); + return _service.run(() async { + final String staffId = await _service.getStaffId(); // QuickSet updates the Recurring schedule for all days involved. // However, if the user selects a range that covers e.g. Mon-Fri, we update Mon-Fri. @@ -204,7 +178,7 @@ class AvailabilityRepositoryImpl Future _upsertSlot(String staffId, dc.DayOfWeek day, dc.AvailabilitySlot slot, dc.AvailabilityStatus status) async { // Check if exists - final result = await _dataConnect.getStaffAvailabilityByKey( + final result = await _service.connector.getStaffAvailabilityByKey( staffId: staffId, day: day, slot: slot, @@ -212,14 +186,14 @@ class AvailabilityRepositoryImpl if (result.data.staffAvailability != null) { // Update - await _dataConnect.updateStaffAvailability( + await _service.connector.updateStaffAvailability( staffId: staffId, day: day, slot: slot, ).status(status).execute(); } else { // Create - await _dataConnect.createStaffAvailability( + await _service.connector.createStaffAvailability( staffId: staffId, day: day, slot: slot, diff --git a/apps/mobile/packages/features/staff/availability/lib/src/staff_availability_module.dart b/apps/mobile/packages/features/staff/availability/lib/src/staff_availability_module.dart index 88458885..98937517 100644 --- a/apps/mobile/packages/features/staff/availability/lib/src/staff_availability_module.dart +++ b/apps/mobile/packages/features/staff/availability/lib/src/staff_availability_module.dart @@ -18,12 +18,7 @@ class StaffAvailabilityModule extends Module { @override void binds(Injector i) { // Repository - i.add( - () => AvailabilityRepositoryImpl( - dataConnect: ExampleConnector.instance, - firebaseAuth: FirebaseAuth.instance, - ), - ); + i.add(AvailabilityRepositoryImpl.new); // UseCases i.add(GetWeeklyAvailabilityUseCase.new);