Example #1
0
        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);
            }));
        }
Example #2
0
        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));
        }
Example #3
0
        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)));
        }
Example #4
0
 public async Task <Result <HireResponse> > Handle(UpdateHireCommand request, CancellationToken cancellationToken)
 {
     return(await _hireService.UpdateHireAsync(request));
 }