public async Task <Result <HireResponse> > CreateHireAsync(CreateHireCommand request) { var hireToAdd = _mapper.Map <Hire>(request); _dbContext.Hires.Add(hireToAdd); var bikeInDb = await _dbContext.Bikes.FindAsync(request.BikeId); bikeInDb.State = State.Hired; _client.PublishEvent(new HireEventMessage() { MessageType = bikeInDb.GetType().Name, Method = ApiMethod.PUT.ToString(), Message = bikeInDb }); _dbContext.Bikes.Update(bikeInDb); try { await _dbContext.SaveChangesAsync(); } catch (Exception e) { Console.WriteLine(e); return(new Result <HireResponse>(new InternalServerException(Error.ErrorWhileProcessing))); } return(new Result <HireResponse>(_mapper.Map <HireResponse>(hireToAdd))); }
public async Task <Result <HireResponse> > CreateHireAsync(CreateHireCommand request) { var validationResult = await BikeAndClientValidationAsync(request); if (validationResult.IsFaulted) { return(validationResult); } return(await _hireRepository.CreateHireAsync(request)); }
public async Task <IActionResult> Post(CreateHireCommand command) { var outcome = await _mediator.Send(command); return(outcome.Match <IActionResult>(s => Ok(s), f => { if (f is BadRequestException) { return BadRequest(f.Message); } if (f is InternalServerException) { return StatusCode(StatusCodes.Status500InternalServerError, f.Message); } return StatusCode(StatusCodes.Status500InternalServerError); })); }
private async Task <Result <HireResponse> > BikeAndClientValidationAsync(CreateHireCommand request) { Exception exception = new (); var bikeCheck = await _bikeService.CheckIfBikeAvailableAsync(request.BikeId); if (bikeCheck.IsFaulted) { var result = bikeCheck.IfFail(f => exception = f); return(new Result <HireResponse>(exception)); } var clientCheck = await _clientService.CheckIfClientAvailableAsync(request.ClientId); if (clientCheck.IsFaulted) { var result = clientCheck.IfFail(f => exception = f); return(new Result <HireResponse>(exception)); } return(new Result <HireResponse>(new HireResponse())); }
public async Task <Result <HireResponse> > Handle(CreateHireCommand request, CancellationToken cancellationToken) { return(await _hireService.CreateHireAsync(request)); }