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,
|
||||
UserResponse,
|
||||
CreateUserRequest,
|
||||
UpdateStatusRequest,
|
||||
)
|
||||
|
||||
router = APIRouter(prefix="/auth", tags=["auth"])
|
||||
@@ -94,3 +95,51 @@ def register_first_admin(request: CreateUserRequest, db: Session = Depends(get_d
|
||||
db.refresh(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
|
||||
name: str
|
||||
role: UserRole = UserRole.AGENT
|
||||
|
||||
|
||||
class UpdateStatusRequest(BaseModel):
|
||||
status: UserStatus
|
||||
|
||||
Reference in New Issue
Block a user