예제 #1
0
        public async Task <ReactionShort> RemoveAsync(string publicationId, string userId)
        {
            var result = await reactionsApi.DeleteByAuthorAsync(
                KeysBuilder.PublicationReactionsKey(publicationId),
                userId);

            return(ToReactionShort(result, null));
        }
예제 #2
0
        public async Task DeleteAsync(string publicationId)
        {
            await Reactions.RemoveManyAsync(KeysBuilder.PublicationReactionsKey(publicationId));

            await Comments.DeleteManyAsync(publicationId);

            await publicationsApi.DeleteAsync(publicationId);
        }
예제 #3
0
        public async Task <ReactionShort> AddOrUpdateAsync(string publicationId, ReactionType reactionType, string userId)
        {
            var result = await reactionsApi.UpsertAsync(
                KeysBuilder.PublicationReactionsKey(publicationId),
                reactionType.ToString(),
                userId);

            return(ToReactionShort(result, new UserReaction(reactionType)));
        }
예제 #4
0
        private async Task <Dictionary <string, Dictionary <ReactionType, int> > > LoadReactionsAsync(IEnumerable <string> publicationIds)
        {
            var keys      = publicationIds.Select(KeysBuilder.PublicationReactionsKey).ToList();
            var query     = new ReactionsQuery(keys);
            var reactions = await reactionsApi.GetGroupedReactionsAsync(query);

            return(publicationIds
                   .ToDictionary(id => id, id =>
            {
                var r = reactions.ContainsKey(KeysBuilder.PublicationReactionsKey(id))
                        ? reactions[KeysBuilder.PublicationReactionsKey(id)]
                        : new Dictionary <string, int>();
                return r.Keys
                .Select(k => (Enum.Parse <ReactionType>(k), r[k]))
                .ToDictionary(o => o.Item1, o => o.Item2);
            }));