public Task <RecordsPage <InfractionSummary> > SearchInfractionsAsync(InfractionSearchCriteria searchCriteria, IEnumerable <SortingCriteria> sortingCriteria, PagingCriteria pagingCriteria) { _authorizationService.RequireClaims(AuthorizationClaim.ModerationRead); return(_infractionRepository.SearchSummariesPagedAsync(searchCriteria, sortingCriteria, pagingCriteria)); }
/// <inheritdoc /> public Task <DateTimeOffset?> ReadExpiresFirstOrDefaultAsync(InfractionSearchCriteria searchCriteria, IEnumerable <SortingCriteria> sortingCriteria = null) => ModixContext.Infractions.AsNoTracking() .FilterInfractionsBy(searchCriteria) .Select(InfractionSummary.FromEntityProjection) .SortBy(sortingCriteria, InfractionSummary.SortablePropertyMap) .Select(x => x.Expires) .FirstOrDefaultAsync();
public Task <IReadOnlyCollection <InfractionSummary> > SearchInfractionsAsync( InfractionSearchCriteria searchCriteria, IEnumerable <SortingCriteria>?sortingCriteria = null) { _authorizationService.RequireClaims(AuthorizationClaim.ModerationRead); return(_infractionRepository.SearchSummariesAsync(searchCriteria, sortingCriteria)); }
public async Task <bool> AnyInfractionsAsync(InfractionSearchCriteria criteria) { if (criteria is null) { throw new ArgumentNullException(nameof(criteria)); } return(await _infractionRepository.AnyAsync(criteria)); }
public async Task <bool> AnyInfractionsAsync(InfractionSearchCriteria criteria) { AuthorizationService.RequireClaims(AuthorizationClaim.ModerationRead); if (criteria is null) { throw new ArgumentNullException(nameof(criteria)); } return(await InfractionRepository.AnyAsync(criteria)); }
/// <inheritdoc /> public Task <bool> AnyAsync(InfractionSearchCriteria criteria) => ModixContext.Infractions.AsNoTracking() .FilterBy(criteria) .AnyAsync();
/// <inheritdoc /> public async Task <IDictionary <InfractionType, int> > GetInfractionCountsAsync(InfractionSearchCriteria searchCriteria) { // TODO: Group by here is not supported server side right now, should be refactored var infractions = await ModixContext.Infractions .AsNoTracking() .FilterBy(searchCriteria) .ToArrayAsync(); var infractionGrouping = infractions .GroupBy(x => x.Type); //Initialize the returned dictionary so we always have all infraction types present var ret = Enum.GetValues(typeof(InfractionType)).Cast <InfractionType>() .ToDictionary(x => x, _ => 0); foreach (var group in infractionGrouping) { ret[group.Key] = group.Count(); } return(ret); }
public static IQueryable <InfractionEntity> FilterInfractionsBy(this IQueryable <InfractionEntity> query, InfractionSearchCriteria criteria) { var longGuildId = (long?)criteria?.GuildId; var longSubjectId = (long?)criteria?.SubjectId; var longCreatedById = (long?)criteria?.CreatedById; return(query .FilterBy( x => x.GuildId == longGuildId, longGuildId != null) .FilterBy( x => criteria.Types.Contains(x.Type), criteria?.Types?.Any() ?? false) .FilterBy( x => x.SubjectId == longSubjectId, longSubjectId != null) .FilterBy( x => x.CreateAction.Created >= criteria.CreatedRange.Value.From, criteria?.CreatedRange?.From != null) .FilterBy( x => x.CreateAction.Created <= criteria.CreatedRange.Value.To, criteria?.CreatedRange?.To != null) .FilterBy( x => x.CreateAction.CreatedById == longCreatedById, longCreatedById != null) .FilterBy( x => (x.RescindActionId != null) == criteria.IsRescinded, criteria?.IsRescinded != null) .FilterBy( x => (x.DeleteActionId != null) == criteria.IsDeleted, criteria?.IsDeleted != null) .FilterBy( x => (x.CreateAction.Created + x.Duration) >= criteria.ExpiresRange.Value.From, criteria?.ExpiresRange?.From != null) .FilterBy( x => (x.CreateAction.Created + x.Duration) <= criteria.ExpiresRange.Value.To, criteria?.ExpiresRange?.To != null)); }
/// <inheritdoc /> public async Task <IReadOnlyCollection <InfractionSummary> > SearchSummariesAsync(InfractionSearchCriteria searchCriteria, IEnumerable <SortingCriteria> sortingCriteria) => await SearchInfractionsBy(ModixContext.Infractions.AsNoTracking(), searchCriteria) .SortBy(sortingCriteria, InfractionSummary.SortablePropertyMap) .ToArrayAsync();
/// <inheritdoc /> private static IQueryable <InfractionSummary> SearchInfractionsBy(IQueryable <InfractionEntity> query, InfractionSearchCriteria criteria) => (criteria == null) ? query .Select(InfractionSummary.FromEntityProjection) : query .FilterBy( x => criteria.Types.Contains(x.Type), (criteria.Types != null) && criteria.Types.Any()) .FilterBy( x => x.SubjectId == criteria.SubjectId.Value, (criteria.Types != null) && criteria.Types.Any()) .FilterBy( x => x.CreateAction.CreatedById == criteria.CreatedById.Value, criteria.CreatedById.HasValue) .FilterBy( x => x.RescindActionId.HasValue == criteria.IsRescinded.Value, criteria.IsRescinded.HasValue) .Select(InfractionSummary.FromEntityProjection) .FilterBy( x => x.CreateAction.Created >= criteria.CreatedRange.Value.From.Value, (criteria.CreatedRange.HasValue) && (criteria.CreatedRange.Value.From.HasValue)) .FilterBy( x => x.CreateAction.Created <= criteria.CreatedRange.Value.To.Value, (criteria.CreatedRange.HasValue) && (criteria.CreatedRange.Value.To.HasValue)) .FilterBy( x => x.IsExpired == criteria.IsExpired.Value, criteria.IsExpired.HasValue);
/// <inheritdoc /> public async Task <ServiceResult <RecordsPage <InfractionSummary> > > SearchInfractionsAsync(InfractionSearchCriteria searchCriteria, IEnumerable <SortingCriteria> sortingCriteria, PagingCriteria pagingCriteria) => await AuthorizationService.CheckClaims(AuthorizationClaim.ModerationRead) .ShortCircuitAsync(InfractionRepository.SearchSummariesPagedAsync(searchCriteria, sortingCriteria, pagingCriteria));
/// <inheritdoc /> public async Task <ServiceResult <IReadOnlyCollection <InfractionSummary> > > SearchInfractionsAsync(InfractionSearchCriteria searchCriteria, IEnumerable <SortingCriteria> sortingCriteria = null) => await AuthorizationService.CheckClaims(AuthorizationClaim.ModerationRead) .ShortCircuitAsync(InfractionRepository.SearchSummariesAsync(searchCriteria, sortingCriteria));