feat: Refactor BankAccountRepository implementation and update module bindings for improved dependency injection
This commit is contained in:
@@ -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),
|
||||
|
||||
@@ -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>(),
|
||||
|
||||
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user