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