teo_runtime/handler/default/
create.rs

1use key_path::path;
2use crate::response::Response;
3use crate::action::action::*;
4use crate::connection::transaction;
5use crate::handler::default::internal::create::create_internal;
6use crate::request::Request;
7
8pub async fn create(request: Request) -> teo_result::Result<Response> {
9    let action = CREATE | SINGLE | ENTRY;
10    let value = request.transaction_ctx().run_transaction(move |ctx: transaction::Ctx| {
11        let request = request.clone();
12        async move {
13            let model = request.transaction_ctx().namespace().model_at_path(&request.handler_match()?.path()).unwrap().clone();
14            let input = request.body_value()?.as_dictionary().unwrap();
15            let create = input.get("create");
16            let include = input.get("include");
17            let select = input.get("select");
18            Ok(create_internal(ctx.clone(), request.clone(), create, include, select, &model, &path!["create"], action).await?)
19        }
20    }).await?;
21    Ok(Response::data(value))
22}