From e76b19998dc12fd1674b915b5c98c6206a2d9a40 Mon Sep 17 00:00:00 2001 From: Michael Woods Date: Sun, 21 Dec 2025 21:56:31 -0500 Subject: [PATCH] message changes --- packetserver/http/routers/messages.py | 49 +++++++++++++++++++++++++-- 1 file changed, 47 insertions(+), 2 deletions(-) diff --git a/packetserver/http/routers/messages.py b/packetserver/http/routers/messages.py index 41ecc27..ed2938d 100644 --- a/packetserver/http/routers/messages.py +++ b/packetserver/http/routers/messages.py @@ -1,5 +1,5 @@ # packetserver/http/routers/messages.py -from fastapi import APIRouter, Depends, Query, HTTPException +from fastapi import APIRouter, Depends, Query, HTTPException, Path from typing import Optional from datetime import datetime from persistent.mapping import PersistentMapping @@ -62,4 +62,49 @@ async def get_messages( messages.sort(key=lambda m: m["sent_at"], reverse=True) - return {"messages": messages[:limit], "total_returned": len(messages[:limit])} \ No newline at end of file + return {"messages": messages[:limit], "total_returned": len(messages[:limit])} + +@router.get("/messages/{msg_id}") +async def get_message( + msg_id: str = Path(..., description="UUID of the message (as string)"), + mark_retrieved: bool = Query(False, description="If true, mark message as retrieved/read"), + current_user: HttpUser = Depends(get_current_http_user) +): + from packetserver.runners.http_server import get_db_connection + conn = get_db_connection() + root = conn.root() + + username = current_user.username + + messages_root = root.get('messages', {}) + mailbox = messages_root.get(username) + if not mailbox: + raise HTTPException(status_code=404, detail="Mailbox not found") + + # Find message by ID + target_msg = None + for msg in mailbox: + if str(msg.msg_id) == msg_id: + target_msg = msg + break + + if not target_msg: + raise HTTPException(status_code=404, detail="Message not found") + + # Optionally mark as retrieved + if mark_retrieved and not target_msg.retrieved: + target_msg.retrieved = True + target_msg._p_changed = True + mailbox._p_changed = True + transaction.commit() + + return { + "id": str(target_msg.msg_id), + "from": target_msg.msg_from or "UNKNOWN", + "to": list(target_msg.msg_to), + "sent_at": target_msg.sent_at.isoformat() + "Z", + "text": target_msg.text, + "retrieved": target_msg.retrieved, + "has_attachments": len(target_msg.attachments) > 0, + # Future: "attachments": [...] metadata + } \ No newline at end of file