use crate::prelude2::*;
use crate::commons::validatorr::validation_flatten;
use crate::core::serde::date_format_opt;
use chrono::{DateTime, Utc};
use mongodb::bson::doc;
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Debug, Serialize, Deserialize, validator::Validate)]
pub struct SimpleDataParams {
title: Option<String>,
#[validate(required)]
html_content: Option<String>,
#[serde(default = "date_format_opt::default_time", with = "date_format_opt")]
created_at: Option<DateTime<Utc>>,
}
pub async fn mongodb_save(
params: web::Json<SimpleDataParams>,
request: HttpRequest,
app_state: web::Data<AppContext>,
) -> impl Responder {
if let Some(err) = validation_flatten(¶ms.0) {
return request.json(200, R::invalid(err));
}
let m = &app_state.mongo();
request.json(
200,
R::ok(m.insert_one("first_db", "simple_message", params.0).await?),
)
}
pub async fn find_one(
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 m = &app_state.mongo();
let result = m
.find_one::<SimpleDataParams>("first_db", "simple_message", id)
.await?;
request.json(200, R::ok(result))
}
pub async fn query_list(request: HttpRequest, app_state: web::Data<AppContext>) -> impl Responder {
let m = &app_state.mongo();
let result = m
.find::<SimpleDataParams>("first_db", "simple_message", doc! {})
.await?;
request.json(200, R::ok(result))
}