feat(tax-forms-repository): Refactor TaxFormsRepositoryImpl to simplify initialization and utilize DataConnectService for data operations

This commit is contained in:
Achintha Isuru
2026-02-16 16:22:14 -05:00
parent 0fc317e1da
commit 572ade95b9
2 changed files with 19 additions and 54 deletions

View File

@@ -1,7 +1,5 @@
import 'dart:async'; import 'dart:async';
import 'package:firebase_auth/firebase_auth.dart' as auth;
import 'package:firebase_core/firebase_core.dart';
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' as dc; import 'package:krow_data_connect/krow_data_connect.dart' as dc;
import 'package:krow_domain/krow_domain.dart'; import 'package:krow_domain/krow_domain.dart';
@@ -10,45 +8,21 @@ import '../../domain/repositories/tax_forms_repository.dart';
import '../mappers/tax_form_mapper.dart'; import '../mappers/tax_form_mapper.dart';
class TaxFormsRepositoryImpl class TaxFormsRepositoryImpl
with dc.DataErrorHandler
implements TaxFormsRepository { implements TaxFormsRepository {
TaxFormsRepositoryImpl({ TaxFormsRepositoryImpl() : _service = dc.DataConnectService.instance;
required this.firebaseAuth,
required this.dataConnect,
});
final auth.FirebaseAuth firebaseAuth; final dc.DataConnectService _service;
final dc.ExampleConnector dataConnect;
/// Helper to get the logged-in staff ID.
String _getStaffId() {
final auth.User? user = firebaseAuth.currentUser;
if (user == null) {
throw const NotAuthenticatedException(
technicalMessage: 'Firebase User is null',
);
}
final String? staffId = dc.StaffSessionStore.instance.session?.staff?.id;
if (staffId == null || staffId.isEmpty) {
throw const StaffProfileNotFoundException(
technicalMessage: 'Staff ID missing in SessionStore',
);
}
return staffId;
}
@override @override
Future<List<TaxForm>> getTaxForms() async { Future<List<TaxForm>> getTaxForms() async {
return executeProtected(() async { return _service.run(() async {
final String staffId = _getStaffId(); final String staffId = await _service.getStaffId();
final QueryResult<dc.GetTaxFormsByStaffIdData, dc.GetTaxFormsByStaffIdVariables> final response = await _service.connector
result = await dataConnect
.getTaxFormsByStaffId(staffId: staffId) .getTaxFormsByStaffId(staffId: staffId)
.execute(); .execute();
final List<TaxForm> forms = final List<TaxForm> forms =
result.data.taxForms.map(TaxFormMapper.fromDataConnect).toList(); response.data.taxForms.map(TaxFormMapper.fromDataConnect).toList();
// Check if required forms exist, create if not. // Check if required forms exist, create if not.
final Set<TaxFormType> typesPresent = final Set<TaxFormType> typesPresent =
@@ -65,11 +39,9 @@ class TaxFormsRepositoryImpl
} }
if (createdNew) { if (createdNew) {
final QueryResult< final response2 =
dc.GetTaxFormsByStaffIdData, await _service.connector.getTaxFormsByStaffId(staffId: staffId).execute();
dc.GetTaxFormsByStaffIdVariables> result2 = return response2.data.taxForms
await dataConnect.getTaxFormsByStaffId(staffId: staffId).execute();
return result2.data.taxForms
.map(TaxFormMapper.fromDataConnect) .map(TaxFormMapper.fromDataConnect)
.toList(); .toList();
} }
@@ -79,7 +51,7 @@ class TaxFormsRepositoryImpl
} }
Future<void> _createInitialForm(String staffId, TaxFormType type) async { Future<void> _createInitialForm(String staffId, TaxFormType type) async {
await dataConnect await _service.connector
.createTaxForm( .createTaxForm(
staffId: staffId, staffId: staffId,
formType: formType:
@@ -95,10 +67,10 @@ class TaxFormsRepositoryImpl
@override @override
Future<void> updateI9Form(I9TaxForm form) async { Future<void> updateI9Form(I9TaxForm form) async {
return executeProtected(() async { return _service.run(() async {
final Map<String, dynamic> data = form.formData; final Map<String, dynamic> data = form.formData;
final dc.UpdateTaxFormVariablesBuilder builder = final dc.UpdateTaxFormVariablesBuilder builder =
dataConnect.updateTaxForm(id: form.id); _service.connector.updateTaxForm(id: form.id);
_mapCommonFields(builder, data); _mapCommonFields(builder, data);
_mapI9Fields(builder, data); _mapI9Fields(builder, data);
await builder.execute(); await builder.execute();
@@ -107,10 +79,10 @@ class TaxFormsRepositoryImpl
@override @override
Future<void> submitI9Form(I9TaxForm form) async { Future<void> submitI9Form(I9TaxForm form) async {
return executeProtected(() async { return _service.run(() async {
final Map<String, dynamic> data = form.formData; final Map<String, dynamic> data = form.formData;
final dc.UpdateTaxFormVariablesBuilder builder = final dc.UpdateTaxFormVariablesBuilder builder =
dataConnect.updateTaxForm(id: form.id); _service.connector.updateTaxForm(id: form.id);
_mapCommonFields(builder, data); _mapCommonFields(builder, data);
_mapI9Fields(builder, data); _mapI9Fields(builder, data);
await builder.status(dc.TaxFormStatus.SUBMITTED).execute(); await builder.status(dc.TaxFormStatus.SUBMITTED).execute();
@@ -119,10 +91,10 @@ class TaxFormsRepositoryImpl
@override @override
Future<void> updateW4Form(W4TaxForm form) async { Future<void> updateW4Form(W4TaxForm form) async {
return executeProtected(() async { return _service.run(() async {
final Map<String, dynamic> data = form.formData; final Map<String, dynamic> data = form.formData;
final dc.UpdateTaxFormVariablesBuilder builder = final dc.UpdateTaxFormVariablesBuilder builder =
dataConnect.updateTaxForm(id: form.id); _service.connector.updateTaxForm(id: form.id);
_mapCommonFields(builder, data); _mapCommonFields(builder, data);
_mapW4Fields(builder, data); _mapW4Fields(builder, data);
await builder.execute(); await builder.execute();
@@ -131,10 +103,10 @@ class TaxFormsRepositoryImpl
@override @override
Future<void> submitW4Form(W4TaxForm form) async { Future<void> submitW4Form(W4TaxForm form) async {
return executeProtected(() async { return _service.run(() async {
final Map<String, dynamic> data = form.formData; final Map<String, dynamic> data = form.formData;
final dc.UpdateTaxFormVariablesBuilder builder = final dc.UpdateTaxFormVariablesBuilder builder =
dataConnect.updateTaxForm(id: form.id); _service.connector.updateTaxForm(id: form.id);
_mapCommonFields(builder, data); _mapCommonFields(builder, data);
_mapW4Fields(builder, data); _mapW4Fields(builder, data);
await builder.status(dc.TaxFormStatus.SUBMITTED).execute(); await builder.status(dc.TaxFormStatus.SUBMITTED).execute();

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 'package:krow_domain/krow_domain.dart'; import 'package:krow_domain/krow_domain.dart';
import 'data/repositories/tax_forms_repository_impl.dart'; import 'data/repositories/tax_forms_repository_impl.dart';
import 'domain/repositories/tax_forms_repository.dart'; import 'domain/repositories/tax_forms_repository.dart';
@@ -18,12 +16,7 @@ import 'presentation/pages/tax_forms_page.dart';
class StaffTaxFormsModule extends Module { class StaffTaxFormsModule extends Module {
@override @override
void binds(Injector i) { void binds(Injector i) {
i.addLazySingleton<TaxFormsRepository>( i.addLazySingleton<TaxFormsRepository>(TaxFormsRepositoryImpl.new);
() => TaxFormsRepositoryImpl(
firebaseAuth: FirebaseAuth.instance,
dataConnect: ExampleConnector.instance,
),
);
// Use Cases // Use Cases
i.addLazySingleton(GetTaxFormsUseCase.new); i.addLazySingleton(GetTaxFormsUseCase.new);