Example #1
0
        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)));
        }
Example #2
0
        public async Task <Result <HireResponse> > CreateHireAsync(CreateHireCommand request)
        {
            var validationResult = await BikeAndClientValidationAsync(request);

            if (validationResult.IsFaulted)
            {
                return(validationResult);
            }

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