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::note_service::CreateNoteSchema;
use crate::services::note_service::FilterOptions;
use crate::services::note_service::UpdateNoteSchema;

use crate::services::note_service::delete_note_by_id;
use crate::services::note_service::note_update;
use crate::services::note_service::save_note;
use crate::services::note_service::select_by_id;
use crate::services::note_service::select_nodes;

// 查询列表
pub async fn list_notes(
    opts: web::Query<FilterOptions>,
    app_state: web::Data<AppContext>,
    request: HttpRequest,
) -> impl Responder {
    if let Some(err) = validation_flatten(&opts.0) {
        return request.json(200, R::invalid(err));
    }

    let limit = opts.limit.unwrap_or(10);
    let offset = (opts.page.unwrap_or(1) - 1) * limit;
    let note_responses = select_nodes(limit, offset, app_state.mysql()).await?;

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

// 创建
pub async fn create_note(
    body: web::Json<CreateNoteSchema>,
    app_state: web::Data<AppContext>,
    request: HttpRequest,
) -> impl Responder {
    if let Some(err) = validation_flatten(&body.0) {
        return request.json(200, R::invalid(err));
    }

    let user_id = save_note(&body.0, app_state.mysql()).await?;

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

// 查询详情
pub async fn note_details(
    note_id: web::Path<String>,
    app_state: web::Data<AppContext>,
    request: HttpRequest,
) -> impl Responder {
    let note_id = note_id.into_inner();
    let result = select_by_id(&note_id, app_state.mysql()).await?;

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

// 更新
pub async fn update_note(
    note_id: web::Path<String>,
    body: web::Json<UpdateNoteSchema>,
    app_state: web::Data<AppContext>,
    request: HttpRequest,
) -> impl Responder {
    if let Some(err) = validation_flatten(&body.0) {
        return request.json(200, R::invalid(err));
    }

    let note_id = note_id.into_inner();
    let result = note_update(&note_id, &body.0, app_state.mysql()).await?;

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

// 删除
pub async fn delete_note(
    note_id: web::Path<String>,
    app_state: web::Data<AppContext>,
    request: HttpRequest,
) -> impl Responder {
    let note_id = note_id.into_inner();
    let result = delete_note_by_id(&note_id, app_state.mysql()).await?;

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