diff --git a/lib/core/network/repository/proposal_repository.dart b/lib/core/network/repository/proposal_repository.dart index 54aa2801..4cf17612 100644 --- a/lib/core/network/repository/proposal_repository.dart +++ b/lib/core/network/repository/proposal_repository.dart @@ -10,6 +10,7 @@ import 'package:hypha_wallet/core/network/repository/profile_repository.dart'; import 'package:hypha_wallet/ui/architecture/result/result.dart'; import 'package:hypha_wallet/ui/profile/interactor/profile_data.dart'; import 'package:hypha_wallet/ui/proposals/filter/interactor/filter_status.dart'; +import 'package:hypha_wallet/ui/proposals/list/interactor/get_proposals_use_case_input.dart'; class ProposalRepository { final ProposalService _proposalService; @@ -17,9 +18,9 @@ class ProposalRepository { ProposalRepository(this._proposalService, this._profileService); - Future, HyphaError>> getProposals(UserProfileData user, List daos, FilterStatus filterStatus) async { - final List, HyphaError>>> futures = daos.map((DaoData dao) { - return filterStatus == FilterStatus.active ? _proposalService.getActiveProposals(user, dao.docId) : _proposalService.getPastProposals(user, dao.docId); + Future, HyphaError>> getProposals(UserProfileData user, GetProposalsUseCaseInput input) async { + final List, HyphaError>>> futures = input.daos.map((DaoData dao) { + return input.filterStatus == FilterStatus.active ? _proposalService.getActiveProposals(user, dao.docId) : _proposalService.getPastProposals(user, dao.docId); }).toList(); final List, HyphaError>> futureResults = await Future.wait(futures); @@ -38,7 +39,7 @@ class ProposalRepository { } try { - final List proposals = await _parseProposalsFromResponse(response, daos[i], filterStatus); + final List proposals = await _parseProposalsFromResponse(response, input.daos[i], input.filterStatus); allProposals.addAll(proposals); } catch (e, stackTrace) { LogHelper.e('Error parsing data into proposal model', error: e, stacktrace: stackTrace); diff --git a/lib/ui/proposals/list/interactor/get_proposals_use_case_input.dart b/lib/ui/proposals/list/interactor/get_proposals_use_case_input.dart new file mode 100644 index 00000000..aa1886f1 --- /dev/null +++ b/lib/ui/proposals/list/interactor/get_proposals_use_case_input.dart @@ -0,0 +1,9 @@ +import 'package:hypha_wallet/core/network/models/dao_data_model.dart'; +import 'package:hypha_wallet/ui/proposals/filter/interactor/filter_status.dart'; + +class GetProposalsUseCaseInput { + final List daos; + final FilterStatus filterStatus; + + GetProposalsUseCaseInput(this.daos, this.filterStatus); +} diff --git a/lib/ui/proposals/list/interactor/proposals_bloc.dart b/lib/ui/proposals/list/interactor/proposals_bloc.dart index ba9d7d76..78028fe3 100644 --- a/lib/ui/proposals/list/interactor/proposals_bloc.dart +++ b/lib/ui/proposals/list/interactor/proposals_bloc.dart @@ -9,6 +9,7 @@ import 'package:hypha_wallet/ui/architecture/result/result.dart'; import 'package:hypha_wallet/ui/profile/interactor/profile_data.dart'; import 'package:hypha_wallet/ui/profile/usecases/fetch_profile_use_case.dart'; import 'package:hypha_wallet/ui/proposals/filter/interactor/filter_status.dart'; +import 'package:hypha_wallet/ui/proposals/list/interactor/get_proposals_use_case_input.dart'; import 'package:hypha_wallet/ui/proposals/list/usecases/get_proposals_use_case.dart'; part 'proposals_bloc.freezed.dart'; @@ -49,7 +50,7 @@ class ProposalsBloc extends Bloc { } Future _fetchAndEmitProposals(Emitter emit, List daos, FilterStatus filterStatus) async { - final Result, HyphaError> proposalsResult = await _getProposalsUseCase.run(daos, filterStatus); + final Result, HyphaError> proposalsResult = await _getProposalsUseCase.run(GetProposalsUseCaseInput(daos, filterStatus)); if (proposalsResult.isValue) { emit(state.copyWith(pageState: PageState.success, proposals: proposalsResult.asValue!.value)); diff --git a/lib/ui/proposals/list/usecases/get_proposals_use_case.dart b/lib/ui/proposals/list/usecases/get_proposals_use_case.dart index 588c6963..67f7e40b 100644 --- a/lib/ui/proposals/list/usecases/get_proposals_use_case.dart +++ b/lib/ui/proposals/list/usecases/get_proposals_use_case.dart @@ -1,17 +1,17 @@ import 'package:hypha_wallet/core/error_handler/model/hypha_error.dart'; -import 'package:hypha_wallet/core/network/models/dao_data_model.dart'; import 'package:hypha_wallet/core/network/models/proposal_model.dart'; import 'package:hypha_wallet/core/network/repository/auth_repository.dart'; import 'package:hypha_wallet/core/network/repository/proposal_repository.dart'; +import 'package:hypha_wallet/ui/architecture/interactor/base_usecase.dart'; import 'package:hypha_wallet/ui/architecture/result/result.dart'; -import 'package:hypha_wallet/ui/proposals/filter/interactor/filter_status.dart'; +import 'package:hypha_wallet/ui/proposals/list/interactor/get_proposals_use_case_input.dart'; -// TODO(Zied): add 'extends' (check) -class GetProposalsUseCase { +class GetProposalsUseCase extends InputUseCase, HyphaError>, GetProposalsUseCaseInput> { final AuthRepository _authRepository; final ProposalRepository _proposalRepository; GetProposalsUseCase(this._authRepository, this._proposalRepository); - Future, HyphaError>> run(List daos, FilterStatus filterStatus) async => _proposalRepository.getProposals(_authRepository.authDataOrCrash.userProfileData, daos, filterStatus); + @override + Future, HyphaError>> run(GetProposalsUseCaseInput input) async => _proposalRepository.getProposals(_authRepository.authDataOrCrash.userProfileData, input); }