zero4rs 2.0.0

zero4rs is a powerful, pragmatic, and extremely fast web framework for Rust
Documentation
use bson::doc;

// use crate::core::error2::Error;
use crate::core::error2::Result;

use crate::{core::auth0::Requestor, prelude2::*};

use crate::services::app_logs_service;

// 上传设备网络日志
pub async fn upload_app_logs(
    body: web::Bytes,
    request: HttpRequest,
    context: web::Data<AppContext>,
    requestor: actix_web::web::ReqData<Requestor>,
) -> impl Responder {
    let app_logs = match crate::commons::bytes_to_string(body.to_vec()) {
        Ok(val) => val,
        Err(e) => return request.json(200, R::failed(500, e.to_string())),
    };

    let _count =
        app_logs_service::save_app_logs(context.mongo(), requestor.get_user(), &app_logs).await?;

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

// 上传设备网络日志
pub async fn upload_network_log(
    body: web::Bytes,
    request: HttpRequest,
    context: web::Data<AppContext>,
    requestor: actix_web::web::ReqData<Requestor>,
) -> impl Responder {
    let locations = match crate::commons::bytes_to_string(body.to_vec()) {
        Ok(val) => val,
        Err(e) => return request.json(200, R::failed(500, e.to_string())),
    };

    let _count =
        app_logs_service::save_network_log(context.mongo(), requestor.get_user(), &locations)
            .await?;

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

// 上传系统任务日志
pub async fn upload_tasks_log(
    body: web::Bytes,
    request: HttpRequest,
    context: web::Data<AppContext>,
    requestor: actix_web::web::ReqData<Requestor>,
) -> impl Responder {
    let locations = match crate::commons::bytes_to_string(body.to_vec()) {
        Ok(val) => val,
        Err(e) => return request.json(200, R::failed(500, e.to_string())),
    };

    let _count =
        app_logs_service::save_tasks_log(context.mongo(), requestor.get_user(), &locations).await?;

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

// 查询设备网络日志
pub async fn filter_network_log(
    form: actix_web::web::Form<HashMap<String, String>>,
    request: HttpRequest,
    context: web::Data<AppContext>,
    _requestor: actix_web::web::ReqData<Requestor>,
) -> Result<HttpResponse> {
    let _device_id = form.0.get("device_id");
    let _tag = form.0.get("tag");

    let skip = form
        .0
        .get("skip")
        .map(|f| crate::commons::string_to_number::<u32>(f))
        .unwrap_or(Ok(0))?;

    let limit = form
        .0
        .get("limit")
        .map(|f| crate::commons::string_to_number::<u32>(f))
        .unwrap_or(Ok(1))?;

    let pagation = (skip, limit);
    let mut filter = doc! {};

    if let Some(tag) = _tag {
        filter.insert("tag", tag);
    }

    if let Some(device_id) = _device_id {
        filter.insert("device_id", device_id);
    }

    let result = app_logs_service::filter_network_log(context.mongo(), filter, pagation).await?;

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