reactive_graph_dynamic_graph_impl/object/relation/mutation/
delete.rs1use async_graphql::ID;
2use async_graphql::dynamic::Field;
3use async_graphql::dynamic::FieldFuture;
4use async_graphql::dynamic::FieldValue;
5use async_graphql::dynamic::TypeRef;
6use log::trace;
7use reactive_graph_reactive_model_api::ReactiveInstance;
8use reactive_graph_reactive_model_impl::ReactiveRelation;
9use reactive_graph_reactive_service_api::ReactiveRelationManager;
10use std::sync::Arc;
11
12pub fn relation_delete_field() -> Field {
13 Field::new("delete", TypeRef::named_nn_list_nn(TypeRef::ID), move |ctx| {
14 FieldFuture::new(async move {
15 let relation_instance_manager = ctx.data::<Arc<dyn ReactiveRelationManager + Send + Sync>>()?;
16 let mut ids = Vec::new();
17 for reactive_relation in ctx.parent_value.try_downcast_ref::<Vec<ReactiveRelation>>()? {
18 trace!("Deleting relation instance {reactive_relation}");
19 let id = reactive_relation.id();
20 relation_instance_manager.delete(&id);
21 ids.push(id);
22 }
23 Ok(Some(FieldValue::list(ids.iter().map(|id| FieldValue::value(ID(id.to_string()))))))
24 })
25 })
26}