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); }