teo_runtime/handler/default/
create_many.rs1use key_path::path;
2use crate::value::Value;
3use crate::teon;
4use crate::response::Response;
5use crate::action::action::*;
6use crate::connection::transaction;
7use crate::handler::default::internal::create::create_internal;
8use crate::request::Request;
9
10pub async fn create_many(request: Request) -> teo_result::Result<Response> {
11 let action = CREATE | MANY | ENTRY;
12 let (objects, count) = request.transaction_ctx().run_transaction(move |ctx: transaction::Ctx| {
13 let request = request.clone();
14 let model = request.transaction_ctx().namespace().model_at_path(&request.handler_match().unwrap().path()).unwrap().clone();
15 async move {
16 let input = request.body_value()?.as_dictionary().unwrap();
17 let create = input.get("create");
18 let include = input.get("include");
19 let select = input.get("select");
20 let create = create.unwrap().as_array().unwrap();
21 let mut count = 0;
22 let mut ret_data: Vec<Value> = vec![];
23 for (index, val) in create.iter().enumerate() {
24 let result = create_internal(ctx.clone(), request.clone(), Some(val), include, select, &model, &path!["create", index], action).await?;
25 count += 1;
26 ret_data.push(result);
27 }
28 Ok((ret_data, count))
29 }
30 }).await?;
31 Ok(Response::data_meta(Value::Array(objects), teon!({"count": count})))
32}