public async Task <bool> AddReactionAsync(MessageReactionAddEventArgs e)
        {
            var reaction = new Reaction();

            reaction.reaction = e.Emoji.Name;
            reaction.user     = e.User.Username;
            reaction.time     = DateTimeOffset.Now.ToUnixTimeMilliseconds();

            var chat             = utilityService.GetChat(e.Message, e.Message.MentionedUsers);
            var conversationName = utilityService.GetConversationName(e.Message);
            var metadata         = utilityService.GetMetadata(e.Message);
            var reactionRequest  = new ReactionRequest {
                reaction = reaction, chat = chat, type = configuration.ChatType, conversationName = conversationName, metadata = metadata
            };

            var httpContent = utilityService.GetHttpContent(reactionRequest);
            var response    = await client.PutAsync(configuration.ApiUrl + "/api/reactionupdate", httpContent);

            response.EnsureSuccessStatusCode();

            var jsonResponse = await response.Content.ReadAsStringAsync();

            var success = JsonConvert.DeserializeObject <bool>(jsonResponse);

            return(success);
        }
Exemplo n.º 2
0
        public bool UpdateConversation(ReactionRequest reactionRequest)
        {
            if (reactionRequest.requestTime == null)
            {
                reactionRequest.requestTime = DateTime.Now;
            }

            var queueItem = new ConversationQueueItem {
                ConversationName = reactionRequest.conversationName, RequestTime = reactionRequest.requestTime
            };

            if (!ConversationTracker.requestQueue.Any(i => i.ConversationName == queueItem.ConversationName && i.RequestTime == queueItem.RequestTime))
            {
                ConversationTracker.requestQueue.Enqueue(queueItem);
            }

            ConversationQueueItem peekedQueueItem;

            if (ConversationTracker.requestQueue.TryPeek(out peekedQueueItem))
            {
                if (peekedQueueItem.ConversationName == queueItem.ConversationName && peekedQueueItem.RequestTime == queueItem.RequestTime)
                {
                    var updated = _updateDatabasesService.UpdateDatabases(reactionRequest);
                    ConversationTracker.requestQueue.TryDequeue(out peekedQueueItem);

                    return(updated);
                }
                CleanQueue();
            }

            return(Task.Delay(queueDelay).ContinueWith((task) => { return UpdateConversation(reactionRequest); }).Result);
        }
Exemplo n.º 3
0
 public bool Put([FromBody] ReactionRequest reaction)
 {
     if (_requestValidationService.ValidRequest(reaction))
     {
         reaction.requestTime = DateTime.Now;
         return(_queueService.UpdateConversation(reaction));
     }
     return(false);
 }
        public bool ValidRequest(ReactionRequest request)
        {
            if (request == null || request.reaction == null || request.chat == null || string.IsNullOrWhiteSpace(request.conversationName) || string.IsNullOrWhiteSpace(request.type))
            {
                return(false);
            }
            if (string.IsNullOrWhiteSpace(request.reaction.reaction) || string.IsNullOrWhiteSpace(request.reaction.user))
            {
                return(false);
            }
            if (string.IsNullOrWhiteSpace(request.chat.message) || string.IsNullOrWhiteSpace(request.chat.user))
            {
                return(false);
            }

            return(true);
        }
Exemplo n.º 5
0
        public bool UpdateDatabases(ReactionRequest reactionRequest)
        {
            var conversation = _conversationService.GetConversation(reactionRequest.conversationName, reactionRequest.type);
            var index        = conversation.responses.FindLastIndex(r => r.chat.user == reactionRequest.chat.user && r.chat.message == reactionRequest.chat.message);

            bool conversationUdpdated = false;

            if (index >= 0)
            {
                conversation.responses[index].chat.reactions.Add(reactionRequest.reaction);

                var analyzedConversation = _analyzationService.AnalyzeConversationAsync(conversation);
                conversationUdpdated = _covnersationUpdateService.UpdateConversation(analyzedConversation, reactionRequest.type);

                //TODO: update user's reactions //_userService.UpdateUsers(reactionRequest.reaction, conversation.responses[index]);
            }

            return(conversationUdpdated);
        }
Exemplo n.º 6
0
        public async Task <ActionResult <ReactionResponse> > PostReaction(long placeId, long reviewId, ReactionRequest reactionRequest)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var place  = _context.Places.Find(placeId);
            var review = _context.Reviews.Find(reviewId);

            if (place == null || review == null)
            {
                return(NotFound());
            }

            if (review.UserID == CurrentUserId)
            {
                return(BadRequest("You can't react to your own review."));
            }

            //var userAlreadyReacted = await _context.Reactions.AnyAsync(r => r.ReviewID == reviewId && r.UserID == CurrentUserId);
            var reaction = await _context.Reactions.FindAsync(reviewId, CurrentUserId);

            if (reaction != null)
            {
                //var reaction = _context.Reactions.Where(r => r.ReviewID == reviewId && r.UserID == CurrentUserId);
                _mapper.Map(reactionRequest, reaction);

                _context.Entry(reaction).State = EntityState.Modified;
            }
            else
            {
                reaction = _mapper.Map <Reaction>(reactionRequest);

                reaction.UserID   = CurrentUserId;
                reaction.ReviewID = reviewId;

                _context.Reactions.Add(reaction);
            }

            await _context.SaveChangesAsync();


            return(_mapper.Map <ReactionResponse>(reaction));
        }