zero4rs 2.0.0

zero4rs is a powerful, pragmatic, and extremely fast web framework for Rust
Documentation
use crate::prelude2::*;

use std::collections::HashMap;

pub async fn es_save(
    query: web::Query<HashMap<String, String>>,
    params: actix_web::web::Json<serde_json::Value>,
    request: HttpRequest,
    app_state: web::Data<AppContext>,
) -> impl Responder {
    let index_name = query
        .get("index_name")
        .ok_or_else(|| Error::invalid_request("Missing query string parameter: index_name"))?;

    let result = app_state
        .es()
        .save(index_name, &params.0)
        .await
        .map_err(|e| Error::throw("保存索引失败", Some(e)))?;

    request.json(200, R::ok(result))
}

pub async fn es_save2(
    query: web::Query<HashMap<String, String>>,
    data: actix_web::web::Bytes,
    request: HttpRequest,
    app_state: web::Data<AppContext>,
) -> impl Responder {
    let index_name = query
        .get("index_name")
        .ok_or_else(|| Error::invalid_request("Missing query string parameter: index_name"))?;

    let data = crate::commons::bytes_to_string(data.to_vec())?;

    let result = app_state
        .es()
        .save2(index_name, &data)
        .await
        .map_err(|e| Error::throw("保存索引失败", Some(e)))?;

    request.json(200, R::ok(result))
}

pub async fn es_update(
    query: web::Query<HashMap<String, String>>,
    params: actix_web::web::Json<serde_json::Value>,
    request: HttpRequest,
    context: web::Data<AppContext>,
) -> impl Responder {
    let id = query
        .get("id")
        .ok_or_else(|| Error::invalid_request("Missing query string parameter: id"))?;

    let result = context
        .es()
        .update("first_index", id, &params.0)
        .await
        .map_err(|e| Error::throw("更新索引失败", Some(e)))?;

    request.json(200, R::ok(result))
}

pub async fn es_query_single(
    query: web::Query<HashMap<String, String>>,
    request: HttpRequest,
    app_state: web::Data<AppContext>,
) -> impl Responder {
    let id = query
        .get("id")
        .ok_or_else(|| Error::invalid_request("Missing query string parameter: id"))?;

    let result = app_state
        .es()
        .query_single::<serde_json::Value>("first_index", id)
        .await
        .map_err(|e| Error::throw("查询失败", Some(e)))?;

    request.json(200, R::ok(result))
}

pub async fn es_select(
    query: web::Query<HashMap<String, String>>,
    data: actix_web::web::Bytes,
    request: HttpRequest,
    app_state: web::Data<AppContext>,
) -> impl Responder {
    let index_name = query
        .get("index_name")
        .ok_or_else(|| Error::invalid_request("Missing query string parameter: index_name"))?;

    let query_dsl = crate::commons::bytes_to_string(data.to_vec())?;

    let result = app_state
        .es()
        .select::<serde_json::Map<String, serde_json::Value>>(index_name, &query_dsl)
        .await?;

    request.json(200, R::ok(result))
}

pub async fn es_select_after(
    query: web::Query<HashMap<String, String>>,
    data: actix_web::web::Bytes,
    request: HttpRequest,
    app_state: web::Data<AppContext>,
) -> impl Responder {
    let index_name = query
        .get("index_name")
        .ok_or_else(|| Error::invalid_request("Missing query string parameter: index_name"))?;

    let query_dsl = crate::commons::bytes_to_string(data.to_vec())?;

    let (result, _) = app_state
        .es()
        .select_after::<serde_json::Map<String, serde_json::Value>>(index_name, &query_dsl)
        .await?;

    request.json(200, R::ok(result))
}

pub async fn es_delete(
    query: web::Query<HashMap<String, String>>,
    request: HttpRequest,
    app_state: web::Data<AppContext>,
) -> impl Responder {
    let id = query
        .get("id")
        .ok_or_else(|| Error::invalid_request("Missing query string parameter: id"))?;

    let result = app_state
        .es()
        .delete("first_index", id)
        .await
        .map_err(|e| Error::throw("删除索引失败", Some(e)))?;

    request.json(200, R::ok(result))
}