reactive_graph_graphql_impl/
graphql_query_service_impl.rs1use 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}