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