zero4rs 2.0.0

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

use crate::services::kline_service::model2::KlineDataCreator;
use crate::services::region_service::save_region;
use crate::services::region_service::save_region_bulk;
use crate::services::region_service::RegionCreator;

use crate::services::kline_service::save_kline_bulk;
use crate::services::kline_service::select_kline_data;

use crate::services::kline_service::models::FetchKline;

// https://stackoverflow.com/questions/74956100/how-to-build-safe-dynamic-query-with-sqlx-in-rust
// https://github.com/launchbadge/sqlx/issues/291
pub async fn mysql_select(
    app_state: web::Data<AppContext>,
    request: HttpRequest,
) -> impl Responder {
    crate::services::user_service::models::UsersRecord::select_by_primary_key(
        app_state.mysql_client(),
        "0195929f-bddb-7083-8d38-c99dd6269b56",
    )
    .await;

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

pub async fn mysql_save_region(
    params: web::Json<RegionCreator>,
    app_state: web::Data<AppContext>,
    request: HttpRequest,
) -> impl Responder {
    let id = save_region(&params.0, app_state.mysql()).await?;
    request.json(200, R::ok(id))
}

pub async fn mysql_save_region_bulk(
    params: web::Json<Vec<RegionCreator>>,
    app_state: web::Data<AppContext>,
    request: HttpRequest,
) -> impl Responder {
    let result = save_region_bulk(params.0, app_state.mysql()).await?;
    request.json(200, R::ok(result))
}

pub async fn mysql_save_kline_bulk(
    params: web::Json<Vec<KlineDataCreator>>,
    app_state: web::Data<AppContext>,
    request: HttpRequest,
) -> impl Responder {
    let rows_affected = save_kline_bulk(app_state.mysql(), params.0).await?;
    request.json(200, R::ok(rows_affected))
}

pub async fn mysql_select_kline(
    query_params: web::Query<FetchKline>,
    app_state: web::Data<AppContext>,
    request: HttpRequest,
) -> impl Responder {
    if let Some(err) = validation_flatten(&query_params.0) {
        return request.json(200, R::invalid(err));
    }

    let list = select_kline_data(app_state.mysql(), query_params.0).await?;
    request.json(200, R::ok(list))
}