diff --git a/src/gql/user.rs b/src/gql/user.rs index 8c6cf4c..13bd0da 100644 --- a/src/gql/user.rs +++ b/src/gql/user.rs @@ -1,4 +1,4 @@ -use async_graphql::{Context, Object, Result, SimpleObject}; +use async_graphql::{ComplexObject, Context, Object, Result, SimpleObject}; use ecow::EcoString; use super::error::Error; @@ -31,6 +31,7 @@ impl UserQuery { } #[derive(Debug, Clone, SimpleObject)] +#[graphql(complex)] pub struct User { pub user_id: String, pub group_id: Option, @@ -48,3 +49,40 @@ impl From for User { } } } + +#[ComplexObject] +impl User { + async fn group<'ctx>(&self, ctx: &Context<'ctx>) -> Result> { + tracing::debug!("Running GraphQL query 'group'"); + + let Some(group_id) = self.group_id else { + return Ok(None); + }; + + let pool = ctx.data::()?; + let group = db::get_group(pool, group_id).await?; + + Ok(Some(group.into())) + } +} + +#[derive(SimpleObject)] +pub struct Group { + pub group_id: i64, + pub name: String, + pub description: String, + pub created_at: chrono::DateTime, + pub updated_at: chrono::DateTime, +} + +impl From for Group { + fn from(group: db::Group) -> Self { + Self { + group_id: group.group_id, + name: group.name, + description: group.description, + created_at: group.created_at, + updated_at: group.updated_at, + } + } +}