Exemple #1
0
        /// <inheritdoc />
        public async Task DeleteAsync(EmojiSearchCriteria criteria)
        {
            if (criteria is null)
            {
                throw new ArgumentNullException(nameof(criteria));
            }

            var entities = ModixContext.Emoji.FilterBy(criteria);

            ModixContext.RemoveRange(entities);
            await ModixContext.SaveChangesAsync();
        }
Exemple #2
0
        /// <inheritdoc />
        public async Task <IReadOnlyCollection <EmojiSummary> > SearchSummariesAsync(EmojiSearchCriteria criteria)
        {
            if (criteria is null)
            {
                throw new ArgumentNullException(nameof(criteria));
            }

            var emoji = await ModixContext.Emoji.AsNoTracking()
                        .FilterBy(criteria)
                        .AsExpandable()
                        .Select(EmojiSummary.FromEntityProjection)
                        .ToArrayAsync();

            return(emoji);
        }
Exemple #3
0
        /// <inheritdoc />
        public async Task <IReadOnlyDictionary <EphemeralEmoji, int> > GetCountsAsync(EmojiSearchCriteria criteria)
        {
            if (criteria is null)
            {
                throw new ArgumentNullException(nameof(criteria));
            }

            var emoji = await ModixContext.Emoji.AsNoTracking()
                        .FilterBy(criteria)
                        .GroupBy(x => new
            {
                x.EmojiId,
                EmojiName = x.EmojiId == null
                        ? x.EmojiName
                        : null
            },
                                 x => new { x.EmojiId, x.EmojiName, x.IsAnimated, x.Timestamp })
                        .ToArrayAsync();

            var counts = emoji.ToDictionary(
                x =>
            {
                var mostRecentEmoji = x.OrderByDescending(y => y.Timestamp).First();
                return(EphemeralEmoji.FromRawData(mostRecentEmoji.EmojiName, mostRecentEmoji.EmojiId, mostRecentEmoji.IsAnimated));
            },
                x => x.Count());

            return(counts);
        }