reactive_graph_dynamic_graph_impl/object/entity/mutation/
delete.rs1use crate::field::ids_to_field_value;
2use async_graphql::dynamic::Field;
3use async_graphql::dynamic::FieldFuture;
4use async_graphql::dynamic::TypeRef;
5use log::trace;
6use reactive_graph_reactive_model_impl::ReactiveEntity;
7use reactive_graph_reactive_service_api::ReactiveEntityManager;
8use std::sync::Arc;
9
10pub fn entity_delete_field() -> Field {
11 Field::new("delete", TypeRef::named_nn_list_nn(TypeRef::ID), move |ctx| {
12 FieldFuture::new(async move {
13 let reactive_entity_manager = ctx.data::<Arc<dyn ReactiveEntityManager + Send + Sync>>()?;
14 let mut ids = Vec::new();
15 for reactive_entity in ctx.parent_value.try_downcast_ref::<Vec<ReactiveEntity>>()? {
16 trace!("Deleting entity instance {reactive_entity}");
17 let id = reactive_entity.id;
18 if reactive_entity_manager.delete(id) {
19 ids.push(id);
20 }
21 }
22 Ok(Some(ids_to_field_value(ids)))
23 })
24 })
25}