"""Socket.IO API endpoints for WebSocket management.""" from typing import Annotated from fastapi import APIRouter, Depends from app.core.dependencies import get_current_user from app.models.user import User from app.services.socket import socket_manager router = APIRouter(prefix="/socket", tags=["socket"]) @router.get("/status") async def get_socket_status( current_user: Annotated[User, Depends(get_current_user)], ) -> dict[str, int | bool]: """Get current socket connection status.""" connected_users = socket_manager.get_connected_users() return { "connected": str(current_user.id) in connected_users, "user_id": current_user.id, "total_connected": len(connected_users), } @router.post("/send-message") async def send_message_to_user( target_user_id: int, message: str, current_user: Annotated[User, Depends(get_current_user)], ) -> dict[str, int | bool | str]: """Send a message to a specific user via WebSocket.""" success = await socket_manager.send_to_user( str(target_user_id), "user_message", { "from_user_id": current_user.id, "from_user_name": current_user.name, "message": message, }, ) return { "success": success, "target_user_id": target_user_id, "message": "Message sent" if success else "User not connected", } @router.post("/broadcast") async def broadcast_message( message: str, current_user: Annotated[User, Depends(get_current_user)], ) -> dict[str, bool | str]: """Broadcast a message to all connected users.""" await socket_manager.broadcast_to_all( "broadcast_message", { "from_user_id": current_user.id, "from_user_name": current_user.name, "message": message, }, ) return { "success": True, "message": "Message broadcasted to all users", }