public async Task ReserveSpotAsync(ReserveParams param, int userId)
        {
            var spot = await GetParkingSpotAsync(param.ParkingId, param.SpotNumber);

            if (!spot.IsAvailableDuring(param.From, param.To))
            {
                throw new ParkingSpotAlreadyReservedException(param.ParkingId, (await parkingRepository.GetByIdAsync(param.ParkingId)).Name, param.SpotNumber);
            }
            var reservation = new Reservation
            {
                ReservedBy                = await userRepository.GetByIdAsync(userId),
                ReservedFrom              = param.From.ToUniversalTime(),
                ReservedUntil             = param.To.ToUniversalTime(),
                VehicleRegistrationNumber = param.VehicleRegistrationNumber
            };

            await AddAsync(reservation);

            spot.Reservations.Add(reservation);
            await parkingSpotRepository.UpdateAsync(spot);
        }
        public async Task Reserve(ReserveParams param)
        {
            await reservationRepository.ReserveSpotAsync(param, HttpContext.User.GetId());

            await uow.CommitAsync();
        }