Example #1
0
 /// <summary>
 /// Retunr the QuoteVoteUid To make it possible to vote using it
 /// </summary>
 /// <param name="quoteEvent"></param>
 /// <returns></returns>
 public async Task <String> ReceiveNewQuoteEvent(SlackEventRequestModel quoteEvent)
 {
     try
     {
         return(await processNewQuoteEvent(quoteEvent));
     }
     catch (global::System.Exception)
     {
         throw;
     }
 }
Example #2
0
 public IActionResult SlackVerification([FromBody] SlackEventRequestModel request)
 {
     try
     {
         return(Ok(_slackRepository.ProcessRequest(request)));
     }
     catch (Exception e)
     {
         _logger.LogError($"Erro ao receber evento do slack: {e}");
         return(BadRequest());
     }
 }
Example #3
0
        public async Task SendMessage(SlackEventRequestModel quote, string quoteVoteUid)
        {
            try
            {
                var message = $"Nova quote: '{quote.text}'; User para votar o id: {quoteVoteUid}!";
                MessageToChannelMode messageModel = await prepareMessageToChannelModel(message, quote.channel_id);

                await _slackApiHelper.SendMessageToChannel(messageModel);
            }
            catch (System.Exception e)
            {
                throw;
            }
        }
Example #4
0
        public async Task <IActionResult> Downvote([FromForm] SlackEventRequestModel upvote)
        {
            try
            {
                await _quotesRepository.DownvoteAsync(upvote);

                return(Ok());
            }
            catch (Exception e)
            {
                _logger.LogError($"Não foi possivel adicionar voto para quote: {e}");
                return(BadRequest());
            }
        }
Example #5
0
        private async Task upvoteQuoteTwiceTest()
        {
            using (var ctx = new ApplicationDbContext(options))
            {
                var repository = new QuoteRepository(ctx);
                SlackEventRequestModel upvoteRequest = await getSlackEventRequestModel();

                await repository.UpvoteAsync(upvoteRequest);

                await Assert.ThrowsAnyAsync <Exception>(
                    async() =>
                    await repository.UpvoteAsync(upvoteRequest)
                    );
            }
        }
Example #6
0
        private async Task upVoteTestSuccess(ApplicationDbContext ctx)
        {
            var repository = new QuoteRepository(ctx);
            SlackEventRequestModel upvoteRequest = await getSlackEventRequestModel();

            await repository.UpvoteAsync(upvoteRequest);

            var quoteInDb = await ctx.Quote.Include(q => q.Votes)
                            .FirstOrDefaultAsync();

            var vote = quoteInDb.Votes[0];

            Object.Equals(1, vote.Vote);
            Object.Equals(vote.UserSlackId, "SLACK");
        }
Example #7
0
        private async Task <SlackEventRequestModel> getSlackEventRequestModel()
        {
            var userId = await AddUser(false);

            var upvoter = await AddUser(true);

            var quoteVoteUid = await AddQuote(userId, upvoter);

            var upvoteRequest = new SlackEventRequestModel()
            {
                user_id = upvoter,
                text    = "1111",
            };

            return(upvoteRequest);
        }
Example #8
0
        public async Task DownvoteAsync(SlackEventRequestModel request)
        {
            try
            {
                var quote = await validadeVoteRequest(request);

                //To Do
                //Verify if user exists, if not request its information
                short voteValue = -1;
                await saveVote(request, voteValue, quote);
            }
            catch (Exception)
            {
                throw;
            }
        }
Example #9
0
        public async Task <IActionResult> AddQuote([FromForm] SlackEventRequestModel quote)
        {
            try
            {
                var quoteVoteUid = await _quotesRepository.ReceiveNewQuoteEvent(quote);

                await _slackRepository.SendMessage(quote, quoteVoteUid);

                return(Ok());
            }
            catch (Exception e)
            {
                _logger.LogError($"Não foi possivel adicionar quote: {e}");
                return(BadRequest());
            }
        }
Example #10
0
        public async Task TestVerification()
        {
            using (var ctx = new ApplicationDbContext(options))
            {
                var repository = new SlackRepository(ctx);
                var request    = new SlackEventRequestModel()
                {
                    challenge = "MAH_XALENDI",
                    token     = "MAH_TOQUIN",
                    type      = "url_verification"
                };

                var response = await repository.ProcessRequest(request);

                Assert.Equal(request.challenge, response);
            }
        }
Example #11
0
        private async Task saveQuote(SlackEventRequestModel quoteEvent, string quote, string authorId)
        {
            var snitchId = await _context.User
                           .FirstOrDefaultAsync(u => u.SlackId == quoteEvent.user_id);

            var quoteModel = new QuoteModel()
            {
                Content   = quote,
                Date      = DateTimeOffset.UtcNow,
                Upvotes   = 0,
                Downvotes = 0,
                SnitchId  = authorId,
                UserId    = authorId
            };
            await _context.Quote.AddAsync(quoteModel);

            await _context.SaveChangesAsync();
        }
Example #12
0
        private async Task <string> saveQuoteInDb(SlackEventRequestModel quoteEvent, string authorId, string content)
        {
            string quoteVoteUid = await getUniqueQuoteVoteId();

            var snitchId = _context.User.FirstOrDefault(u => u.SlackId == quoteEvent.user_id).UserId;
            var quote    = new QuoteModel()
            {
                Content      = content,
                SnitchId     = snitchId,
                UserId       = authorId,
                Date         = DateTimeOffset.Now,
                QuoteVoteUid = quoteVoteUid
            };
            await _context.AddAsync(quote);

            await _context.SaveChangesAsync();

            return(quoteVoteUid);
        }
Example #13
0
        private async Task <string> processNewQuoteEvent(SlackEventRequestModel quoteEvent)
        {
            string authorName = null;
            string authorId   = null;
            var    content    = quoteEvent.text;

            if (string.IsNullOrWhiteSpace(quoteEvent.text))
            {
                throw new Exception("Quote vazio");
            }
            var byPosition = quoteEvent.text.LastIndexOf("by:");

            if (byPosition > 0)
            {
                var authorString = quoteEvent.text.Split("by:");
                if (string.IsNullOrWhiteSpace(authorString[0]))
                {
                    throw new Exception("Quote vazio");
                }

                content = authorString[0];

                if (authorString.Count() > 2)
                {
                    authorName = null;
                }
                else
                {
                    authorName = authorString[1].Replace("@", "").Replace(" ", "");;

                    var author = await _context.User.FirstOrDefaultAsync(
                        u => u.Name == authorName || u.RealName == authorName
                        );

                    if (author != null)
                    {
                        authorId = author.UserId;
                    }
                }
            }
            return(await saveQuoteInDb(quoteEvent, authorId, content));
        }
Example #14
0
        private async Task addNewQuoteEventTest(string input, string text, string author)
        {
            using (var ctx = new ApplicationDbContext(options))
            {
                var repository  = new QuoteRepository(ctx);
                var addedUserId = await AddUser(false);

                var snitchId = await AddUser(true);

                var userId = String.IsNullOrEmpty(author) ? null : addedUserId;

                var slackEvent = new SlackEventRequestModel()
                {
                    user_id = snitchId,
                    text    = input,
                };

                await assertAddNewQuoteEventTst(text, ctx, repository, userId, snitchId, slackEvent);
            }
        }
Example #15
0
        private async Task saveVote(SlackEventRequestModel request, short voteValue, QuoteModel quote)
        {
            var vote = new VoteModel()
            {
                QuoteVoteUid = request.text,
                UserSlackId  = request.user_id,
                Vote         = voteValue,
                QuoteId      = quote.QuoteId
            };

            if (vote.Vote > 0)
            {
                quote.Upvotes++;
            }
            else
            {
                quote.Downvotes++;
            }
            await _context.AddAsync(vote);

            await _context.SaveChangesAsync();
        }
Example #16
0
        private async Task <QuoteModel> validadeVoteRequest(SlackEventRequestModel request)
        {
            if (request.text.Split(' ').Count() > 1)
            {
                throw new Exception($"Requeste invalido: {request.text}");
            }

            var quote = await _context.Quote.
                        FirstOrDefaultAsync(v => v.QuoteVoteUid == request.text);

            if (quote is null)
            {
                throw new Exception($"Quote não existe id:{request.text}");
            }
            if (await _context.VoteModels.AnyAsync(v => v.QuoteVoteUid == request.text &&
                                                   v.UserSlackId == request.user_id))
            {
                throw new Exception(
                          $"Usuario ja votou para essa quote Uid:{request.user_id} {request.text}");
            }
            return(quote);
        }
Example #17
0
        public async Task <string> ProcessRequest(SlackEventRequestModel request)
        {
            try
            {
                string response = null;
                switch (request.type)
                {
                case "url_verification":
                    response = request.challenge;
                    break;

                case "message":
                    break;

                default:
                    break;
                }
                return(response);
            }
            catch (System.Exception)
            {
                throw;
            }
        }
Example #18
0
 private async Task processEvent(SlackEventRequestModel quoteEvent)
 {
     throw new System.NotImplementedException();
 }
Example #19
0
        private static async Task assertAddNewQuoteEventTst(string text, ApplicationDbContext ctx, QuoteRepository repository, string userId, string snitchId, SlackEventRequestModel slackEvent)
        {
            await repository.ReceiveNewQuoteEvent(slackEvent);

            var quoteInDb = await ctx.Quote.FirstOrDefaultAsync();


            Assert.Equal(userId, quoteInDb.UserId);
            Assert.Equal(snitchId, quoteInDb.SnitchId);
            Assert.Equal(text, quoteInDb.Content);
        }
Example #20
0
 public async Task <string> ProcessRequest(SlackEventRequestModel request)
 {
     throw new System.NotImplementedException();
 }