feat(fase3): add Queue and QuickReply API schemas
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -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",
|
||||
]
|
||||
|
||||
96
services/api-gateway/app/schemas/queue.py
Normal file
96
services/api-gateway/app/schemas/queue.py
Normal 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
|
||||
Reference in New Issue
Block a user