feat(fase3): add agent status update and list endpoints
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -17,6 +17,7 @@ from app.schemas.auth import (
|
|||||||
TokenResponse,
|
TokenResponse,
|
||||||
UserResponse,
|
UserResponse,
|
||||||
CreateUserRequest,
|
CreateUserRequest,
|
||||||
|
UpdateStatusRequest,
|
||||||
)
|
)
|
||||||
|
|
||||||
router = APIRouter(prefix="/auth", tags=["auth"])
|
router = APIRouter(prefix="/auth", tags=["auth"])
|
||||||
@@ -94,3 +95,51 @@ def register_first_admin(request: CreateUserRequest, db: Session = Depends(get_d
|
|||||||
db.refresh(user)
|
db.refresh(user)
|
||||||
|
|
||||||
return UserResponse.model_validate(user)
|
return UserResponse.model_validate(user)
|
||||||
|
|
||||||
|
|
||||||
|
@router.put("/me/status")
|
||||||
|
def update_my_status(
|
||||||
|
request: UpdateStatusRequest,
|
||||||
|
db: Session = Depends(get_db),
|
||||||
|
current_user: User = Depends(get_current_user),
|
||||||
|
):
|
||||||
|
current_user.status = request.status
|
||||||
|
db.commit()
|
||||||
|
return {"success": True, "status": request.status.value}
|
||||||
|
|
||||||
|
|
||||||
|
@router.get("/agents")
|
||||||
|
def list_agents(
|
||||||
|
db: Session = Depends(get_db),
|
||||||
|
current_user: User = Depends(get_current_user),
|
||||||
|
):
|
||||||
|
"""List all agents with their status and conversation counts"""
|
||||||
|
from app.models.whatsapp import Conversation, ConversationStatus
|
||||||
|
|
||||||
|
agents = db.query(User).filter(User.is_active == True).all()
|
||||||
|
result = []
|
||||||
|
|
||||||
|
for agent in agents:
|
||||||
|
active_count = (
|
||||||
|
db.query(Conversation)
|
||||||
|
.filter(
|
||||||
|
Conversation.assigned_to == agent.id,
|
||||||
|
Conversation.status.in_(
|
||||||
|
[ConversationStatus.ACTIVE, ConversationStatus.WAITING]
|
||||||
|
),
|
||||||
|
)
|
||||||
|
.count()
|
||||||
|
)
|
||||||
|
|
||||||
|
result.append(
|
||||||
|
{
|
||||||
|
"id": str(agent.id),
|
||||||
|
"name": agent.name,
|
||||||
|
"email": agent.email,
|
||||||
|
"role": agent.role.value,
|
||||||
|
"status": agent.status.value,
|
||||||
|
"active_conversations": active_count,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
return result
|
||||||
|
|||||||
@@ -43,3 +43,7 @@ class CreateUserRequest(BaseModel):
|
|||||||
password: str
|
password: str
|
||||||
name: str
|
name: str
|
||||||
role: UserRole = UserRole.AGENT
|
role: UserRole = UserRole.AGENT
|
||||||
|
|
||||||
|
|
||||||
|
class UpdateStatusRequest(BaseModel):
|
||||||
|
status: UserStatus
|
||||||
|
|||||||
Reference in New Issue
Block a user