import logging
from fastapi import APIRouter, Request
from devplacepy.database import get_table
from devplacepy.attachments import soft_delete_attachment, restore_attachment
from devplacepy.utils import require_user, require_admin, is_admin, not_found
from devplacepy.responses import action_result, wants_json, json_error
logger = logging.getLogger(__name__)
router = APIRouter()
def _media_redirect(request: Request, attachment: dict) -> str:
referer = request.headers.get("referer", "")
if referer:
return referer
uploader = get_table("users").find_one(uid=attachment.get("user_uid"))
if uploader:
return f"/profile/{uploader['username']}?tab=media"
return "/feed"
@router.post("/{uid}/delete")
async def delete_media(request: Request, uid: str):
user = require_user(request)
attachment = get_table("attachments").find_one(uid=uid)
if not attachment:
raise not_found("Media not found")
if attachment.get("user_uid") != user["uid"] and not is_admin(user):
if wants_json(request):
return json_error(403, "Not allowed")
return action_result(request, _media_redirect(request, attachment))
soft_delete_attachment(uid)
logger.info(f"Media {uid} soft-deleted by {user['username']}")
return action_result(request, _media_redirect(request, attachment))
@router.post("/{uid}/restore")
async def restore_media(request: Request, uid: str):
admin = require_admin(request)
restore_attachment(uid)
logger.info(f"Media {uid} restored by {admin['username']}")
return action_result(request, "/admin/media")