use async_graphql::{Context, Object}; use como_domain::{ item::{queries::GetItemQuery, ItemDto, ItemState}, projects::queries::GetProjectQuery, }; use como_infrastructure::register::ServiceRegister; use uuid::Uuid; use crate::projects::Project; pub struct CreatedItem { pub id: Uuid, } #[Object] impl CreatedItem { pub async fn item(&self, ctx: &Context<'_>) -> anyhow::Result { let context = ctx.data_unchecked::(); let item = ctx .data_unchecked::() .item_service .get_item(context, GetItemQuery { item_id: self.id }) .await?; Ok(item.into()) } } pub struct Item { pub id: Uuid, pub title: String, pub description: Option, pub state: ItemState, pub project_id: Uuid, } #[Object] impl Item { pub async fn id(&self, _ctx: &Context<'_>) -> anyhow::Result { return Ok(self.id); } pub async fn title(&self, _ctx: &Context<'_>) -> anyhow::Result { return Ok(self.title.clone()); } pub async fn description(&self, _ctx: &Context<'_>) -> anyhow::Result> { return Ok(self.description.clone()); } pub async fn state(&self, _ctx: &Context<'_>) -> anyhow::Result { return Ok(self.state); } pub async fn project(&self, ctx: &Context<'_>) -> anyhow::Result { let context = ctx.data_unchecked::(); let project = ctx .data_unchecked::() .project_service .get_project( context, GetProjectQuery { project_id: self.project_id, }, ) .await?; Ok(project.into()) } pub async fn project_id(&self, _ctx: &Context<'_>) -> anyhow::Result { return Ok(self.project_id); } } impl From for Item { fn from(dto: ItemDto) -> Self { Self { id: dto.id, title: dto.title, description: dto.description, state: dto.state, project_id: dto.project_id, } } }