feat(certificates-documents-repositories): Refactor Certificates and Documents repositories to utilize DataConnectService and simplify dependency management

This commit is contained in:
Achintha Isuru
2026-02-16 16:27:09 -05:00
parent 572ade95b9
commit 24a13488da
4 changed files with 18 additions and 61 deletions

View File

@@ -1,8 +1,6 @@
import 'package:firebase_auth/firebase_auth.dart'; import 'package:krow_core/core.dart';
import 'package:firebase_data_connect/firebase_data_connect.dart';
import 'package:krow_data_connect/krow_data_connect.dart'; import 'package:krow_data_connect/krow_data_connect.dart';
import 'package:krow_domain/krow_domain.dart' as domain; import 'package:krow_domain/krow_domain.dart' as domain;
import 'package:krow_core/core.dart';
import '../../domain/repositories/certificates_repository.dart'; import '../../domain/repositories/certificates_repository.dart';
@@ -11,37 +9,22 @@ import '../../domain/repositories/certificates_repository.dart';
/// This class handles the communication with the backend via [ExampleConnector]. /// This class handles the communication with the backend via [ExampleConnector].
/// It maps raw generated data types to clean [domain.StaffDocument] entities. /// It maps raw generated data types to clean [domain.StaffDocument] entities.
class CertificatesRepositoryImpl class CertificatesRepositoryImpl
with DataErrorHandler
implements CertificatesRepository { implements CertificatesRepository {
/// The generated Data Connect SDK client. /// The Data Connect service instance.
final ExampleConnector _dataConnect; final DataConnectService _service;
/// The Firebase Authentication instance.
final FirebaseAuth _firebaseAuth;
/// Creates a [CertificatesRepositoryImpl]. /// Creates a [CertificatesRepositoryImpl].
/// CertificatesRepositoryImpl() : _service = DataConnectService.instance;
/// Requires [ExampleConnector] for data access and [FirebaseAuth] for user context.
CertificatesRepositoryImpl({
required ExampleConnector dataConnect,
required FirebaseAuth firebaseAuth,
}) : _dataConnect = dataConnect,
_firebaseAuth = firebaseAuth;
@override @override
Future<List<domain.StaffDocument>> getCertificates() async { Future<List<domain.StaffDocument>> getCertificates() async {
return executeProtected(() async { return _service.run(() async {
final User? currentUser = _firebaseAuth.currentUser; final String staffId = await _service.getStaffId();
if (currentUser == null) {
throw domain.NotAuthenticatedException(
technicalMessage: 'User not authenticated');
}
// Execute the query via DataConnect generated SDK // Execute the query via DataConnect generated SDK
final QueryResult<ListStaffDocumentsByStaffIdData, final result =
ListStaffDocumentsByStaffIdVariables> result = await _service.connector
await _dataConnect .listStaffDocumentsByStaffId(staffId: staffId)
.listStaffDocumentsByStaffId(staffId: currentUser.uid)
.execute(); .execute();
// Map the generated SDK types to pure Domain entities // Map the generated SDK types to pure Domain entities

View File

@@ -1,7 +1,5 @@
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter_modular/flutter_modular.dart'; import 'package:flutter_modular/flutter_modular.dart';
import 'package:krow_core/core.dart'; import 'package:krow_core/core.dart';
import 'package:krow_data_connect/krow_data_connect.dart';
import 'data/repositories_impl/certificates_repository_impl.dart'; import 'data/repositories_impl/certificates_repository_impl.dart';
import 'domain/repositories/certificates_repository.dart'; import 'domain/repositories/certificates_repository.dart';
@@ -12,12 +10,7 @@ import 'presentation/pages/certificates_page.dart';
class StaffCertificatesModule extends Module { class StaffCertificatesModule extends Module {
@override @override
void binds(Injector i) { void binds(Injector i) {
i.addLazySingleton<CertificatesRepository>( i.addLazySingleton<CertificatesRepository>(CertificatesRepositoryImpl.new);
() => CertificatesRepositoryImpl(
dataConnect: i.get<ExampleConnector>(), // Assuming ExampleConnector is provided by parent module
firebaseAuth: FirebaseAuth.instance,
),
);
i.addLazySingleton(GetCertificatesUseCase.new); i.addLazySingleton(GetCertificatesUseCase.new);
i.addLazySingleton(CertificatesCubit.new); i.addLazySingleton(CertificatesCubit.new);
} }

View File

@@ -1,39 +1,27 @@
import 'package:firebase_auth/firebase_auth.dart'; import 'package:krow_core/core.dart';
import 'package:firebase_data_connect/firebase_data_connect.dart';
import 'package:krow_data_connect/krow_data_connect.dart'; import 'package:krow_data_connect/krow_data_connect.dart';
import 'package:krow_domain/krow_domain.dart' as domain; import 'package:krow_domain/krow_domain.dart' as domain;
import 'package:krow_core/core.dart';
import '../../domain/repositories/documents_repository.dart'; import '../../domain/repositories/documents_repository.dart';
/// Implementation of [DocumentsRepository] using Data Connect. /// Implementation of [DocumentsRepository] using Data Connect.
class DocumentsRepositoryImpl class DocumentsRepositoryImpl
with DataErrorHandler
implements DocumentsRepository { implements DocumentsRepository {
final ExampleConnector _dataConnect; final DataConnectService _service;
final FirebaseAuth _firebaseAuth;
DocumentsRepositoryImpl({ DocumentsRepositoryImpl() : _service = DataConnectService.instance;
required ExampleConnector dataConnect,
required FirebaseAuth firebaseAuth,
}) : _dataConnect = dataConnect,
_firebaseAuth = firebaseAuth;
@override @override
Future<List<domain.StaffDocument>> getDocuments() async { Future<List<domain.StaffDocument>> getDocuments() async {
return executeProtected(() async { return _service.run(() async {
final User? currentUser = _firebaseAuth.currentUser; final String? staffId = await _service.getStaffId();
if (currentUser == null) {
throw domain.NotAuthenticatedException(
technicalMessage: 'User not authenticated');
}
/// MOCK IMPLEMENTATION /// MOCK IMPLEMENTATION
/// To be replaced with real data connect query when available /// To be replaced with real data connect query when available
return [ return [
domain.StaffDocument( domain.StaffDocument(
id: 'doc1', id: 'doc1',
staffId: currentUser.uid, staffId: staffId!,
documentId: 'd1', documentId: 'd1',
name: 'Work Permit', name: 'Work Permit',
description: 'Valid work permit document', description: 'Valid work permit document',
@@ -43,7 +31,7 @@ class DocumentsRepositoryImpl
), ),
domain.StaffDocument( domain.StaffDocument(
id: 'doc2', id: 'doc2',
staffId: currentUser.uid, staffId: staffId!,
documentId: 'd2', documentId: 'd2',
name: 'Health and Safety Training', name: 'Health and Safety Training',
description: 'Certificate of completion for health and safety training', description: 'Certificate of completion for health and safety training',

View File

@@ -1,7 +1,5 @@
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter_modular/flutter_modular.dart'; import 'package:flutter_modular/flutter_modular.dart';
import 'package:krow_core/core.dart'; import 'package:krow_core/core.dart';
import 'package:krow_data_connect/krow_data_connect.dart';
import 'data/repositories_impl/documents_repository_impl.dart'; import 'data/repositories_impl/documents_repository_impl.dart';
import 'domain/repositories/documents_repository.dart'; import 'domain/repositories/documents_repository.dart';
import 'domain/usecases/get_documents_usecase.dart'; import 'domain/usecases/get_documents_usecase.dart';
@@ -11,12 +9,7 @@ import 'presentation/pages/documents_page.dart';
class StaffDocumentsModule extends Module { class StaffDocumentsModule extends Module {
@override @override
void binds(Injector i) { void binds(Injector i) {
i.addLazySingleton<DocumentsRepository>( i.addLazySingleton<DocumentsRepository>(DocumentsRepositoryImpl.new);
() => DocumentsRepositoryImpl(
dataConnect: ExampleConnector.instance,
firebaseAuth: FirebaseAuth.instance,
),
);
i.addLazySingleton(GetDocumentsUseCase.new); i.addLazySingleton(GetDocumentsUseCase.new);
i.addLazySingleton(DocumentsCubit.new); i.addLazySingleton(DocumentsCubit.new);
} }