import uuid from fastapi import APIRouter, Depends from app.middleware.auth import get_current_user, require_any_role from app.services.minio_client import generate_presigned_upload_url, generate_presigned_download_url router = APIRouter(prefix="/upload", tags=["Upload"]) @router.post("/presigned-url") async def get_presigned_upload_url( filename: str, content_type: str = "image/jpeg", current_user: dict = Depends(require_any_role), ): """Get a presigned PUT URL for direct MinIO upload.""" import datetime today = datetime.date.today().isoformat() user_id = current_user["user_id"][:8] object_key = f"{today}/{user_id}/{uuid.uuid4()}.jpg" url = generate_presigned_upload_url(object_key) return { "upload_url": url, "object_key": object_key, } @router.get("/download-url") async def get_presigned_download_url( object_key: str, current_user: dict = Depends(get_current_user), ): """Get a presigned GET URL for viewing a photo (1 hour validity).""" url = generate_presigned_download_url(object_key) return {"download_url": url}