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