feat(fase3): add Queue and QuickReply API schemas

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Claude AI
2026-01-29 10:54:26 +00:00
parent aca30d8dc2
commit cb25cf782d
2 changed files with 116 additions and 0 deletions

View File

@@ -15,6 +15,17 @@ from app.schemas.flow import (
FlowResponse,
FlowListResponse,
)
from app.schemas.queue import (
QueueCreate,
QueueUpdate,
QueueAgentAdd,
QueueAgentResponse,
QueueResponse,
QueueDetailResponse,
QuickReplyCreate,
QuickReplyUpdate,
QuickReplyResponse,
)
__all__ = [
"LoginRequest",
@@ -30,4 +41,13 @@ __all__ = [
"FlowUpdate",
"FlowResponse",
"FlowListResponse",
"QueueCreate",
"QueueUpdate",
"QueueAgentAdd",
"QueueAgentResponse",
"QueueResponse",
"QueueDetailResponse",
"QuickReplyCreate",
"QuickReplyUpdate",
"QuickReplyResponse",
]

View File

@@ -0,0 +1,96 @@
from pydantic import BaseModel
from typing import Optional, List
from uuid import UUID
from datetime import datetime
from app.models.queue import AssignmentMethod
class QueueCreate(BaseModel):
name: str
description: Optional[str] = None
assignment_method: AssignmentMethod = AssignmentMethod.ROUND_ROBIN
max_per_agent: int = 10
sla_first_response: int = 300
sla_resolution: int = 86400
business_hours: Optional[dict] = None
fallback_flow_id: Optional[UUID] = None
class QueueUpdate(BaseModel):
name: Optional[str] = None
description: Optional[str] = None
assignment_method: Optional[AssignmentMethod] = None
max_per_agent: Optional[int] = None
sla_first_response: Optional[int] = None
sla_resolution: Optional[int] = None
business_hours: Optional[dict] = None
fallback_flow_id: Optional[UUID] = None
is_active: Optional[bool] = None
class QueueAgentAdd(BaseModel):
user_id: UUID
is_supervisor: bool = False
skills: List[str] = []
class QueueAgentResponse(BaseModel):
id: UUID
user_id: UUID
user_name: Optional[str] = None
user_email: Optional[str] = None
is_supervisor: bool
skills: List[str]
created_at: datetime
class Config:
from_attributes = True
class QueueResponse(BaseModel):
id: UUID
name: str
description: Optional[str]
assignment_method: AssignmentMethod
max_per_agent: int
sla_first_response: int
sla_resolution: int
business_hours: Optional[dict]
fallback_flow_id: Optional[UUID]
is_active: bool
created_at: datetime
agent_count: Optional[int] = 0
class Config:
from_attributes = True
class QueueDetailResponse(QueueResponse):
agents: List[QueueAgentResponse] = []
class QuickReplyCreate(BaseModel):
shortcut: str
content: str
attachments: List[dict] = []
queue_id: Optional[UUID] = None
class QuickReplyUpdate(BaseModel):
shortcut: Optional[str] = None
content: Optional[str] = None
attachments: Optional[List[dict]] = None
queue_id: Optional[UUID] = None
class QuickReplyResponse(BaseModel):
id: UUID
shortcut: str
content: str
attachments: List[dict]
queue_id: Optional[UUID]
created_by: UUID
created_at: datetime
class Config:
from_attributes = True