Пример #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();
        }
Пример #2
0
        public async Task AddReservation(string userId, UserReservation reservation)
        {
            await using var dbCtx = new BookingsDbContext(_dbContextOptions);
            var reservationEntity = new UserReservationEntity
            {
                StartTime = reservation.StartTime,
                TeamId    = reservation.TeamId,
                UserId    = userId,
                EndTime   = reservation.StartTime + _teamService.GetTeam(reservation.TeamId).Duration
            };

            dbCtx.UserReservations.Add(reservationEntity);
            await dbCtx.SaveChangesAsync();
        }
Пример #3
0
 public int GetFreeSpace(TimeSlot timeSlot)
 {
     var sessions = GetTeamSessionsActiveDuring(timeSlot);
     return _spaceSize - sessions.Sum(e => _teamService.GetTeam(e.TeamId).Limits.GetValueOrDefault(TeamLimit.Size));
 }