Skip to content

Instantly share code, notes, and snippets.

@PreyeaRegmi
Last active June 25, 2021 17:02
Show Gist options
  • Save PreyeaRegmi/7344fc4d8f085da7901aba7dca686697 to your computer and use it in GitHub Desktop.
Save PreyeaRegmi/7344fc4d8f085da7901aba7dca686697 to your computer and use it in GitHub Desktop.
//Usecase Implementation
class ValidateBillingAndShippingAddressUseCase extends UseCase<
BillingAndShippingAddressValidationRequest,
BillingAndShippingAddressValidationResponse> {
final AddressRespository _addressRespository;
ValidateBillingAndShippingAddressUseCase(this._addressRespository);
@override
Stream<BillingAndShippingAddressValidationResponse> buildUseCase(
BillingAndShippingAddressValidationRequest param) {
return _addressRespository.validate(param).asStream();
}
}
//Usecase Implementation
class PostShippingAndValidationBillingShippingAddress extends UseCase<
PostShippingAndValidationAddressRequest,
BillingAndShippingAddressValidationResponse> {
final PostShippingInfoUseCase _postShippingInfoUseCase;
final ValidateBillingAndShippingAddressUseCase
_billingAndShippingAddressUseCase;
PostShippingAndValidationBillingShippingAddress(
this._postShippingInfoUseCase, this._billingAndShippingAddressUseCase);
@override
Stream<BillingAndShippingAddressValidationResponse> buildUseCase(
PostShippingAndValidationAddressRequest param) {
return _postShippingInfoUseCase
.buildUseCase(param._shippingInfoRequest)
.flatMap((shippingResponse) => _billingAndShippingAddressUseCase
.buildUseCase(param._addressValidationRequest));
}
}
//Usecase invocation from presentation layer
PostShippingAndValidationBillingShippingAddress(
PostShippingInfoUseCase(MockedShippingInfoRepository()),
ValidateBillingAndShippingAddressUseCase(
MockedAddressValidationRepository()))
.execute(
PostShippingAndValidationAddressRequest(ShippingInfoRequest(),
BillingAndShippingAddressValidationRequest()),
(result) {
//TODO Display result
},
(errorMessage) {
//TODO Display error
});
//Usecase Implementation
class PostBillingShippingInfoAndValidateAddressUseCase extends UseCase<
BillingShippingInfoRequest, BillingAndShippingAddressValidationResponse> {
final PostBillingInfoUseCase _billingInfoUseCase;
final PostShippingInfoUseCase _shippingInfoUseCase;
final ValidateBillingAndShippingAddressUseCase
_billingAndShippingAddressValidationUseCase;
PostBillingShippingInfoAndValidateAddressUseCase(
this._billingInfoUseCase,
this._shippingInfoUseCase,
this._billingAndShippingAddressValidationUseCase,
);
@override
Stream<BillingAndShippingAddressValidationResponse> buildUseCase(
BillingShippingInfoRequest param) {
return Rx.zip2(
_billingInfoUseCase.buildUseCase(param.billingInfoRequest),
_shippingInfoUseCase.buildUseCase(param.shippingInfoRequest),
(BillingInfoResponse billingResult,
ShippingInfoResponse shippingResult) =>
BillingShippinInfoResponse.from(billingResult, shippingResult))
.flatMap((billingShippingResult) =>
_billingAndShippingAddressValidationUseCase
.buildUseCase(BillingAndShippingAddressValidationRequest()));
}
}
//Usecase invocation from presentation layer
PostBillingShippingInfoAndValidateAddressUseCase(
PostBillingAndShippingInfoUseCase(
PostBillingInfoUseCase(MockedBillingInfoRepository()),
PostShippingInfoUseCase(MockedShippingInfoRepository())),
ValidateBillingAndShippingAddressUseCase(
MockedAddressValidationRepository()))
.execute(
BillingShippingInfoRequest(
BillingInfoRequest(), ShippingInfoRequest()), (result) {
//TODO Display result
}, (errorMessage) {
//TODO Display error
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment