public async Task MakeTeamReservation(TeamSession session) { var state = await _authenticationStateProvider.GetAuthenticationStateAsync(); var userId = (await _userManager.GetUserAsync(state.User)).Id; if (_teamService.GetTeam(session.TeamId).Limits.TryGetValue(TeamLimit.ActiveBookings, out var maxTeamReservations)) { await _reservationLock.WaitAsync(); try { var reservationsForUser = await _bookingStorage.GetReservationsFor(userId); if (reservationsForUser.Count(e => e.TeamId == session.TeamId && e.StartTime > DateTime.Now) < maxTeamReservations) { await _bookingStorage.AddReservation(userId, new UserReservation { StartTime = session.StartTime, TeamId = session.TeamId }); } else { return; } } finally { _reservationLock.Release(); } } else { await _bookingStorage.AddReservation(userId, new UserReservation { StartTime = session.StartTime, TeamId = session.TeamId }); } OnBookingsChanged(); }
public async Task CancelTeamReservation(TeamSession session) { await CancelUserReservation(new UserReservation { StartTime = session.StartTime, TeamId = session.TeamId }); }
private TimeSlot ConvertToTimeSlot(TeamSession session) { return new TimeSlot { Duration = _teamService.GetTeam(session.TeamId).Duration, StartTime = session.StartTime }; }