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