Store branding uploads in persistent storage

This commit is contained in:
A R R R Associates
2026-07-02 23:33:04 +05:30
parent c6d363d64b
commit b4b8dc97fd
2 changed files with 8 additions and 4 deletions
+5 -3
View File
@@ -1,4 +1,4 @@
from __future__ import annotations from __future__ import annotations
from datetime import date, datetime, time, timezone from datetime import date, datetime, time, timezone
from pathlib import Path from pathlib import Path
@@ -769,7 +769,8 @@ def branch_edit_submit(
# ----------------------------- # -----------------------------
# Phase 7Q.2 - Firm Branding Settings # Phase 7Q.2 - Firm Branding Settings
# ----------------------------- # -----------------------------
BRANDING_UPLOAD_ROOT = Path("app/ui/static/uploads/branding") BRANDING_UPLOAD_ROOT = Path("/app/data/storage/uploads/branding")
BRANDING_PUBLIC_PREFIX = "/storage/uploads/branding"
_ALLOWED_BRANDING_SUFFIXES = {".png", ".jpg", ".jpeg", ".webp", ".ico", ".svg"} _ALLOWED_BRANDING_SUFFIXES = {".png", ".jpg", ".jpeg", ".webp", ".ico", ".svg"}
_HEX_COLOR_RE = re.compile(r"^#[0-9a-fA-F]{6}$") _HEX_COLOR_RE = re.compile(r"^#[0-9a-fA-F]{6}$")
@@ -846,7 +847,7 @@ async def _save_branding_upload(upload: UploadFile | None, *, tenant_id: int, ki
filename = f"{kind}_{uuid4().hex}{suffix}" filename = f"{kind}_{uuid4().hex}{suffix}"
path = folder / filename path = folder / filename
path.write_bytes(data) path.write_bytes(data)
return "/static/uploads/branding/" + f"tenant_{tenant_id}/{filename}" return f"{BRANDING_PUBLIC_PREFIX}/tenant_{tenant_id}/{filename}"
@router.get("/branding") @router.get("/branding")
@@ -1491,3 +1492,4 @@ def switch_active_branch(request: Request, branch_id: int):
return _redirect_back(request) return _redirect_back(request)
finally: finally:
db.close() db.close()
+3 -1
View File
@@ -1,4 +1,4 @@
from fastapi import FastAPI from fastapi import FastAPI
from fastapi.staticfiles import StaticFiles from fastapi.staticfiles import StaticFiles
from app.modules.clients.ui import router as clients_ui_router, portal_router as client_portal_router from app.modules.clients.ui import router as clients_ui_router, portal_router as client_portal_router
@@ -28,6 +28,7 @@ from app.ui.routes.auth import router as auth_router
def mount_ui(app: FastAPI) -> None: def mount_ui(app: FastAPI) -> None:
app.mount("/static", StaticFiles(directory="app/ui/static"), name="static") app.mount("/static", StaticFiles(directory="app/ui/static"), name="static")
app.mount("/storage", StaticFiles(directory="/app/data/storage"), name="storage")
app.include_router(marketplace_public_router) app.include_router(marketplace_public_router)
app.include_router(auth_router) app.include_router(auth_router)
app.include_router(system_settings_router) app.include_router(system_settings_router)
@@ -55,3 +56,4 @@ def mount_ui(app: FastAPI) -> None:
app.include_router(engagements_ui_router) app.include_router(engagements_ui_router)
app.include_router(client_portal_router) app.include_router(client_portal_router)
app.include_router(consultant_portal_router) app.include_router(consultant_portal_router)