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