Exemplo n.º 1
0
        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();
        }
Exemplo n.º 2
0
 public async Task CancelTeamReservation(TeamSession session)
 {
     await CancelUserReservation(new UserReservation { StartTime = session.StartTime, TeamId = session.TeamId });
 }
Exemplo n.º 3
0
 private TimeSlot ConvertToTimeSlot(TeamSession session)
 {
     return new TimeSlot { Duration = _teamService.GetTeam(session.TeamId).Duration, StartTime = session.StartTime };
 }