public async Task <IActionResult> Put(UpdateHireCommand 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); })); }
public async Task <Result <HireResponse> > UpdateHireAsync(UpdateHireCommand request) { var hireResult = await _hireRepository.GetHireAsync(request.Id); if (hireResult.IsFaulted) { return(hireResult); } HireResponse hireResponse = new(); hireResult.IfSucc(s => hireResponse = s); if (request.BikeId != hireResponse.BikeId || request.ClientId != hireResponse.ClientId) { return(new Result <HireResponse>(new BadRequestException(Error.CannotModifyHire))); } return(await _hireRepository.UpdateHireAsync(request)); }
public async Task <Result <HireResponse> > UpdateHireAsync(UpdateHireCommand request) { var hireInDb = await _dbContext.Hires.FindAsync(request.Id); if (hireInDb is null) { return(new Result <HireResponse>(new InternalServerException(Error.ErrorWhileProcessing))); } if (request.State == HireState.Terminated) { var bikeInDb = await _dbContext.Bikes.FindAsync(request.BikeId); bikeInDb.State = State.Free; _client.PublishEvent(new HireEventMessage() { MessageType = bikeInDb.GetType().Name, Method = ApiMethod.PUT.ToString(), Message = bikeInDb }); _dbContext.Bikes.Update(bikeInDb); } hireInDb = _mapper.Map(request, hireInDb); 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>(hireInDb))); }
public async Task <Result <HireResponse> > Handle(UpdateHireCommand request, CancellationToken cancellationToken) { return(await _hireService.UpdateHireAsync(request)); }