feat: Refactor BankAccountRepository implementation and update module bindings for improved dependency injection

This commit is contained in:
Achintha Isuru
2026-01-24 23:11:05 -05:00
parent e6e2783a5a
commit e2cdf0d8fa
3 changed files with 30 additions and 20 deletions

View File

@@ -1,29 +1,26 @@
// ignore_for_file: implementation_imports
import 'package:firebase_auth/firebase_auth.dart' as auth; import 'package:firebase_auth/firebase_auth.dart' as auth;
import 'package:firebase_data_connect/firebase_data_connect.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'; import 'package:krow_domain/krow_domain.dart';
import 'package:krow_data_connect/src/dataconnect_generated/generated.dart';
import '../../domain/repositories/bank_account_repository.dart'; import '../../domain/repositories/bank_account_repository.dart';
/// Implementation of [BankAccountRepository]. /// Implementation of [BankAccountRepository].
class BankAccountRepositoryImpl implements BankAccountRepository { class BankAccountRepositoryImpl implements BankAccountRepository {
final ExampleConnector _connector; const BankAccountRepositoryImpl({
final auth.FirebaseAuth _auth; required this.dataConnect,
required this.firebaseAuth,
});
BankAccountRepositoryImpl({ final ExampleConnector dataConnect;
ExampleConnector? connector, final auth.FirebaseAuth firebaseAuth;
auth.FirebaseAuth? firebaseAuth,
}) : _connector = connector ?? ExampleConnector.instance,
_auth = firebaseAuth ?? auth.FirebaseAuth.instance;
@override @override
Future<List<BankAccount>> getAccounts() async { Future<List<BankAccount>> getAccounts() async {
final auth.User? user = _auth.currentUser; final auth.User? user = firebaseAuth.currentUser;
if (user == null) throw Exception('User not authenticated'); if (user == null) throw Exception('User not authenticated');
final QueryResult<GetAccountsByOwnerIdData, GetAccountsByOwnerIdVariables> result = await _connector.getAccountsByOwnerId(ownerId: user.uid).execute(); final QueryResult<GetAccountsByOwnerIdData, GetAccountsByOwnerIdVariables> result = await dataConnect.getAccountsByOwnerId(ownerId: user.uid).execute();
return result.data.accounts.map((GetAccountsByOwnerIdAccounts account) { return result.data.accounts.map((GetAccountsByOwnerIdAccounts account) {
return BankAccount( return BankAccount(
@@ -41,10 +38,10 @@ class BankAccountRepositoryImpl implements BankAccountRepository {
@override @override
Future<void> addAccount(BankAccount account) async { Future<void> addAccount(BankAccount account) async {
final auth.User? user = _auth.currentUser; final auth.User? user = firebaseAuth.currentUser;
if (user == null) throw Exception('User not authenticated'); if (user == null) throw Exception('User not authenticated');
await _connector.createAccount( await dataConnect.createAccount(
bank: account.bankName, bank: account.bankName,
type: _mapDomainType(account.type), type: _mapDomainType(account.type),
last4: account.last4 ?? account.accountNumber.substring(account.accountNumber.length - 4), last4: account.last4 ?? account.accountNumber.substring(account.accountNumber.length - 4),

View File

@@ -1,23 +1,34 @@
import 'package:firebase_auth/firebase_auth.dart' as auth;
import 'package:flutter_modular/flutter_modular.dart'; import 'package:flutter_modular/flutter_modular.dart';
import 'package:krow_data_connect/krow_data_connect.dart';
import 'package:staff_bank_account/src/data/repositories/bank_account_repository_impl.dart'; import 'package:staff_bank_account/src/data/repositories/bank_account_repository_impl.dart';
import 'domain/repositories/bank_account_repository.dart';
import 'domain/usecases/add_bank_account_usecase.dart';
import 'domain/usecases/get_bank_accounts_usecase.dart';
import 'presentation/blocs/bank_account_cubit.dart'; import 'presentation/blocs/bank_account_cubit.dart';
import 'presentation/pages/bank_account_page.dart'; import 'presentation/pages/bank_account_page.dart';
import 'domain/repositories/bank_account_repository.dart';
import 'domain/usecases/get_bank_accounts_usecase.dart';
import 'domain/usecases/add_bank_account_usecase.dart';
class StaffBankAccountModule extends Module { class StaffBankAccountModule extends Module {
@override
List<Module> get imports => <Module>[DataConnectModule()];
@override @override
void binds(Injector i) { void binds(Injector i) {
// Repositories // Repositories
i.add<BankAccountRepository>(BankAccountRepositoryImpl.new); i.addLazySingleton<BankAccountRepository>(
() => BankAccountRepositoryImpl(
firebaseAuth: auth.FirebaseAuth.instance,
dataConnect: ExampleConnector.instance,
),
);
// Use Cases // Use Cases
i.add(GetBankAccountsUseCase.new); i.addLazySingleton<GetBankAccountsUseCase>(GetBankAccountsUseCase.new);
i.add(AddBankAccountUseCase.new); i.addLazySingleton<AddBankAccountUseCase>(AddBankAccountUseCase.new);
// Blocs // Blocs
i.addSingleton<BankAccountCubit>( i.add<BankAccountCubit>(
() => BankAccountCubit( () => BankAccountCubit(
getBankAccountsUseCase: i.get<GetBankAccountsUseCase>(), getBankAccountsUseCase: i.get<GetBankAccountsUseCase>(),
addBankAccountUseCase: i.get<AddBankAccountUseCase>(), addBankAccountUseCase: i.get<AddBankAccountUseCase>(),

View File

@@ -16,6 +16,8 @@ dependencies:
flutter_modular: ^6.3.0 flutter_modular: ^6.3.0
equatable: ^2.0.5 equatable: ^2.0.5
lucide_icons: ^0.257.0 lucide_icons: ^0.257.0
firebase_auth: ^6.1.4
firebase_data_connect: ^0.2.2+2
# Architecture Packages # Architecture Packages
design_system: design_system: