Exemplo n.º 1
0
        public Task <RecordsPage <InfractionSummary> > SearchInfractionsAsync(InfractionSearchCriteria searchCriteria,
                                                                              IEnumerable <SortingCriteria> sortingCriteria, PagingCriteria pagingCriteria)
        {
            _authorizationService.RequireClaims(AuthorizationClaim.ModerationRead);

            return(_infractionRepository.SearchSummariesPagedAsync(searchCriteria, sortingCriteria, pagingCriteria));
        }
Exemplo n.º 2
0
 /// <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();
Exemplo n.º 3
0
        public Task <IReadOnlyCollection <InfractionSummary> > SearchInfractionsAsync(
            InfractionSearchCriteria searchCriteria, IEnumerable <SortingCriteria>?sortingCriteria = null)
        {
            _authorizationService.RequireClaims(AuthorizationClaim.ModerationRead);

            return(_infractionRepository.SearchSummariesAsync(searchCriteria, sortingCriteria));
        }
Exemplo n.º 4
0
        public async Task <bool> AnyInfractionsAsync(InfractionSearchCriteria criteria)
        {
            if (criteria is null)
            {
                throw new ArgumentNullException(nameof(criteria));
            }

            return(await _infractionRepository.AnyAsync(criteria));
        }
Exemplo n.º 5
0
        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));
        }
Exemplo n.º 6
0
 /// <inheritdoc />
 public Task <bool> AnyAsync(InfractionSearchCriteria criteria)
 => ModixContext.Infractions.AsNoTracking()
 .FilterBy(criteria)
 .AnyAsync();
Exemplo n.º 7
0
        /// <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);
        }
Exemplo n.º 8
0
        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));
        }
Exemplo n.º 9
0
 /// <inheritdoc />
 public async Task <IReadOnlyCollection <InfractionSummary> > SearchSummariesAsync(InfractionSearchCriteria searchCriteria, IEnumerable <SortingCriteria> sortingCriteria)
 => await SearchInfractionsBy(ModixContext.Infractions.AsNoTracking(), searchCriteria)
 .SortBy(sortingCriteria, InfractionSummary.SortablePropertyMap)
 .ToArrayAsync();
Exemplo n.º 10
0
 /// <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);
Exemplo n.º 11
0
 /// <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));
Exemplo n.º 12
0
 /// <inheritdoc />
 public async Task <ServiceResult <IReadOnlyCollection <InfractionSummary> > > SearchInfractionsAsync(InfractionSearchCriteria searchCriteria, IEnumerable <SortingCriteria> sortingCriteria = null)
 => await AuthorizationService.CheckClaims(AuthorizationClaim.ModerationRead)
 .ShortCircuitAsync(InfractionRepository.SearchSummariesAsync(searchCriteria, sortingCriteria));