teo_runtime/handler/default/
delete_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::request::Request;
8
9pub async fn delete_many(request: Request) -> teo_result::Result<Response> {
10 let action = DELETE | MANY | ENTRY;
11 let (objects, count) = request.transaction_ctx().run_transaction(move |ctx: transaction::Ctx| {
12 let request = request.clone();
13 let model = request.transaction_ctx().namespace().model_at_path(&request.handler_match().unwrap().path()).unwrap().clone();
14 async move {
15 let objects = ctx.find_many_internal(&model, request.body_value()?, true, action, Some(request.clone()), path![]).await?;
16 let mut count = 0;
17 let mut ret_data: Vec<Value> = vec![];
18 for (index, object) in objects.iter().enumerate() {
19 object.delete_internal(path!["data", index]).await?;
20 ret_data.push(object.to_teon_internal(&path!["data", index]).await?);
21 count += 1;
22 }
23 Ok((ret_data, count))
24 }
25 }).await?;
26 Ok(Response::data_meta(Value::Array(objects), teon!({"count": count})))
27}