public override async Task <UseCaseResult <RentRequirementValidationResult> > Validate(RentRequirement requirement) { var isTryingToRentWithoutProducts = requirement.ProductsIds == null; if (isTryingToRentWithoutProducts) { return(UseCasesResponses.Failure <RentRequirementValidationResult>("Trying to Rent without products")); } var productsToRent = await _products.GetByIds(requirement.ProductsIds.ToList()); if (!productsToRent.Success) { return(UseCasesResponses.Failure <RentRequirementValidationResult>(productsToRent.Message)); } var renter = await _renter.GetById(requirement.RenterId); if (!renter.Success) { return(UseCasesResponses.Failure <RentRequirementValidationResult>(renter.Message)); } var rentPeriod = DateRangeProvider.GetDateRange(requirement.StartDate, requirement.EndDate); if (!rentPeriod.Success) { return(UseCasesResponses.Failure <RentRequirementValidationResult>(rentPeriod.Message)); } var validationResult = new RentRequirementValidationResult { Products = productsToRent.Response, RentPeriod = rentPeriod.Result, Renter = renter.Response }; return(UseCasesResponses.Success(validationResult)); }
public virtual async Task <UseCaseResult <List <TEntity> > > GetByIds(List <Guid> ids) { var persistenceResponse = await ReadOnlyPersistenceGateway.GetByIds(ids); return(UseCasesResponses.GetUseCaseResult(persistenceResponse)); }