import strawberry from typing import List, Optional from datetime import datetime from strawberry.types import Info from app.utils.format import get_image_url from app.graphql.context import CustomContext @strawberry.type class UserType: id: strawberry.ID email: str name: Optional[str] handle: Optional[str] avatar: Optional[str] following_count: int follower_count: int created_at: datetime # 动态解析字段:例如自动处理头像的绝对路径 @strawberry.field def avatar_url(self) -> Optional[str]: return get_image_url(self.avatar) if self.avatar else None @strawberry.type class WorkspaceMemberType: id: strawberry.ID workspace_id: str user_id: Optional[str] role: str status: str @strawberry.type class WorkspaceType: id: strawberry.ID name: str slug: str logo: Optional[str] description: Optional[str] storage_used: int # 支持前端按需加载关联的成员 @strawberry.field def members(self, info: Info) -> List[WorkspaceMemberType]: return info.context.members_loader.load(self.id)