diff --git a/backend/routes/messaging.py b/backend/routes/messaging.py index c494a47..f5e21fd 100644 --- a/backend/routes/messaging.py +++ b/backend/routes/messaging.py @@ -710,15 +710,16 @@ async def get_dm_conversations(request: Request, current_user: User = Depends(ge } -@router.put("/edit_message/{message_id}") -@rate_limit_per_ip("20/minute") -async def edit_message( - request: Request, +async def _edit_message_internal( message_id: int, edit_request: EditMessageRequest, - current_user: User = Depends(get_current_user), - db: Session = Depends(get_db) -): + current_user: User, + db: Session +) -> dict: + """Internal function to edit a message without requiring a Request object. + + This can be called from both HTTP endpoints and WebSocket handlers. + """ message = db.query(Message).filter(Message.id == message_id).first() if not message: @@ -767,6 +768,18 @@ async def edit_message( return {"status": "success", "message": payload} +@router.put("/edit_message/{message_id}") +@rate_limit_per_ip("20/minute") +async def edit_message( + request: Request, + message_id: int, + edit_request: EditMessageRequest, + current_user: User = Depends(get_current_user), + db: Session = Depends(get_db) +): + return await _edit_message_internal(message_id, edit_request, current_user, db) + + @router.delete("/delete_message/{message_id}") async def delete_message( message_id: int, diff --git a/backend/websocket/handlers.py b/backend/websocket/handlers.py index beee083..aa33fc0 100644 --- a/backend/websocket/handlers.py +++ b/backend/websocket/handlers.py @@ -3,13 +3,14 @@ import json import logging import time from typing import Any -from fastapi import HTTPException, WebSocket +from fastapi import HTTPException, WebSocket, Request from sqlalchemy.orm import Session from websocket.registry import WebSocketHandlerRegistry from routes.messaging import ( MessaggingSocketManager, _send_message_internal, + _edit_message_internal, get_messages, edit_message, delete_message, @@ -211,14 +212,11 @@ async def dmSend(manager: MessaggingSocketManager, websocket: WebSocket, db: Ses @websocket_handler("editMessage", authRequired=True) async def editMessage(manager: MessaggingSocketManager, websocket: WebSocket, db: Session, user: User, data: dict) -> dict | None: """Edit a public chat message.""" - from types import SimpleNamespace message_id = data["message_id"] - request: EditMessageRequest = EditMessageRequest.model_validate(data) + edit_request: EditMessageRequest = EditMessageRequest.model_validate(data) - # Create a dummy request object for the HTTP endpoint function - dummy_request = SimpleNamespace() - response = await edit_message(dummy_request, message_id, request, user, db) + response = await _edit_message_internal(message_id, edit_request, user, db) await manager.broadcast({ "type": "messageEdited", "data": response["message"]