Store branding uploads in persistent storage
This commit is contained in:
@@ -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
@@ -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)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user