コード例 #1
0
        private async Task <string> ReturnMessage(LimitHistory limitHistory)
        {
            var result = string.Empty;

            if (limitHistory.Balance >= limitHistory.LimitValue)
            {
                result = "Você já gastou mais do que podia esse mês! 😢";
            }
            else
            {
                var percent = 100 - ((limitHistory.Balance * 100) / limitHistory.LimitValue);
                percent = Math.Round(percent);
                if (percent == 0)
                {
                    result = "Você acaba de atingir a cota do mês! 😢";
                }
                else
                {
                    result = $"Você está a {percent}% de atingir a cota!";
                }
            }
            return(result);
        }
コード例 #2
0
        public async Task <HttpResponseMessage> ReceiveMessage()
        {
            var result  = new HttpResponseMessage(HttpStatusCode.Accepted);
            var request = await Request.Content.ReadAsStringAsync();

            var requestMessage = JsonConvert.DeserializeObject <Message>(request);
            var queryRequest   = await _blipAiMessageTranslator.TranslateMessageAsync(request);

            var queryAppService = _apiAiAppServiceFactory.CreateQueryAppService(_urlApiAi,
                                                                                _apiKey);
            var queryResponse = await queryAppService.PostQueryAsync(queryRequest);

            if (queryResponse.Result.Action.Equals("savevalue"))
            {
                using (var db = new ControlCashDbContext())
                {
                    var userId = requestMessage.From.Name.Split('@')[0];

                    var user = db.UserRepository.Find(a => a.UserIdentifier.Equals(userId));

                    var value = decimal.Parse(queryResponse.Result.Parameters["number"].ToString());
                    if (user != null)
                    {
                        var wallet = db.WalletRepository.Find(a => a.WalletId == user.WalletId);
                        if (wallet != null)
                        {
                            if (queryResponse.Result.Contexts[0].Parameters["Type"].ToString().Equals("Entrada"))
                            {
                                wallet.Balance += value;
                                await db.SaveChanges();

                                db.MovimentHistoryRepository.Add(new Entities.MovimentHistory()
                                {
                                    Date        = DateTime.Now,
                                    Description = queryResponse.Result.Contexts[0].Parameters["TagEntrada.original"].ToString(),
                                    UserId      = user.UserId,
                                    Value       = value
                                });
                                await db.SaveChanges();
                            }
                            else
                            {
                                wallet.Balance -= value;
                                await db.SaveChanges();

                                var tagSaida = queryResponse.Result.Contexts[0].Parameters["TagSaida.original"].ToString();
                                if (!string.IsNullOrEmpty(tagSaida))
                                {
                                    var limit        = db.LimitRepository.Find(a => a.TagDescription.Equals(tagSaida));
                                    var limitHistory = db.LimitHistoryRepository.Find(a => a.Month == DateTime.Now.Month && a.Year == DateTime.Now.Year && a.TagDescription.Equals(tagSaida));
                                    if (limit != null)
                                    {
                                        var text = string.Empty;
                                        if (limitHistory != null)
                                        {
                                            limitHistory.Balance += value;
                                            await db.SaveChanges();

                                            var requestSendMessage = new Message()
                                            {
                                                Content = await ReturnMessage(limitHistory),
                                                From    = requestMessage.To,
                                                Id      = Guid.NewGuid().ToString(),
                                                To      = requestMessage.From
                                            };
                                            await _messageAppService.SendMessageAsync(requestSendMessage);
                                        }
                                        else
                                        {
                                            limitHistory = new LimitHistory()
                                            {
                                                Balance        = 0,
                                                LimitValue     = limit.LimitValue,
                                                Month          = (short)DateTime.Now.Month,
                                                Year           = (short)DateTime.Now.Year,
                                                TagDescription = tagSaida
                                            };

                                            limitHistory.Balance += value;
                                            await db.SaveChanges();

                                            var requestSendMessage = new Message()
                                            {
                                                Content = await ReturnMessage(limitHistory),
                                                From    = requestMessage.To,
                                                Id      = Guid.NewGuid().ToString(),
                                                To      = requestMessage.From
                                            };
                                            await _messageAppService.SendMessageAsync(requestSendMessage);

                                            db.LimitHistoryRepository.Add(limitHistory);
                                            await db.SaveChanges();
                                        }
                                    }
                                }
                                wallet.Balance -= value;
                                await db.SaveChanges();

                                db.MovimentHistoryRepository.Add(new Entities.MovimentHistory()
                                {
                                    Date        = DateTime.Now,
                                    Description = queryResponse.Result.Contexts[0].Parameters["TagSaida.original"].ToString(),
                                    UserId      = user.UserId,
                                    Value       = value
                                });
                                await db.SaveChanges();
                            }
                        }
                        else
                        {
                            var requestSendMessage = new Message()
                            {
                                Content = "Desculpa mas não existe uma conta criada para você! Alguém entrará em contato com você para verificar!",
                                From    = requestMessage.To,
                                Id      = Guid.NewGuid().ToString(),
                                To      = requestMessage.From
                            };
                            await _messageAppService.SendMessageAsync(requestSendMessage);
                        }
                    }
                    else
                    {
                        db.UserRepository.Add(new Entities.User()
                        {
                            UserIdentifier = userId,
                            Wallet         = new Wallet()
                            {
                                Balance = 0
                            }
                        });
                        await db.SaveChanges();

                        var requestSendMessage = new Message()
                        {
                            Content = "Sua conta foi criada com sucesso!",
                            From    = requestMessage.To,
                            Id      = Guid.NewGuid().ToString(),
                            To      = requestMessage.From
                        };
                        await _messageAppService.SendMessageAsync(requestSendMessage);
                    }
                }
            }

            var documents = await _blipAiMessageTranslator.TranslateAsync(queryResponse);

            foreach (var item in documents)
            {
                var requestSendMessage = new Message()
                {
                    Content = item,
                    From    = requestMessage.To,
                    Id      = Guid.NewGuid().ToString(),
                    To      = requestMessage.From
                };
                await _messageAppService.SendMessageAsync(requestSendMessage);

                Thread.Sleep(500);
            }
            return(result);
        }