introduce graphql
This commit is contained in:
@@ -0,0 +1,44 @@
|
||||
import strawberry
|
||||
from typing import List, Optional
|
||||
from datetime import datetime
|
||||
from app.utils.format import get_image_url
|
||||
|
||||
@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 WorkspaceType:
|
||||
id: strawberry.ID
|
||||
name: str
|
||||
slug: str
|
||||
logo: Optional[str]
|
||||
description: Optional[str]
|
||||
storage_used: int
|
||||
|
||||
# 支持前端按需加载关联的成员
|
||||
@strawberry.field
|
||||
def members(self, info) -> List["WorkspaceMemberType"]:
|
||||
from app.models import WorkspaceMember
|
||||
db = info.context.db
|
||||
return db.query(WorkspaceMember).filter(WorkspaceMember.workspace_id == self.id).all()
|
||||
|
||||
@strawberry.type
|
||||
class WorkspaceMemberType:
|
||||
id: strawberry.ID
|
||||
workspace_id: str
|
||||
user_id: Optional[str]
|
||||
role: str
|
||||
status: str
|
||||
Reference in New Issue
Block a user