Sfoglia il codice sorgente

新增当前支持的交易所过滤

skyffire 1 anno fa
parent
commit
107c143abd
4 ha cambiato i file con 57 aggiunte e 3 eliminazioni
  1. 17 0
      README.MD
  2. 27 0
      src/db_connector.rs
  3. 12 2
      src/server.rs
  4. 1 1
      src/trades.rs

+ 17 - 0
README.MD

@@ -128,3 +128,20 @@
     ],
 }
 ```
+
+
+
+## /ia/get_exchanges  获取交易所
+##### response
+``` json
+{
+    "msg": "查询成功",
+    "query": null,
+    "data": [
+        "gate_usdt_swap",
+        "bitget_usdt_swap",
+        "binance_usdt_swap"
+    ],
+    "code": 200
+}
+```

+ 27 - 0
src/db_connector.rs

@@ -167,6 +167,33 @@ pub async fn get_symbols_json(exchange: &str) -> Response {
     }
 }
 
+pub async fn get_exchanges_json() -> Response {
+    let url = "http://dc.skyfffire.com:8888/exchanges";
+    let params = json!({});
+
+    // 创建 HTTP 客户端
+    let client = Client::new();
+
+    // 发送 GET 请求
+    let response = client.get(url)
+        .query(&params)
+        .send()
+        .await.unwrap();
+
+    // 错误处理
+    if response.status().is_success() {
+        let response_text = response.text().await.unwrap();
+        serde_json::from_str(response_text.as_str()).unwrap()
+    } else {
+        Response {
+            msg: Some("get_exchanges_json 请求失败,预计是指标层的网络请求错误。".to_string()),
+            query: params.clone(),
+            data: Default::default(),
+            code: 500,
+        }
+    }
+}
+
 #[tokio::test]
 async fn get_trades_test() {
     use global::log_utils::init_log_with_info;

+ 12 - 2
src/server.rs

@@ -7,6 +7,7 @@ use rust_decimal::prelude::ToPrimitive;
 use serde::{Deserialize, Serialize};
 use serde_json::Value;
 use tracing::{info};
+use crate::db_connector::get_exchanges_json;
 use crate::msv::generate_msv;
 use crate::params_utils::{get_array, get_str, parse_str_to_decimal};
 use crate::symbol_filter::get_final_symbols;
@@ -89,7 +90,7 @@ async fn get_indicator(query: web::Json<Value>) -> impl Responder {
             };
 
             let json_string = serde_json::to_string(&response).unwrap();
-            return HttpResponse::BadRequest().content_type("application/json").body(json_string)
+            return HttpResponse::Ok().content_type("application/json").body(json_string)
         }
         Some(indicator) => {
             indicator
@@ -113,11 +114,19 @@ async fn get_indicator(query: web::Json<Value>) -> impl Responder {
             };
 
             let json_string = serde_json::to_string(&response).unwrap();
-            HttpResponse::BadRequest().content_type("application/json").body(json_string)
+            HttpResponse::Ok().content_type("application/json").body(json_string)
         }
     }
 }
 
+#[post("/ia/get_exchanges")]
+async fn get_exchanges() -> impl Responder {
+    let response = get_exchanges_json().await;
+
+    let json_string = serde_json::to_string(&response).unwrap();
+    HttpResponse::Ok().content_type("application/json").body(json_string)
+}
+
 pub fn run_server(port: u32, running: Arc<AtomicBool>) {
     let addr = format!("0.0.0.0:{}", port);
     info!("指标服务绑定地址:{}", addr);
@@ -135,6 +144,7 @@ pub fn run_server(port: u32, running: Arc<AtomicBool>) {
             .wrap(cors)
             .service(get_symbols_by_filter)
             .service(get_indicator)
+            .service(get_exchanges)
     })
     .bind(addr)
     .expect("Bind port error")

+ 1 - 1
src/trades.rs

@@ -60,6 +60,6 @@ pub async fn generate_trades(query_value: Value) -> HttpResponse {
         HttpResponse::Ok().content_type("application/json").body(json_string)
     } else {
         let json_string = serde_json::to_string(&db_response).unwrap();
-        HttpResponse::BadRequest().content_type("application/json").body(json_string)
+        HttpResponse::Ok().content_type("application/json").body(json_string)
     }
 }