public HttpResponseMessage ConfirmaEmail(string token)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    var confirmEmail = _confirEmailRepo.GetByToken(token);
                    if (confirmEmail != null)
                    {
                        var user = _UserRepo.GetById(confirmEmail.Usuario_Id);
                        user.EmailConfirmado = true;
                        _UserRepo.Update(user);

                        _signalContext.Clients.User("anonimo").EmailConfirmado(token);

                        var response   = Request.CreateResponse(HttpStatusCode.Moved);
                        var domainName = Request.RequestUri.Scheme + "://" + Request.RequestUri.Host;
                        response.Headers.Location = new Uri(domainName + "/usuario/Register/EmailConfirmado");
                        return(response);
                    }
                }
                var errorObj = ModelStateErrors.DisplayModelStateError(ModelState);
                return(Request.CreateResponse(HttpStatusCode.NotAcceptable, errorObj, "text/plain"));
            }
            catch (Exception ex)
            {
                return(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, ex.Message));
            }
        }
Пример #2
0
 public HttpResponseMessage EmailTrocaSMTP(UpdateSmtpViewModel model)
 {
     try
     {
         if (ModelState.IsValid)
         {
             var envioEmail = new EnvioEmail(_ServerConfigRepo);
             var domainName = Request.RequestUri.Scheme + "://" + Request.RequestUri.Host;
             envioEmail.EmailTrocaSMTP(domainName, model.SmtpAdress, model.SmtpPort, model.SmtpUsername, model.SmtpPassword);
             return(Request.CreateResponse(HttpStatusCode.OK));
         }
         else
         {
             var errorObj = ModelStateErrors.DisplayModelStateError(ModelState);
             return(Request.CreateResponse(HttpStatusCode.NotAcceptable, errorObj, "text/plain"));
         }
     }
     catch (SmtpException ex)
     {
         return(Request.CreateResponse(HttpStatusCode.InternalServerError, "Não foi possível authenticar este email, verifique sua senha e as configurações."));
     }
     catch (Exception ex)
     {
         return(Request.CreateResponse(HttpStatusCode.InternalServerError, ex.Message));
     }
 }
        public HttpResponseMessage ReenviarEmail(string token)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    var confirmEmail = _confirEmailRepo.GetByToken(token);
                    if (confirmEmail != null)
                    {
                        var domainName = Request.RequestUri.Scheme + "://" + Request.RequestUri.Authority;


                        var envioEmail = new EnvioEmail(_ServerConfigRepo);
                        var msgEmail   = envioEmail.EmailCadastro(domainName, token, confirmEmail.Usuario.Email);
                        return(Request.CreateResponse(HttpStatusCode.OK, msgEmail));
                    }
                }
                var errorObj = ModelStateErrors.DisplayModelStateError(ModelState);
                return(Request.CreateResponse(HttpStatusCode.NotAcceptable, errorObj, "text/plain"));
            }
            catch (Exception ex)
            {
                return(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, ex.Message));
            }
        }
 public HttpResponseMessage MudarSenha([FromBody] AlterarSenhaViewModel model)
 {
     try
     {
         if (model == null)
         {
             return(Request.CreateResponse(HttpStatusCode.NotAcceptable, "Campos Inválidos", "text/plain"));
         }
         if (ModelState.IsValid)
         {
             var userid = int.Parse(Helper.GetJWTPayloadValue(Request, "id"));
             var user   = _UserRepo.GetById(userid);
             if (Hashing.ValidatePassword(model.SenhaAntiga, user.Password))
             {
                 user.Password = Hashing.HashPassword(model.NovaSenha);
                 _UserRepo.Update(user);
                 return(Request.CreateResponse(HttpStatusCode.OK, "Senha Alterada com Successo", "text/plain"));
             }
             return(Request.CreateResponse(HttpStatusCode.NotAcceptable, "Senha Antiga Inválida", "text/plain"));
         }
         var errorObj = ModelStateErrors.DisplayModelStateError(ModelState);
         return(Request.CreateResponse(HttpStatusCode.NotAcceptable, errorObj, "text/plain"));
     }
     catch (Exception ex)
     {
         return(Request.CreateResponse(HttpStatusCode.InternalServerError, ex.Message));
     }
 }
 public HttpResponseMessage ComprarBNB(ComprarBNBViewModel ViewModel)
 {
     try
     {
         if (ViewModel == null)
         {
             return(Request.CreateResponse(HttpStatusCode.NotAcceptable, "Campos Inválidos", "text/plain"));
         }
         if (ModelState.IsValid)
         {
             var userId        = int.Parse(Helper.GetJWTPayloadValue(Request, "id"));
             var user          = _UserRepo.GetById(userId);
             var BinanceResult = BinanceRestApi.ComprarBNB(user.BinanceAPIKey, user.BinanceAPISecret, ViewModel.qtd);
             if (BinanceResult.IsSuccessStatusCode)
             {
                 return(Request.CreateResponse(HttpStatusCode.OK));
             }
             else
             {
                 var BinanceerrorObj = Helper.GetBinanceErrorObj(BinanceResult);
                 Logs.LogOrdem(user.Id + " (" + user.Email + ") => Type (Compar BNB Erro)" + " code => " + BinanceerrorObj.code + " motivo => " + BinanceerrorObj.msg);
                 return(Request.CreateResponse(HttpStatusCode.BadRequest, BinanceerrorObj));
             }
         }
         var modelstateError = ModelStateErrors.DisplayModelStateError(ModelState);
         return(Request.CreateResponse(HttpStatusCode.NotAcceptable, modelstateError, "text/plain"));
     }
     catch (Exception ex)
     {
         return(Request.CreateResponse(HttpStatusCode.InternalServerError, ex.Message));
     }
 }
 public HttpResponseMessage TestKeys(SetKeysViewModel ViewModel)
 {
     try
     {
         if (ViewModel == null)
         {
             return(Request.CreateResponse(HttpStatusCode.NotAcceptable, "Campos Inválidos", "text/plain"));
         }
         if (ModelState.IsValid)
         {
             var BinanceResult = BinanceRestApi.GetAccountInformation(ViewModel.binanceKey, ViewModel.binanceSecret);
             if (BinanceResult.IsSuccessStatusCode)
             {
                 return(Request.CreateResponse(HttpStatusCode.OK));
             }
             else
             {
                 var BinanceerrorObj = Helper.GetBinanceErrorObj(BinanceResult);
                 return(Request.CreateResponse(HttpStatusCode.BadRequest, BinanceerrorObj));
             }
         }
         var modelstateError = ModelStateErrors.DisplayModelStateError(ModelState);
         return(Request.CreateResponse(HttpStatusCode.NotAcceptable, modelstateError, "text/plain"));
     }
     catch (Exception ex)
     {
         return(Request.CreateResponse(HttpStatusCode.InternalServerError, ex.Message));
     }
 }
 public HttpResponseMessage Delete(int id)
 {
     try
     {
         if (ModelState.IsValid)
         {
             var userId          = int.Parse(Helper.GetJWTPayloadValue(Request, "id"));
             var user            = _UserRepo.GetById(userId);
             var chamadarecusada = new ChamadasRecusadas()
             {
                 HoraRecusada = DateTime.UtcNow,
                 Chamada_ID   = id,
                 Usuario_ID   = userId
             };
             _ChamadasRecusadasRepo.Add(chamadarecusada);
             _signalContext.Clients.User(userId.ToString()).EncerrarChamada(id);
             return(Request.CreateResponse(HttpStatusCode.OK, chamadarecusada));
         }
         var modelstateError = ModelStateErrors.DisplayModelStateError(ModelState);
         return(Request.CreateResponse(HttpStatusCode.NotAcceptable, modelstateError, "text/plain"));
     }
     catch (Exception ex)
     {
         return(Request.CreateResponse(HttpStatusCode.BadRequest, ex.Message));
     }
 }
 public HttpResponseMessage recusar([FromBody] AceitarEdicaoViewModel model)
 {
     try
     {
         if (model == null)
         {
             return(Request.CreateResponse(HttpStatusCode.NotAcceptable, "Campos Inválidos", "text/plain"));
         }
         if (ModelState.IsValid)
         {
             var userid         = int.Parse(Helper.GetJWTPayloadValue(Request, "id"));
             var user           = _UserRepo.GetById(userid);
             var chamadaEditada = new EdicaoAceita
             {
                 Usuario_Id        = user.Id,
                 TipoEdicao_ID     = 2,
                 DataCadastro      = DateTime.UtcNow,
                 ChamadaEditada_ID = model.EdicaoId,
                 Chamada_ID        = model.ChamadaId
             };
             _EdicaoAceitaRepo.Add(chamadaEditada);
             return(Request.CreateResponse(HttpStatusCode.OK, chamadaEditada));
         }
         var modelstateError = ModelStateErrors.DisplayModelStateError(ModelState);
         return(Request.CreateResponse(HttpStatusCode.NotAcceptable, modelstateError, "text/plain"));
     }
     catch (Exception ex)
     {
         return(Request.CreateResponse(HttpStatusCode.InternalServerError, ex.Message));
     }
 }
Пример #9
0
        public HttpResponseMessage Delete(int id)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    var userId = int.Parse(Helper.GetJWTPayloadValue(Request, "id"));
                    var user   = _UserRepo.GetById(userId);
                    var ordem  = _OrdemRepo.GetWith_Chamada_and_Symbol(id);

                    var res = BinanceRestApi.CancelarEntrada(user.BinanceAPIKey, user.BinanceAPISecret, ordem.Chamada.Symbol.symbol, ordem.OrderID);
                    if (res.IsSuccessStatusCode)
                    {
                        ordem.BinanceStatus_Id      = 4;
                        ordem.OrdemStatus_Id        = 4;
                        ordem.DataCancelamento      = DateTime.UtcNow;
                        ordem.MotivoCancelamento_ID = 1;
                        _OrdemRepo.Update(ordem);
                        return(Request.CreateResponse(HttpStatusCode.OK, ordem));
                    }
                    else
                    {
                        var BinanceErrorObj = Helper.GetBinanceErrorObj(res);
                        Logs.LogOrdem(user.Id + " (" + user.Email + ") => " + DateTime.UtcNow + " => Type (Erro ao Cancelar Ordem de Entrada) OrdemId => " + id + " code => " + BinanceErrorObj.code + " motivo => " + BinanceErrorObj.msg);
                        return(Request.CreateResponse(HttpStatusCode.BadRequest, BinanceErrorObj));
                    }
                }
                var modelstateError = ModelStateErrors.DisplayModelStateError(ModelState);
                return(Request.CreateResponse(HttpStatusCode.NotAcceptable, modelstateError, "text/plain"));
            }
            catch (Exception ex)
            {
                return(Request.CreateResponse(HttpStatusCode.InternalServerError, ex.Message));
            }
        }
Пример #10
0
 public HttpResponseMessage recusar(RecusarChamadaViewModel ViewModel)
 {
     try
     {
         if (ViewModel == null)
         {
             return(Request.CreateResponse(HttpStatusCode.NotAcceptable, "Campos Inválidos", "text/plain"));
         }
         if (ModelState.IsValid)
         {
             var userId = int.Parse(Helper.GetJWTPayloadValue(Request, "id"));
             var cancelamentorecusar = new CancelamentoRecusado
             {
                 Usuario_Id             = userId,
                 DataCancelamento       = DateTime.UtcNow,
                 CancelamentoChamada_Id = ViewModel.CancelamentoChamada_ID
             };
             _CancelamentorecusadoRepo.Add(cancelamentorecusar);
             return(Request.CreateResponse(HttpStatusCode.OK, cancelamentorecusar));
         }
         var modelstateError = ModelStateErrors.DisplayModelStateError(ModelState);
         return(Request.CreateResponse(HttpStatusCode.NotAcceptable, modelstateError, "text/plain"));
     }
     catch (Exception ex)
     {
         return(Request.CreateResponse(HttpStatusCode.InternalServerError, ex.Message));
     }
 }
 public HttpResponseMessage Get(int id)
 {
     try
     {
         if (ModelState.IsValid)
         {
             var chamada = _ChamadasRepo.GetById(id);
             return(Request.CreateResponse(HttpStatusCode.OK, chamada));
         }
         var modelstateError = ModelStateErrors.DisplayModelStateError(ModelState);
         return(Request.CreateResponse(HttpStatusCode.NotAcceptable, modelstateError, "text/plain"));
     }
     catch (Exception ex)
     {
         return(Request.CreateResponse(HttpStatusCode.InternalServerError, ex.Message));
     }
 }
 public HttpResponseMessage Post([FromBody] LoginViewModel ViewModel)
 {
     try
     {
         if (ViewModel == null)
         {
             return(Request.CreateResponse(HttpStatusCode.NotAcceptable, "Campos Inválidos", "text/plain"));
         }
         if (ModelState.IsValid)
         {
             var user = _UserRepo.GetByEmail(ViewModel.email);
             if (user == null)
             {
                 return(Request.CreateResponse(HttpStatusCode.Unauthorized, "Usuario Inexistente", "text/plain"));
             }
             else
             {
                 if (Hashing.ValidatePassword(ViewModel.password, user.Password))
                 {
                     Helper.AtualizarOrdens(user);
                     AuthenticationModule authentication = new AuthenticationModule();
                     string token = authentication.CreateToken(user.Id, user.Email);
                     //adiciona monitoramento das das ordems e saldos do usuario
                     if (user.BinanceAPIKey != null && user.BinanceAPISecret != null && user.IsValidBinanceKeys)
                     {
                         WSMonitor monitor = WSMonitor.Instancia;
                         monitor.AddMonitor(user);
                         //monitor.RemoveDoubleConnection(user.Id);
                     }
                     return(Request.CreateResponse(HttpStatusCode.OK, token));
                 }
                 else
                 {
                     return(Request.CreateResponse(HttpStatusCode.Unauthorized, "Senha Inválida", "text/plain"));
                 }
             }
         }
         var errorObj = ModelStateErrors.DisplayModelStateError(ModelState);
         return(Request.CreateResponse(HttpStatusCode.NotAcceptable, errorObj, "text/plain"));
     }
     catch (Exception ex)
     {
         return(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, ex.Message));
     }
 }
Пример #13
0
 public HttpResponseMessage GetbyChamadaID(int id)
 {
     try
     {
         if (ModelState.IsValid)
         {
             var userid = int.Parse(Helper.GetJWTPayloadValue(Request, "id"));
             var ordem  = _OrdemRepo.SelecionarbyChamadaID(id, userid);
             return(Request.CreateResponse(HttpStatusCode.OK, ordem));
         }
         var modelstateError = ModelStateErrors.DisplayModelStateError(ModelState);
         return(Request.CreateResponse(HttpStatusCode.NotAcceptable, modelstateError, "text/plain"));
     }
     catch (Exception ex)
     {
         return(Request.CreateResponse(HttpStatusCode.InternalServerError, ex.Message));
     }
 }
        public HttpResponseMessage Post(RegisterViewModel model)
        {
            //nao permitir usuarios com email repetidos nao esta validando criar validaçao
            try
            {
                if (model == null)
                {
                    return(Request.CreateResponse(HttpStatusCode.NotAcceptable, "Campos Inválidos", "text/plain"));
                }
                if (ModelState.IsValid)
                {
                    var Usuario = new Usuario
                    {
                        Email        = model.email,
                        Nome         = model.nome,
                        Sobrenome    = model.sobrenome,
                        DataCadastro = DateTime.UtcNow,
                        //Password = Helper.EncryptSha512(model.password),
                        Password = Hashing.HashPassword(model.password),
                        DataVencimentoLicenca = DateTime.UtcNow.AddMonths(3)
                    };
                    _UserRepo.Add(Usuario);
                    var ConfirmEmail = new ConfirmEmail
                    {
                        Usuario_Id = Usuario.Id,
                        Token      = Guid.NewGuid().ToString()
                    };
                    _confirEmailRepo.Add(ConfirmEmail);
                    var domainName = Request.RequestUri.Scheme + "://" + Request.RequestUri.Authority;

                    var envioEmail = new EnvioEmail(_ServerConfigRepo);
                    envioEmail.EmailCadastro(domainName, ConfirmEmail.Token, Usuario.Email);
                    return(Request.CreateResponse(HttpStatusCode.OK, ConfirmEmail));
                }
                var errorObj = ModelStateErrors.DisplayModelStateError(ModelState);
                return(Request.CreateResponse(HttpStatusCode.NotAcceptable, errorObj, "text/plain"));
            }
            catch (Exception ex)
            {
                return(Request.CreateResponse(HttpStatusCode.InternalServerError, ex.Message));
            }
        }
        public HttpResponseMessage RecuperarSenha(RecuperarSenhaViewModel model)
        {
            try
            {
                if (model == null)
                {
                    return(Request.CreateResponse(HttpStatusCode.NotAcceptable, "Campos Inválidos", "text/plain"));
                }
                if (ModelState.IsValid)
                {
                    var user = _UserRepo.GetByEmail(model.Email);
                    if (user == null)
                    {
                        return(Request.CreateResponse(HttpStatusCode.NotAcceptable, "Email Inexistente", "text/plain"));
                    }
                    else
                    {
                        var recSenha = new RecuperarSenha
                        {
                            Token        = Guid.NewGuid().ToString(),
                            DataCadastro = DateTime.UtcNow,
                            Usuario_Id   = user.Id,
                            Utilizado    = false
                        };
                        _RecuperarSenhaRepo.Add(recSenha);
                        var domainName = Request.RequestUri.Scheme + "://" + Request.RequestUri.Authority;

                        var envioEmail = new EnvioEmail(_ServerConfigRepo);
                        envioEmail.EmailRecuperarSenha(domainName, recSenha.Token, user.Email);
                        return(Request.CreateResponse(HttpStatusCode.OK));
                    }
                }
                var errorObj = ModelStateErrors.DisplayModelStateError(ModelState);
                return(Request.CreateResponse(HttpStatusCode.NotAcceptable, errorObj, "text/plain"));
            }
            catch (Exception ex)
            {
                return(Request.CreateResponse(HttpStatusCode.InternalServerError, ex.Message));
            }
        }
 /// <summary>
 /// Atualiza as Chaves da api binance
 /// </summary>
 /// <param name="ViewModel"></param>
 /// <returns></returns>
 public HttpResponseMessage Post([FromBody] SetKeysViewModel ViewModel)
 {
     try
     {
         if (ViewModel == null)
         {
             return(Request.CreateResponse(HttpStatusCode.NotAcceptable, "Campos Inválidos", "text/plain"));
         }
         if (ModelState.IsValid)
         {
             var userId        = int.Parse(Helper.GetJWTPayloadValue(Request, "id"));
             var user          = _UserRepo.GetById(userId);
             var BinanceResult = BinanceRestApi.GetAccountInformation(ViewModel.binanceKey, ViewModel.binanceSecret);
             if (BinanceResult.IsSuccessStatusCode)
             {
                 user.BinanceAPIKey      = ViewModel.binanceKey;
                 user.BinanceAPISecret   = ViewModel.binanceSecret;
                 user.IsValidBinanceKeys = true;
                 _UserRepo.Update(user);
                 var monitor = WSMonitor.Instancia;
                 monitor.RemoveMonitor(userId);
                 return(Request.CreateResponse(HttpStatusCode.OK));
             }
             else
             {
                 user.IsValidBinanceKeys = false;
                 _UserRepo.Update(user);
                 var BinanceerrorObj = Helper.GetBinanceErrorObj(BinanceResult);
                 return(Request.CreateResponse(HttpStatusCode.BadRequest, BinanceerrorObj));
             }
         }
         var modelstateError = ModelStateErrors.DisplayModelStateError(ModelState);
         return(Request.CreateResponse(HttpStatusCode.NotAcceptable, modelstateError, "text/plain"));
     }
     catch (Exception ex)
     {
         return(Request.CreateResponse(HttpStatusCode.InternalServerError, ex.Message));
     }
 }
        public HttpResponseMessage Post([FromBody] CreateChamadaViewModel ViewModel)
        {
            try
            {
                if (ViewModel == null)
                {
                    return(Request.CreateResponse(HttpStatusCode.NotAcceptable, "Campos Inválidos", "text/plain"));
                }
                if (ModelState.IsValid)
                {
                    #region Binance
                    var    userId         = int.Parse(Helper.GetJWTPayloadValue(Request, "id"));
                    var    user           = _UserRepo.GetById(userId);
                    var    chamada        = _ChamadasRepo.GetWith_Symbol_and_Filter(ViewModel.id);
                    var    ordemType      = BinanceHelper.getEntradaOrderType(chamada);
                    string BinanceOrderID = "";
                    if (!BinanceHelper.ValidateFilterPrice(chamada.Symbol.filters.Where(x => x.filterType == "PRICE_FILTER").FirstOrDefault(), ViewModel.qtd))
                    {
                        return(Request.CreateResponse(HttpStatusCode.BadRequest, new BinanceErrors {
                            code = 0, motivo = "Quantidade Inválida"
                        }));
                    }

                    do
                    {
                        BinanceOrderID = Helper.GenerateRandomOcoOrderID(10);
                    } while (_OrdemRepo.IsValidOrderID(BinanceOrderID));

                    HttpResponseMessage BinanceResult = BinanceRestApi.SendOrdemEntrada(user.BinanceAPIKey, user.BinanceAPISecret, ordemType, chamada.Symbol.symbol, ViewModel.qtd, chamada.PrecoEntrada, chamada.RangeEntrada, BinanceOrderID);
                    #endregion
                    if (BinanceResult.IsSuccessStatusCode)
                    {
                        var ordem = new Ordem()
                        {
                            DataCadastro     = DateTime.UtcNow,
                            DataExecucao     = null,
                            Quantidade       = (decimal)ViewModel.qtd,
                            Chamada_Id       = ViewModel.id,
                            Usuario_Id       = user.Id,
                            OrdemStatus_Id   = 1,
                            TipoOrdem_Id     = 1,
                            BinanceStatus_Id = 1,
                            OrderID          = BinanceOrderID
                        };
                        Logs.LogOrdem(user.Id + " (" + user.Email + ") => " + DateTime.UtcNow + " => Type (Aceitar Chamada Sucesso) ChamadaID => " + chamada.Id);
                        _OrdemRepo.Add(ordem);
                        var objanonimo = new
                        {
                            Id           = ordem.Id,
                            TipoOrdem    = 1,
                            Status_id    = ordem.OrdemStatus_Id,
                            DataCadastro = ordem.DataCadastro,
                            Quantidade   = ordem.Quantidade.ToString("N8"),
                            Chamada_Id   = ordem.Chamada_Id,
                            Symbol       = chamada.Symbol.symbol,
                            Descricao    = "Aguardando Entrada",
                            PrecoEntrada = chamada.PrecoEntrada.ToString("N8"),
                            PrecoGain    = chamada.PrecoGain.ToString("N8"),
                            PrecoLoss    = chamada.PrecoLoss.ToString("N8"),
                            RangeEntrada = chamada.RangeEntrada.ToString("N8"),
                            observacao   = chamada.Observacao
                        };
                        //necessario porque o kra pode estar logado no app e na web ao mesmo tempo e tentar enviar nos dois
                        _signalContext.Clients.User(userId.ToString()).RemoverChamada(chamada.Id);
                        _signalContext.Clients.User("admin").AddPosicionado(chamada.Id);
                        return(Request.CreateResponse(HttpStatusCode.OK, objanonimo));
                    }
                    else
                    {
                        var BinanceerrorObj = Helper.GetBinanceErrorObj(BinanceResult);
                        Logs.LogOrdem(user.Id + " (" + user.Email + ") => Type (Aceitar Chamada Erro) ChamadaID => " + chamada.Id + " code => " + BinanceerrorObj.code + " motivo => " + BinanceerrorObj.msg);
                        return(Request.CreateResponse(HttpStatusCode.BadRequest, BinanceerrorObj));
                    }
                }
                var modelstateError = ModelStateErrors.DisplayModelStateError(ModelState);
                return(Request.CreateResponse(HttpStatusCode.NotAcceptable, modelstateError, "text/plain"));
            }
            catch (Exception ex)
            {
                return(Request.CreateResponse(HttpStatusCode.InternalServerError, ex.Message));
            }
        }
Пример #18
0
        public HttpResponseMessage VenderMercado(int id)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    var userId = int.Parse(Helper.GetJWTPayloadValue(Request, "id"));
                    var user   = _UserRepo.GetById(userId);
                    //alterar pra receber como parametro chamada id
                    var OriginalOrder = _OrdemRepo.GetById(id);
                    var ordem         = _OrdemRepo.GetOcoOrder(userId, OriginalOrder.Chamada_Id);
                    ordem.MotivoCancelamento_ID = 2;
                    _OrdemRepo.Update(ordem);


                    //caso tenha cancelado e tenha dado erro pra criar venda a mercado
                    if (ordem.OrdemStatus_Id == 4 && ordem.BinanceStatus_Id == 4 && ordem.MotivoCancelamento_ID == 2)
                    {
                        string BinanceOrderID;
                        do
                        {
                            BinanceOrderID = Helper.GenerateRandomOcoOrderID(10);
                        } while (_OrdemRepo.IsValidOrderID(BinanceOrderID));
                        var     listAssets      = _OrdemComissionRepo.GetOrderComissions(id);
                        decimal SaldoQuantidade = Helper.ArredondarQuantidadeVenda(listAssets, OriginalOrder);
                        var     resMarket       = BinanceRestApi.VenderMercado(user.BinanceAPIKey, user.BinanceAPISecret, ordem.Chamada.Symbol.symbol, SaldoQuantidade, BinanceOrderID);
                        if (resMarket.IsSuccessStatusCode)
                        {
                            var BinanceContent = resMarket.Content.ReadAsStringAsync().Result;
                            var BinanceResult  = JsonConvert.DeserializeObject <NewOrder>(BinanceContent);
                            var newOrder       = new Ordem
                            {
                                BinanceStatus_Id  = 3,
                                OrdemStatus_Id    = 2,
                                OrderID           = BinanceOrderID,
                                Chamada_Id        = OriginalOrder.Chamada_Id,
                                DataCadastro      = DateTime.UtcNow,
                                TipoOrdem_Id      = 3,
                                Quantidade        = ordem.Quantidade,
                                Usuario_Id        = userId,
                                MainOrderID       = OriginalOrder.Id,
                                PrecoVendaMercado = BinanceResult.fills.FirstOrDefault().price
                            };
                            _OrdemRepo.Add(newOrder);
                            Logs.LogOrdem(user.Id + " (" + user.Email + ") => " + DateTime.UtcNow + " => Type (Vender a Mercado Sucesso) MainOrderId =>  " + OriginalOrder.Id);
                            OriginalOrder.OrdemStatus_Id    = 2;
                            OriginalOrder.BinanceStatus_Id  = 3;
                            OriginalOrder.PrecoVendaMercado = BinanceResult.fills.FirstOrDefault().price;
                            _OrdemRepo.Update(OriginalOrder);
                            return(Request.CreateResponse(HttpStatusCode.OK, OriginalOrder));
                        }
                        else
                        {
                            var BinanceerrorObj = Helper.GetBinanceErrorObj(resMarket);
                            Logs.LogOrdem(user.Id + " (" + user.Email + ") => " + DateTime.UtcNow + " => Type (Vender a Mercado Erro) MainOrderId => " + OriginalOrder.Id + " code => " + BinanceerrorObj.code + " motivo => " + BinanceerrorObj.msg);
                            return(Request.CreateResponse(HttpStatusCode.BadRequest, BinanceerrorObj));
                        }
                    }

                    var res = BinanceRestApi.CancelarOco(user.BinanceAPIKey, user.BinanceAPISecret, ordem.Chamada.Symbol.symbol, ordem.OcoOrderListId);
                    if (res.IsSuccessStatusCode)
                    {
                        ordem.BinanceStatus_Id = 4;
                        ordem.OrdemStatus_Id   = 4;
                        ordem.DataCancelamento = DateTime.UtcNow;
                        _OrdemRepo.Update(ordem);

                        string BinanceOrderID;
                        do
                        {
                            BinanceOrderID = Helper.GenerateRandomOcoOrderID(10);
                        } while (_OrdemRepo.IsValidOrderID(BinanceOrderID));
                        var     listAssets      = _OrdemComissionRepo.GetOrderComissions(id);
                        decimal SaldoQuantidade = Helper.ArredondarQuantidadeVenda(listAssets, OriginalOrder);
                        var     resMarket       = BinanceRestApi.VenderMercado(user.BinanceAPIKey, user.BinanceAPISecret, ordem.Chamada.Symbol.symbol, SaldoQuantidade, BinanceOrderID);
                        if (resMarket.IsSuccessStatusCode)
                        {
                            var BinanceContent = resMarket.Content.ReadAsStringAsync().Result;
                            var BinanceResult  = JsonConvert.DeserializeObject <NewOrder>(BinanceContent);
                            var newOrder       = new Ordem
                            {
                                BinanceStatus_Id  = 3,
                                OrdemStatus_Id    = 2,
                                OrderID           = BinanceOrderID,
                                Chamada_Id        = OriginalOrder.Chamada_Id,
                                DataCadastro      = DateTime.UtcNow,
                                TipoOrdem_Id      = 3,
                                Quantidade        = ordem.Quantidade,
                                Usuario_Id        = userId,
                                MainOrderID       = OriginalOrder.Id,
                                PrecoVendaMercado = BinanceResult.fills.FirstOrDefault().price
                            };
                            _OrdemRepo.Add(newOrder);
                            Logs.LogOrdem(user.Id + " (" + user.Email + ") => " + DateTime.UtcNow + " => Type (Vender a Mercado Sucesso) MainOrderId =>  " + OriginalOrder.Id);
                            OriginalOrder.OrdemStatus_Id    = 2;
                            OriginalOrder.BinanceStatus_Id  = 3;
                            OriginalOrder.PrecoVendaMercado = BinanceResult.fills.FirstOrDefault().price;
                            _OrdemRepo.Update(OriginalOrder);
                            return(Request.CreateResponse(HttpStatusCode.OK, OriginalOrder));
                        }
                        else
                        {
                            var BinanceerrorObj = Helper.GetBinanceErrorObj(resMarket);
                            Logs.LogOrdem(user.Id + " (" + user.Email + ") => " + DateTime.UtcNow + " => Type (Vender a Mercado Erro) MainOrderId => " + OriginalOrder.Id + " code => " + BinanceerrorObj.code + " motivo => " + BinanceerrorObj.msg);
                            return(Request.CreateResponse(HttpStatusCode.BadRequest, BinanceerrorObj));
                        }
                    }
                    else
                    {
                        var BinanceErrorObj = Helper.GetBinanceErrorObj(res);
                        Logs.LogOrdem(user.Id + " (" + user.Email + ") => " + DateTime.UtcNow + " => Type (Erro ao Cancelar Ordem Oco Para Venda a Mercado) OcoOrderListID => " + ordem.OcoOrderListId + " code => " + BinanceErrorObj.code + " motivo => " + BinanceErrorObj.msg);
                        return(Request.CreateResponse(HttpStatusCode.BadRequest, BinanceErrorObj));
                    }
                }
                var modelstateError = ModelStateErrors.DisplayModelStateError(ModelState);
                return(Request.CreateResponse(HttpStatusCode.NotAcceptable, modelstateError, "text/plain"));
            }
            catch (Exception ex)
            {
                return(Request.CreateResponse(HttpStatusCode.InternalServerError, ex.Message));
            }
        }
        public HttpResponseMessage aceitar([FromBody] AceitarEdicaoViewModel model)
        {
            try
            {
                if (model == null)
                {
                    return(Request.CreateResponse(HttpStatusCode.NotAcceptable, "Campos Inválidos", "text/plain"));
                }
                if (ModelState.IsValid)
                {
                    var userId         = int.Parse(Helper.GetJWTPayloadValue(Request, "id"));
                    var chamadaEditada = _ChamadaEditadaRepo.GetById(model.EdicaoId);
                    var user           = _UserRepo.GetById(userId);
                    var ordem          = _OrdemRepo.GetOcoOrder(userId, model.ChamadaId);
                    ordem.MotivoCancelamento_ID = 3;
                    _OrdemRepo.Update(ordem);

                    //caso tenha cancelado e dado erro pra criar outra oco
                    if (ordem.OrdemStatus_Id == 4 && ordem.BinanceStatus_Id == 4 && ordem.MotivoCancelamento_ID == 3)
                    {
                        string LimitOrderID, StopOrderID;
                        do
                        {
                            LimitOrderID = Helper.GenerateRandomOcoOrderID(10);
                        } while (_OrdemRepo.IsValidOrderID(LimitOrderID));
                        do
                        {
                            StopOrderID = Helper.GenerateRandomOcoOrderID(10);
                        } while (_OrdemRepo.IsValidOrderID(StopOrderID));
                        var limitLoss = Helper.OcoStopLimitWithPercent(ordem.Chamada.Symbol_id, chamadaEditada.NewLoss, 0.5m);
                        //cria uma nova ordem
                        var ocoReturn = BinanceRestApi.SendSaidaOco(user.BinanceAPIKey, user.BinanceAPISecret, ordem.Chamada.Symbol.symbol, ordem.Quantidade, chamadaEditada.NewGain, chamadaEditada.NewLoss, limitLoss, LimitOrderID, StopOrderID);
                        if (ocoReturn.IsSuccessStatusCode)
                        {
                            var edicaoAceita = new EdicaoAceita
                            {
                                Usuario_Id        = userId,
                                TipoEdicao_ID     = 1,
                                DataCadastro      = DateTime.UtcNow,
                                ChamadaEditada_ID = model.EdicaoId,
                                Chamada_ID        = model.ChamadaId
                            };
                            _EdicaoAceitaRepo.Add(edicaoAceita);

                            var ocoRes   = ocoReturn.Content.ReadAsStringAsync().Result;
                            var ocoObj   = JsonConvert.DeserializeObject <dynamic>(ocoRes);
                            var OcoOrder = new Ordem
                            {
                                DataCadastro     = DateTime.UtcNow,
                                DataExecucao     = null,
                                Quantidade       = ordem.Quantidade,
                                Chamada_Id       = ordem.Chamada_Id,
                                Usuario_Id       = user.Id,
                                OrdemStatus_Id   = 3,
                                TipoOrdem_Id     = 2,
                                BinanceStatus_Id = 1,
                                StopOrder_ID     = StopOrderID,
                                LimitOrder_ID    = LimitOrderID,
                                OcoOrderListId   = (string)ocoObj.listClientOrderId,
                                MainOrderID      = ordem.MainOrderID
                            };
                            _OrdemRepo.Add(OcoOrder);

                            var retunrobj = new { PrecoEntrada = ordem.Chamada.PrecoEntrada, NewGain = chamadaEditada.NewGain, NewLoss = chamadaEditada.NewLoss, chamadaId = chamadaEditada.Chamada_Id };
                            Logs.LogOrdem(user.Id + " (" + user.Email + ") => Type (Criar Ordem Editada Sucesso) MainOrderID => " + OcoOrder.MainOrderID);
                            return(Request.CreateResponse(HttpStatusCode.OK, retunrobj));
                        }
                        else
                        {
                            var BinanceErrorObj = Helper.GetBinanceErrorObj(ocoReturn);
                            Logs.LogOrdem(user.Id + " (" + user.Email + ") => Type (Erro ao Criar Ordem Editada) OcoOrderListID => " + ordem.OcoOrderListId + " code => " + BinanceErrorObj.code + " motivo => " + BinanceErrorObj.msg);
                            return(Request.CreateResponse(HttpStatusCode.BadRequest, BinanceErrorObj));
                        }
                    }

                    var res = BinanceRestApi.CancelarOco(user.BinanceAPIKey, user.BinanceAPISecret, ordem.Chamada.Symbol.symbol, ordem.OcoOrderListId);
                    if (res.IsSuccessStatusCode)
                    {
                        ordem.OrdemStatus_Id   = 4;
                        ordem.BinanceStatus_Id = 4;
                        ordem.DataCancelamento = DateTime.UtcNow;
                        _OrdemRepo.Update(ordem);
                        string LimitOrderID, StopOrderID;
                        do
                        {
                            LimitOrderID = Helper.GenerateRandomOcoOrderID(10);
                        } while (_OrdemRepo.IsValidOrderID(LimitOrderID));
                        do
                        {
                            StopOrderID = Helper.GenerateRandomOcoOrderID(10);
                        } while (_OrdemRepo.IsValidOrderID(StopOrderID));
                        var limitLoss = Helper.OcoStopLimitWithPercent(ordem.Chamada.Symbol_id, chamadaEditada.NewLoss, 0.5m);
                        //cria uma nova ordem
                        var ocoReturn = BinanceRestApi.SendSaidaOco(user.BinanceAPIKey, user.BinanceAPISecret, ordem.Chamada.Symbol.symbol, ordem.Quantidade, chamadaEditada.NewGain, chamadaEditada.NewLoss, limitLoss, LimitOrderID, StopOrderID);
                        if (ocoReturn.IsSuccessStatusCode)
                        {
                            var edicaoAceita = new EdicaoAceita
                            {
                                Usuario_Id        = userId,
                                TipoEdicao_ID     = 1,
                                DataCadastro      = DateTime.UtcNow,
                                ChamadaEditada_ID = model.EdicaoId,
                                Chamada_ID        = model.ChamadaId
                            };
                            _EdicaoAceitaRepo.Add(edicaoAceita);

                            var ocoRes   = ocoReturn.Content.ReadAsStringAsync().Result;
                            var ocoObj   = JsonConvert.DeserializeObject <dynamic>(ocoRes);
                            var OcoOrder = new Ordem
                            {
                                DataCadastro     = DateTime.UtcNow,
                                DataExecucao     = null,
                                Quantidade       = ordem.Quantidade,
                                Chamada_Id       = ordem.Chamada_Id,
                                Usuario_Id       = user.Id,
                                OrdemStatus_Id   = 3,
                                TipoOrdem_Id     = 2,
                                BinanceStatus_Id = 1,
                                StopOrder_ID     = StopOrderID,
                                LimitOrder_ID    = LimitOrderID,
                                OcoOrderListId   = (string)ocoObj.listClientOrderId,
                                MainOrderID      = ordem.MainOrderID
                            };
                            _OrdemRepo.Add(OcoOrder);

                            var retunrobj = new { PrecoEntrada = ordem.Chamada.PrecoEntrada, NewGain = chamadaEditada.NewGain, NewLoss = chamadaEditada.NewLoss, chamadaId = chamadaEditada.Chamada_Id };
                            Logs.LogOrdem(user.Id + " (" + user.Email + ") => Type (Criar Ordem Editada Sucesso) => OrderId => " + OcoOrder.Id + " =>  MainOrderID => " + OcoOrder.MainOrderID);
                            return(Request.CreateResponse(HttpStatusCode.OK, retunrobj));
                        }
                        else
                        {
                            var BinanceErrorObj = Helper.GetBinanceErrorObj(ocoReturn);
                            Logs.LogOrdem(user.Id + " (" + user.Email + ") => Type (Erro ao Criar Ordem Editada) OcoOrderListID => " + ordem.OcoOrderListId + " code => " + BinanceErrorObj.code + " motivo => " + BinanceErrorObj.msg);
                            return(Request.CreateResponse(HttpStatusCode.BadRequest, BinanceErrorObj));
                        }
                    }
                    else
                    {
                        var BinanceErrorObj = Helper.GetBinanceErrorObj(res);
                        Logs.LogOrdem(user.Id + " (" + user.Email + ") => Type (Erro ao Cancelar Ordem Para Aceitar Edição) OcoOrderListID => " + ordem.OcoOrderListId + " code => " + BinanceErrorObj.code + " motivo => " + BinanceErrorObj.msg);
                        return(Request.CreateResponse(HttpStatusCode.BadRequest, BinanceErrorObj));
                    }
                }
                var modelstateError = ModelStateErrors.DisplayModelStateError(ModelState);
                return(Request.CreateResponse(HttpStatusCode.NotAcceptable, modelstateError, "text/plain"));
            }
            catch (Exception ex)
            {
                return(Request.CreateResponse(HttpStatusCode.InternalServerError, ex.Message));
            }
        }