Exemple #1
0
        public async Task <IActionResult> StartRental([FromBody] CreateRentalResource resource)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState.GetErrorMessages()));
            }

            try
            {
                ValidateToken(resource.UserId.Value, resource.Token);
            }
            catch (Exception e) {
                return(Unauthorized(e.Message));
            }

            Vehicle availableVehicle = await _vehicleRepository.GetAvailableVehicleAsync(resource.VehicleType.Value);

            if (availableVehicle == null)
            {
                return(NotFound("No vehicles available"));
            }

            User client = await _userRepository.GetById(resource.UserId.Value);

            if (client == null)
            {
                return(NotFound("User doesn't exist"));
            }

            Rental rental = await FillRentalData(resource, availableVehicle);

            RentalRepositoryResponse result = await _rentalRepository.SaveAsync(rental);

            if (!result.Success)
            {
                return(BadRequest(result.Message));
            }

            SetVehicleAsRented(availableVehicle);

            RentalStartResource rentalResource = _mapper.Map <Rental, RentalStartResource>(result.Rental);

            rentalResource.UserName            = client.Name;
            rentalResource.VehicleLincesePlate = availableVehicle.LicensePlate;

            AddPointsToClient(client, availableVehicle);

            return(Ok(rentalResource));
        }
        public async Task <RentalRepositoryResponse> SaveAsync(Rental rental)
        {
            Dictionary <int, Rental> dict = FakeDB.RentalsTable();

            try
            {
                rental.Id       = dict.Count + 1;
                dict[rental.Id] = rental;
            }
            catch (Exception e)
            {
                return(new RentalRepositoryResponse(e.Message));
            }
            RentalRepositoryResponse response = new RentalRepositoryResponse(rental);

            return(response);
        }