reactive_graph_dynamic_graph_impl/object/entity/mutation/
delete.rs

1use 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}