示例#1
0
        public async Task <Gamespace[]> List(GamespaceSearch search, string subjectId, bool sudo, CancellationToken ct = default(CancellationToken))
        {
            var query = (sudo && search.WantsAll)
                ? _store.List(search.Term)
                : _store.ListByUser(subjectId)
            ;

            if (search.WantsActive)
            {
                var ts = DateTimeOffset.UtcNow;
                query = query.Where(g =>
                                    g.EndTime <DateTimeOffset.MinValue.AddDays(1) &&
                                               g.ExpirationTime> ts
                                    );
            }

            query = query.OrderByDescending(g => g.WhenCreated);

            if (search.Skip > 0)
            {
                query = query.Skip(search.Skip);
            }

            if (search.Take > 0)
            {
                query = query.Take(search.Take);
            }

            return(Mapper.Map <Gamespace[]>(
                       await query.ToArrayAsync()
                       ));
        }
示例#2
0
        public async Task <Gamespace[]> ListAll(CancellationToken ct = default(CancellationToken))
        {
            if (!User.IsAdmin)
            {
                throw new InvalidOperationException();
            }

            var list = await _gamespaceStore.List()
                       .Include(g => g.Players)
                       .ThenInclude(p => p.Person)
                       .ToArrayAsync(ct);

            return(Mapper.Map <Gamespace[]>(list));
        }
示例#3
0
        public async Task EndExpired()
        {
            var ts = DateTimeOffset.UtcNow;

            var unended = await _gamespaceStore.List()
                          .Where(g => g.EndTime == DateTimeOffset.MinValue)
                          .ToListAsync()
            ;

            var expired = unended
                          .Where(g =>
                                 g.ExpirationTime.AddMinutes(g.CleanupGraceMinutes) < ts
                                 )
                          .ToArray()
            ;

            foreach (var gs in expired)
            {
                gs.EndTime = gs.ExpirationTime;
            }

            await _gamespaceStore.Update(expired);
        }