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_data_connect/firebase_data_connect.dart';
import 'package:krow_data_connect/krow_data_connect.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';
/// Implementation of [BankAccountRepository].
class BankAccountRepositoryImpl implements BankAccountRepository {
final ExampleConnector _connector;
final auth.FirebaseAuth _auth;
const BankAccountRepositoryImpl({
required this.dataConnect,
required this.firebaseAuth,
});
BankAccountRepositoryImpl({
ExampleConnector? connector,
auth.FirebaseAuth? firebaseAuth,
}) : _connector = connector ?? ExampleConnector.instance,
_auth = firebaseAuth ?? auth.FirebaseAuth.instance;
final ExampleConnector dataConnect;
final auth.FirebaseAuth firebaseAuth;
@override
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');
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 BankAccount(
@@ -41,10 +38,10 @@ class BankAccountRepositoryImpl implements BankAccountRepository {
@override
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');
await _connector.createAccount(
await dataConnect.createAccount(
bank: account.bankName,
type: _mapDomainType(account.type),
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:krow_data_connect/krow_data_connect.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/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 {
@override
List<Module> get imports => <Module>[DataConnectModule()];
@override
void binds(Injector i) {
// Repositories
i.add<BankAccountRepository>(BankAccountRepositoryImpl.new);
i.addLazySingleton<BankAccountRepository>(
() => BankAccountRepositoryImpl(
firebaseAuth: auth.FirebaseAuth.instance,
dataConnect: ExampleConnector.instance,
),
);
// Use Cases
i.add(GetBankAccountsUseCase.new);
i.add(AddBankAccountUseCase.new);
i.addLazySingleton<GetBankAccountsUseCase>(GetBankAccountsUseCase.new);
i.addLazySingleton<AddBankAccountUseCase>(AddBankAccountUseCase.new);
// Blocs
i.addSingleton<BankAccountCubit>(
i.add<BankAccountCubit>(
() => BankAccountCubit(
getBankAccountsUseCase: i.get<GetBankAccountsUseCase>(),
addBankAccountUseCase: i.get<AddBankAccountUseCase>(),

View File

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