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