fix missing type annotations for graphql query field arguments
This commit is contained in:
@@ -20,3 +20,7 @@ preset:
|
||||
- "app/db.py"
|
||||
- "app/auth.py"
|
||||
- "app/main.py"
|
||||
|
||||
graphql:
|
||||
- "app/graphql/*"
|
||||
- "app/main.py"
|
||||
@@ -7,7 +7,6 @@ from typing import List
|
||||
from collections import defaultdict
|
||||
from app.db import SessionLocal
|
||||
from app.models import WorkspaceMember
|
||||
from app.graphql.types import WorkspaceMemberType
|
||||
from typing import AsyncGenerator
|
||||
|
||||
# 定义批量查询函数:接收一组 workspace ID 列表,返回相同长度的结果列表
|
||||
@@ -33,6 +32,8 @@ class CustomContext(BaseContext):
|
||||
self.db = SessionLocal()
|
||||
self.request = request
|
||||
|
||||
self.members_loader = DataLoader(load_fn=load_members_by_workspace_ids)
|
||||
|
||||
async def get_current_user(self) -> User | None:
|
||||
# 复用现有的 auth 逻辑
|
||||
try:
|
||||
|
||||
@@ -1,18 +1,21 @@
|
||||
import strawberry
|
||||
from typing import Optional
|
||||
from strawberry.types import Info
|
||||
|
||||
from app.graphql.types import UserType
|
||||
from app.models import User
|
||||
from app.graphql.context import CustomContext
|
||||
|
||||
@strawberry.type
|
||||
class Query:
|
||||
@strawberry.field
|
||||
async def me(self, info) -> Optional[UserType]:
|
||||
async def me(self, info: Info[CustomContext, None]) -> Optional[UserType]:
|
||||
# 从 context 获取当前登录用户
|
||||
user = await info.context.get_current_user()
|
||||
# Strawberry 会自动将 SQLAlchemy 实例映射为 UserType
|
||||
return user
|
||||
|
||||
@strawberry.field
|
||||
def get_user_by_handle(self, info, handle: str) -> Optional[UserType]:
|
||||
def get_user_by_handle(self, info: Info[CustomContext, None], handle: str) -> Optional[UserType]:
|
||||
db = info.context.db
|
||||
return db.query(User).filter(User.handle == handle).first()
|
||||
+13
-12
@@ -1,7 +1,10 @@
|
||||
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:
|
||||
@@ -19,6 +22,14 @@ class UserType:
|
||||
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
|
||||
@@ -30,15 +41,5 @@ class WorkspaceType:
|
||||
|
||||
# 支持前端按需加载关联的成员
|
||||
@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
|
||||
def members(self, info: Info) -> List[WorkspaceMemberType]:
|
||||
return info.context.members_loader.load(self.id)
|
||||
Reference in New Issue
Block a user