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_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),
|
||||||
|
|||||||
@@ -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>(),
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
Reference in New Issue
Block a user