diff --git a/apps/mobile/packages/features/staff/profile_sections/finances/time_card/lib/src/data/repositories_impl/time_card_repository_impl.dart b/apps/mobile/packages/features/staff/profile_sections/finances/time_card/lib/src/data/repositories_impl/time_card_repository_impl.dart index 15823f5b..eee89873 100644 --- a/apps/mobile/packages/features/staff/profile_sections/finances/time_card/lib/src/data/repositories_impl/time_card_repository_impl.dart +++ b/apps/mobile/packages/features/staff/profile_sections/finances/time_card/lib/src/data/repositories_impl/time_card_repository_impl.dart @@ -1,63 +1,46 @@ -import 'package:firebase_auth/firebase_auth.dart' as firebase; import 'package:firebase_data_connect/firebase_data_connect.dart' as fdc; import 'package:intl/intl.dart'; import 'package:krow_data_connect/krow_data_connect.dart' as dc; import 'package:krow_domain/krow_domain.dart'; // ignore: implementation_imports import 'package:krow_domain/src/adapters/financial/time_card_adapter.dart'; -import 'package:krow_core/core.dart'; import '../../domain/repositories/time_card_repository.dart'; /// Implementation of [TimeCardRepository] using Firebase Data Connect. -class TimeCardRepositoryImpl - with dc.DataErrorHandler - implements TimeCardRepository { - final dc.ExampleConnector _dataConnect; - final firebase.FirebaseAuth _firebaseAuth; +class TimeCardRepositoryImpl implements TimeCardRepository { + final dc.DataConnectService _service; /// Creates a [TimeCardRepositoryImpl]. - TimeCardRepositoryImpl({ - required dc.ExampleConnector dataConnect, - required firebase.FirebaseAuth firebaseAuth, - }) : _dataConnect = dataConnect, - _firebaseAuth = firebaseAuth; - - Future _getStaffId() async { - final firebase.User? user = _firebaseAuth.currentUser; - if (user == null) { - throw const NotAuthenticatedException( - technicalMessage: 'User not authenticated'); - } - - final fdc.QueryResult result = - await _dataConnect.getStaffByUserId(userId: user.uid).execute(); - if (result.data.staffs.isEmpty) { - throw const ServerException(technicalMessage: 'Staff profile not found'); - } - return result.data.staffs.first.id; - } + TimeCardRepositoryImpl({dc.DataConnectService? service}) + : _service = service ?? dc.DataConnectService.instance; @override Future> getTimeCards(DateTime month) async { - return executeProtected(() async { - final String staffId = await _getStaffId(); + return _service.run(() async { + final String staffId = await _service.getStaffId(); // Fetch applications. Limit can be adjusted, assuming 100 is safe for now. - final fdc.QueryResult result = - await _dataConnect.getApplicationsByStaffId(staffId: staffId).limit(100).execute(); + final fdc.QueryResult result = + await _service.connector + .getApplicationsByStaffId(staffId: staffId) + .limit(100) + .execute(); return result.data.applications .where((dc.GetApplicationsByStaffIdApplications app) { - final DateTime? shiftDate = app.shift.date == null - ? null - : DateTimeUtils.toDeviceTime(app.shift.date!.toDateTime()); + final DateTime? shiftDate = _service.toDateTime(app.shift.date); if (shiftDate == null) return false; - return shiftDate.year == month.year && shiftDate.month == month.month; + return shiftDate.year == month.year && + shiftDate.month == month.month; }) .map((dc.GetApplicationsByStaffIdApplications app) { - final DateTime shiftDate = - DateTimeUtils.toDeviceTime(app.shift.date!.toDateTime()); - final String startTime = _formatTime(app.checkInTime) ?? _formatTime(app.shift.startTime) ?? ''; - final String endTime = _formatTime(app.checkOutTime) ?? _formatTime(app.shift.endTime) ?? ''; + final DateTime shiftDate = _service.toDateTime(app.shift.date)!; + final String startTime = _formatTime(app.checkInTime) ?? + _formatTime(app.shift.startTime) ?? + ''; + final String endTime = _formatTime(app.checkOutTime) ?? + _formatTime(app.shift.endTime) ?? + ''; // Prefer shiftRole values for pay/hours final double hours = app.shiftRole.hours ?? 0.0; @@ -84,7 +67,8 @@ class TimeCardRepositoryImpl String? _formatTime(fdc.Timestamp? timestamp) { if (timestamp == null) return null; - return DateFormat('HH:mm') - .format(DateTimeUtils.toDeviceTime(timestamp.toDateTime())); + final DateTime? dt = _service.toDateTime(timestamp); + if (dt == null) return null; + return DateFormat('HH:mm').format(dt); } } diff --git a/apps/mobile/packages/features/staff/profile_sections/finances/time_card/lib/src/staff_time_card_module.dart b/apps/mobile/packages/features/staff/profile_sections/finances/time_card/lib/src/staff_time_card_module.dart index b47632a6..59ff493b 100644 --- a/apps/mobile/packages/features/staff/profile_sections/finances/time_card/lib/src/staff_time_card_module.dart +++ b/apps/mobile/packages/features/staff/profile_sections/finances/time_card/lib/src/staff_time_card_module.dart @@ -1,6 +1,6 @@ library staff_time_card; -import 'package:firebase_auth/firebase_auth.dart'; +import 'package:flutter/widgets.dart'; import 'package:flutter_modular/flutter_modular.dart'; import 'package:krow_core/core.dart'; import 'package:krow_data_connect/krow_data_connect.dart'; @@ -24,12 +24,7 @@ class StaffTimeCardModule extends Module { @override void binds(Injector i) { // Repositories - i.add( - () => TimeCardRepositoryImpl( - dataConnect: ExampleConnector.instance, - firebaseAuth: FirebaseAuth.instance, - ), - ); + i.addLazySingleton(TimeCardRepositoryImpl.new); // UseCases i.add(GetTimeCardsUseCase.new); @@ -42,7 +37,7 @@ class StaffTimeCardModule extends Module { void routes(RouteManager r) { r.child( StaffPaths.childRoute(StaffPaths.timeCard, StaffPaths.timeCard), - child: (context) => const TimeCardPage(), + child: (BuildContext context) => const TimeCardPage(), ); } }