public async Task <Option <Exception, Unit> > Handle(VehicleUpdateCommand request, CancellationToken cancellationToken) { Option <Exception, Vehicle> callback = await _repository.GetByPlateAsync(request.Plate); if (callback.IsFailure) { return(callback.Failure); } var priceCallback = await _priceRepository.GetByDateAsync(callback.Success.CameIn); if (priceCallback.IsFailure) { return(new NotAllowedException("Operação não permitida devido a não havar um preço para o periodo ao qual o carro entou no estacionamento.")); } var timeInParking = DateTime.Now - callback.Success.CameIn; var logic = _priceLogicService.AmountPaid(timeInParking, priceCallback.Success); if (logic.IsFailure) { return(logic.Failure); } callback.Success.Price = priceCallback.Success.Value; callback.Success.Exited = DateTime.Now; callback.Success.AmountPaid = $"R$ {logic.Success.Item1}"; callback.Success.TotalTimePaid = $"{logic.Success.Item2} {(timeInParking.TotalMinutes <= 30 ? "min" : "hrs")}"; callback.Success.TotalTimeInParking = $"{logic.Success.Item3} hrs"; return(await _repository.UpdateAsync(callback.Success)); }
public async Task <IActionResult> PatchClient([FromBody] VehicleUpdateCommand command) => HandleCommand(await _mediator.Send(command));