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(¬e_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(¬e_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(¬e_id, app_state.mysql()).await?;
request.json(200, R::ok(result))
}