Files
sdb2-backend/app/api/v1/socket.py
JSC 95ccb76233
All checks were successful
Backend CI / test (push) Successful in 3m58s
fix: Lint fixes of api and repositories
2025-07-31 22:29:11 +02:00

71 lines
1.9 KiB
Python

"""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",
}