132 lines
2.9 KiB
Python
132 lines
2.9 KiB
Python
"""SDK 数据模型 - 与服务端响应对应的 Pydantic 模型"""
|
|||
|
|
from datetime import datetime
|
||
|
|
|
||
|
|
from pydantic import BaseModel, ConfigDict
|
||
|
|
|
||
|
|
|
||
|
|
class Worker(BaseModel):
|
||
|
|
"""Worker 模型"""
|
||
|
|
id: str
|
||
|
|
name: str
|
||
|
|
type: str
|
||
|
|
description: str | None = None
|
||
|
|
capabilities: dict | None = None
|
||
|
|
status: str
|
||
|
|
created_at: datetime
|
||
|
|
last_seen_at: datetime | None = None
|
||
|
|
organization: str | None = None
|
||
|
|
location: str | None = None
|
||
|
|
timezone: str | None = None
|
||
|
|
avatar_url: str | None = None
|
||
|
|
tags: list | None = None
|
||
|
|
max_concurrent_tasks: int | None = None
|
||
|
|
|
||
|
|
model_config = ConfigDict(from_attributes=True)
|
||
|
|
|
||
|
|
|
||
|
|
class TaskParticipant(BaseModel):
|
||
|
|
"""任务参与者模型"""
|
||
|
|
id: str
|
||
|
|
task_id: str
|
||
|
|
worker_id: str
|
||
|
|
is_creator: bool
|
||
|
|
joined_at: datetime
|
||
|
|
|
||
|
|
model_config = ConfigDict(from_attributes=True)
|
||
|
|
|
||
|
|
|
||
|
|
class Task(BaseModel):
|
||
|
|
"""任务模型"""
|
||
|
|
id: str
|
||
|
|
title: str
|
||
|
|
description: str | None = None
|
||
|
|
status: str
|
||
|
|
priority: str
|
||
|
|
creator_id: str
|
||
|
|
parent_id: str | None = None
|
||
|
|
tags: list[str] | None = None
|
||
|
|
deadline: datetime | None = None
|
||
|
|
result: str | None = None
|
||
|
|
metadata: dict | None = None
|
||
|
|
created_at: datetime
|
||
|
|
updated_at: datetime
|
||
|
|
last_message_at: datetime | None = None
|
||
|
|
participants: list[TaskParticipant] | None = None
|
||
|
|
|
||
|
|
model_config = ConfigDict(from_attributes=True)
|
||
|
|
|
||
|
|
|
||
|
|
class Message(BaseModel):
|
||
|
|
"""消息模型"""
|
||
|
|
id: str
|
||
|
|
task_id: str
|
||
|
|
sender_id: str
|
||
|
|
content: str
|
||
|
|
type: str
|
||
|
|
reply_to_id: str | None = None
|
||
|
|
created_at: datetime
|
||
|
|
mention_type: str = "none"
|
||
|
|
mention_ids: list[str] | None = None
|
||
|
|
scope: str = "chat"
|
||
|
|
private_to_id: str | None = None
|
||
|
|
|
||
|
|
model_config = ConfigDict(from_attributes=True)
|
||
|
|
|
||
|
|
|
||
|
|
class Notification(BaseModel):
|
||
|
|
"""通知模型"""
|
||
|
|
id: str
|
||
|
|
worker_id: str
|
||
|
|
event_type: str
|
||
|
|
payload: dict | None = None
|
||
|
|
is_read: bool
|
||
|
|
created_at: datetime
|
||
|
|
|
||
|
|
model_config = ConfigDict(from_attributes=True)
|
||
|
|
|
||
|
|
|
||
|
|
class Event(BaseModel):
|
||
|
|
"""WebSocket 推送的实时事件"""
|
||
|
|
event_type: str
|
||
|
|
payload: dict
|
||
|
|
timestamp: str
|
||
|
|
|
||
|
|
model_config = ConfigDict(from_attributes=True)
|
||
|
|
|
||
|
|
|
||
|
|
class Organization(BaseModel):
|
||
|
|
"""组织模型"""
|
||
|
|
id: str
|
||
|
|
name: str
|
||
|
|
description: str | None
|
||
|
|
created_by: str
|
||
|
|
created_at: datetime
|
||
|
|
member_count: int = 0
|
||
|
|
|
||
|
|
model_config = ConfigDict(from_attributes=True)
|
||
|
|
|
||
|
|
|
||
|
|
class OrgMember(BaseModel):
|
||
|
|
"""组织成员模型"""
|
||
|
|
worker_id: str
|
||
|
|
worker_name: str
|
||
|
|
worker_type: str
|
||
|
|
role: str # "admin" | "member"
|
||
|
|
joined_at: datetime
|
||
|
|
|
||
|
|
model_config = ConfigDict(from_attributes=True)
|
||
|
|
|
||
|
|
|
||
|
|
class OrgInvite(BaseModel):
|
||
|
|
"""组织邀请码模型"""
|
||
|
|
id: str
|
||
|
|
org_id: str
|
||
|
|
code: str
|
||
|
|
created_by: str
|
||
|
|
expires_at: datetime | None
|
||
|
|
max_uses: int | None
|
||
|
|
used_count: int
|
||
|
|
created_at: datetime
|
||
|
|
|
||
|
|
model_config = ConfigDict(from_attributes=True)
|