From 3f96c9c6502243b06efd4bb34a189e72e3a5557c Mon Sep 17 00:00:00 2001
From: yearning <10538594+wangweifeng1999@user.noreply.gitee.com>
Date: 星期一, 28 九月 2026 19:24:55 +0800
Subject: [PATCH] 复制项目

---
 backend/app/system_settings.py |   54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 54 insertions(+), 0 deletions(-)

diff --git a/backend/app/system_settings.py b/backend/app/system_settings.py
new file mode 100644
index 0000000..86db83a
--- /dev/null
+++ b/backend/app/system_settings.py
@@ -0,0 +1,54 @@
+from pathlib import Path
+
+from sqlalchemy.orm import Session
+
+from app.config import ROOT
+from app.models import AppSettings
+
+UPLOAD_DIR = ROOT / "backend" / "data" / "uploads"
+LOGO_BASENAME = "site_logo"
+DEFAULT_SYSTEM_NAME = "鑰冭瘯闃呭嵎绯荤粺"
+
+
+def ensure_upload_dir() -> None:
+    UPLOAD_DIR.mkdir(parents=True, exist_ok=True)
+
+
+def get_or_create_settings(db: Session) -> AppSettings:
+    row = db.get(AppSettings, 1)
+    if not row:
+        row = AppSettings(id=1, system_name=DEFAULT_SYSTEM_NAME, logo_ext="")
+        db.add(row)
+        db.commit()
+        db.refresh(row)
+    return row
+
+
+def logo_path(ext: str) -> Path:
+    return UPLOAD_DIR / f"{LOGO_BASENAME}.{ext}"
+
+
+def find_logo_file(ext: str | None) -> Path | None:
+    if ext:
+        p = logo_path(ext)
+        if p.is_file():
+            return p
+    ensure_upload_dir()
+    for p in UPLOAD_DIR.glob(f"{LOGO_BASENAME}.*"):
+        if p.is_file():
+            return p
+    return None
+
+
+def clear_logo_files() -> None:
+    ensure_upload_dir()
+    for p in UPLOAD_DIR.glob(f"{LOGO_BASENAME}.*"):
+        p.unlink(missing_ok=True)
+
+
+def public_logo_url(ext: str | None) -> str | None:
+    if ext and find_logo_file(ext):
+        return "/api/settings/logo"
+    if find_logo_file(None):
+        return "/api/settings/logo"
+    return None

--
Gitblit v1.8.0