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
|