Refactor code structure for improved readability and maintainability
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
|
||||
from fastapi import APIRouter
|
||||
|
||||
from app.api.v1 import auth, main
|
||||
from app.api.v1 import auth, main, socket
|
||||
|
||||
# V1 API router with v1 prefix
|
||||
api_router = APIRouter(prefix="/v1")
|
||||
@@ -10,3 +10,4 @@ api_router = APIRouter(prefix="/v1")
|
||||
# Include all route modules
|
||||
api_router.include_router(main.router, tags=["main"])
|
||||
api_router.include_router(auth.router, prefix="/auth", tags=["authentication"])
|
||||
api_router.include_router(socket.router, tags=["socket"])
|
||||
|
||||
66
app/api/v1/socket.py
Normal file
66
app/api/v1/socket.py
Normal file
@@ -0,0 +1,66 @@
|
||||
"""Socket.IO API endpoints for WebSocket management."""
|
||||
|
||||
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: User = Depends(get_current_user)):
|
||||
"""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: User = Depends(get_current_user),
|
||||
):
|
||||
"""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: User = Depends(get_current_user),
|
||||
):
|
||||
"""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",
|
||||
}
|
||||
Reference in New Issue
Block a user