reactive_graph_graphql_impl/
graphql_query_service_impl.rs

1use std::sync::Arc;
2
3use async_graphql::Request;
4use async_graphql::Response;
5use async_trait::async_trait;
6use log::info;
7use springtime_di::Component;
8use springtime_di::component_alias;
9
10use reactive_graph_graphql_api::GraphQLQueryService;
11use reactive_graph_graphql_api::GraphQLSchemaManager;
12use reactive_graph_lifecycle::Lifecycle;
13
14#[derive(Component)]
15pub struct GraphQLQueryServiceImpl {
16    graphql_schema_manager: Arc<dyn GraphQLSchemaManager + Send + Sync>,
17}
18
19impl GraphQLQueryServiceImpl {}
20
21#[async_trait]
22#[component_alias]
23impl GraphQLQueryService for GraphQLQueryServiceImpl {
24    async fn query(&self, request: &str) -> Result<String, serde_json::Error> {
25        info!("Run query: {request}");
26        let schema = self.graphql_schema_manager.get_schema();
27        let result = schema.execute(request).await;
28        serde_json::to_string(&result)
29    }
30
31    async fn query_response(&self, request: &str) -> Response {
32        self.graphql_schema_manager.get_schema().execute(request).await
33    }
34
35    async fn execute(&self, request: Request) -> Response {
36        self.graphql_schema_manager.get_schema().execute(request).await
37    }
38}
39
40#[async_trait]
41impl Lifecycle for GraphQLQueryServiceImpl {
42    async fn post_init(&self) {}
43}