Implement actual reply

This commit is contained in:
2025-09-19 16:10:09 +03:00
Unverified
parent c5f976b4d6
commit a5e1139a6c
3 changed files with 12 additions and 46 deletions
+1
View File
@@ -82,6 +82,7 @@ class RegisterRequest(BaseModel):
class SendMessageRequest(BaseModel): class SendMessageRequest(BaseModel):
content: str content: str
reply_to_id: int | None
class EditMessageRequest(BaseModel): class EditMessageRequest(BaseModel):
+7 -45
View File
@@ -29,6 +29,12 @@ async def send_message(
current_user: User = Depends(get_current_user), current_user: User = Depends(get_current_user),
db: Session = Depends(get_db) db: Session = Depends(get_db)
): ):
if request.reply_to_id:
# Check if the message being replied to exists
original_message = db.query(Message).filter(Message.id == request.reply_to_id).first()
if not original_message:
raise HTTPException(status_code=404, detail="Original message not found")
if not request.content.strip(): if not request.content.strip():
raise HTTPException( raise HTTPException(
status_code=400, status_code=400,
@@ -44,6 +50,7 @@ async def send_message(
new_message = Message( new_message = Message(
content=request.content.strip(), content=request.content.strip(),
user_id=current_user.id, user_id=current_user.id,
reply_to_id=request.reply_to_id,
timestamp=datetime.now() timestamp=datetime.now()
) )
@@ -191,35 +198,6 @@ async def delete_message(
return {"status": "success", "message_id": message_id} return {"status": "success", "message_id": message_id}
@router.post("/reply_message")
async def reply_message(
request: ReplyMessageRequest,
current_user: User = Depends(get_current_user),
db: Session = Depends(get_db)
):
# Check if the message being replied to exists
original_message = db.query(Message).filter(Message.id == request.reply_to_id).first()
if not original_message:
raise HTTPException(status_code=404, detail="Original message not found")
if not request.content.strip():
raise HTTPException(status_code=400, detail="No content provided")
new_message = Message(
content=request.content.strip(),
user_id=current_user.id,
timestamp=datetime.now(),
reply_to_id=request.reply_to_id
)
db.add(new_message)
db.commit()
db.refresh(new_message)
return {"status": "success", "message": convert_message(new_message)}
class MessaggingSocketManager: class MessaggingSocketManager:
def __init__(self) -> None: def __init__(self) -> None:
self.connections: list[WebSocket] = [] self.connections: list[WebSocket] = []
@@ -356,22 +334,6 @@ class MessaggingSocketManager:
"data": {"message_id": message_id} "data": {"message_id": message_id}
}) })
await websocket.send_json({"type": type, "data": response})
except HTTPException as e:
await self.send_error(websocket, type, e)
elif type == "replyMessage":
try:
current_user = get_current_user_inner()
if not current_user:
raise HTTPException(401)
request: ReplyMessageRequest = ReplyMessageRequest.model_validate(data["data"])
response = await reply_message(request, current_user, db)
await self.broadcast({
"type": "newMessage",
"data": response["message"]
})
await websocket.send_json({"type": type, "data": response}) await websocket.send_json({"type": type, "data": response})
except HTTPException as e: except HTTPException as e:
await self.send_error(websocket, type, e) await self.send_error(websocket, type, e)
+4 -1
View File
@@ -66,7 +66,10 @@ export class PublicChatPanel extends MessagePanel {
try { try {
const response = await request({ const response = await request({
data: { content: content.trim(), ...(replyToId ? { reply_to_id: replyToId } : {}) }, data: {
content: content.trim(),
reply_to_id: replyToId ?? null
},
credentials: { credentials: {
scheme: "Bearer", scheme: "Bearer",
credentials: this.currentUser.authToken credentials: this.currentUser.authToken