Refactor buy_coin()

This commit is contained in:
Sik Yoon 2023-08-12 18:52:52 +09:00
parent 140d65eae0
commit b88f779926

View File

@ -114,42 +114,30 @@ pub struct MarketCapIndex {
// buy coin
pub async fn buy_coin(
client: &Client,
coin_price_vec: &Vec<CoinPriceData>,
exchange_info_vec: &Vec<ExchangeInfo>,
trade_fee_vec: &Vec<TradeFee>,
) -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
// check conditions for buying
set_is_tradable().await;
let mut is_tradable = get_is_tradable().await;
let mut suggested_coin = get_suggested_coin_list().await;
let mut delete_condition = String::from("WHERE ");
let mut is_exist_delete_symbol: bool = false;
if is_tradable == true && !suggested_coin.is_empty() {
if !suggested_coin.is_empty() {
// && (signal_decision.first().unwrap().decision == "KEEP" || signal_decision.first().unwrap().decision == "UP") {
let unit_trade_usdt = fetch_unit_trade_usdt().await;
let server_epoch = server_epoch().await;
let mut filtered_suggested_coin_vec: Vec<&SuggestedCoin> = Vec::new();
// filtering symbols to buy
suggested_coin.reverse();
for element in &suggested_coin {
let price_index = coin_price_vec
.iter()
.position(|x| *x.symbol == element.symbol);
if price_index.is_some()
&& element.already_buy == 0
if element.already_buy == 0
&& server_epoch - element.registered_server_epoch <= 600_000
// 600_000 (600 secs = 10 mins)
{
filtered_suggested_coin_vec.push(element);
delete_condition.push_str("id = ");
delete_condition.push_str(element.id.to_string().as_str());
delete_condition.push_str(" OR ");
is_exist_delete_symbol = false;
} else if server_epoch - element.registered_server_epoch >= 1_800_000 {
} else if server_epoch - element.registered_server_epoch > 600_000 {
delete_condition.push_str("id = ");
delete_condition.push_str(element.id.to_string().as_str());
delete_condition.push_str(" OR ");
@ -157,7 +145,10 @@ pub async fn buy_coin(
}
}
if !filtered_suggested_coin_vec.is_empty() {
set_is_tradable().await;
let mut is_tradable = get_is_tradable().await;
if is_tradable == true && !filtered_suggested_coin_vec.is_empty() {
let available_usdt = get_available_usdt().await;
let vec_len = Decimal::new(filtered_suggested_coin_vec.len() as i64, 0);
let mut used_usdt = Decimal::new(0, 8);
@ -253,37 +244,6 @@ pub async fn buy_coin(
}
}
}
// delete the coin record in [suggested_coin_list]
if is_exist_delete_symbol == true {
delete_condition.pop();
delete_condition.pop();
delete_condition.pop();
delete_condition.pop();
delete_condition.push(';');
let suggested_coin_list_table_name = String::from("suggested_coin_list");
delete_record(&suggested_coin_list_table_name, &delete_condition)
.await
.unwrap();
}
} else {
let server_epoch = server_epoch().await;
let mut filtered_suggested_coin_vec: Vec<&SuggestedCoin> = Vec::new();
// filtering symbols to buy
for element in &suggested_coin {
if ((element.registerer != 5 || element.registerer != 6)
&& server_epoch - element.registered_server_epoch > 65_000)
|| ((element.registerer == 5 || element.registerer == 6)
&& server_epoch - element.registered_server_epoch >= 65_000)
{
// 10000 (10 secs), 600_000 (10 mins), 7_200_000 (120 mins)
filtered_suggested_coin_vec.push(element);
delete_condition.push_str("id = ");
delete_condition.push_str(element.id.to_string().as_str());
delete_condition.push_str(" OR ");
is_exist_delete_symbol = true;
}
}
// delete the coin record in [suggested_coin_list]
if is_exist_delete_symbol == true {
@ -298,6 +258,7 @@ pub async fn buy_coin(
.unwrap();
}
}
Ok(())
}