초기 커밋 - EV AS 관리 시스템
This commit is contained in:
69
backend/routers/settings.py
Normal file
69
backend/routers/settings.py
Normal file
@@ -0,0 +1,69 @@
|
||||
from fastapi import APIRouter, Depends, Form
|
||||
from sqlalchemy.orm import Session
|
||||
from datetime import datetime
|
||||
from typing import Optional
|
||||
from database import get_db
|
||||
import models
|
||||
from auth import require_admin
|
||||
|
||||
router = APIRouter(prefix="/api/settings", tags=["settings"])
|
||||
|
||||
# 이미지 설정 기본값
|
||||
IMAGE_DEFAULTS = {
|
||||
"image_compress_enabled": "true",
|
||||
"image_max_px": "1024",
|
||||
"image_quality": "85",
|
||||
}
|
||||
|
||||
def upsert(db, key, value):
|
||||
s = db.query(models.SystemSetting).filter_by(key=key).first()
|
||||
if s:
|
||||
s.value = value
|
||||
s.updated_at = datetime.now()
|
||||
else:
|
||||
db.add(models.SystemSetting(key=key, value=value))
|
||||
|
||||
# ── 공개 엔드포인트: 이미지 설정만 반환 (인증 불필요 — 신고 페이지에서 사용)
|
||||
@router.get("/public")
|
||||
def get_public_settings(db: Session = Depends(get_db)):
|
||||
rows = db.query(models.SystemSetting).filter(
|
||||
models.SystemSetting.key.in_(IMAGE_DEFAULTS.keys())
|
||||
).all()
|
||||
result = dict(IMAGE_DEFAULTS) # 기본값으로 채운 뒤
|
||||
for r in rows:
|
||||
result[r.key] = r.value # DB 값으로 덮어쓰기
|
||||
return {
|
||||
"image_compress_enabled": result["image_compress_enabled"] == "true",
|
||||
"image_max_px": int(result["image_max_px"]),
|
||||
"image_quality": int(result["image_quality"]),
|
||||
}
|
||||
|
||||
# ── 관리자 전체 설정 조회
|
||||
@router.get("")
|
||||
def get_settings(db: Session = Depends(get_db), _=Depends(require_admin)):
|
||||
rows = db.query(models.SystemSetting).all()
|
||||
result = dict(IMAGE_DEFAULTS)
|
||||
for r in rows:
|
||||
result[r.key] = r.value
|
||||
return result
|
||||
|
||||
# ── 관리자 설정 저장 (신고공개정책 + 이미지설정 통합)
|
||||
@router.put("")
|
||||
def update_settings(
|
||||
report_visibility_policy: str = Form(...),
|
||||
image_compress_enabled: str = Form("true"),
|
||||
image_max_px: str = Form("1024"),
|
||||
image_quality: str = Form("85"),
|
||||
db: Session = Depends(get_db),
|
||||
_ = Depends(require_admin)
|
||||
):
|
||||
pairs = [
|
||||
("report_visibility_policy", report_visibility_policy),
|
||||
("image_compress_enabled", image_compress_enabled),
|
||||
("image_max_px", image_max_px),
|
||||
("image_quality", image_quality),
|
||||
]
|
||||
for key, val in pairs:
|
||||
upsert(db, key, val)
|
||||
db.commit()
|
||||
return {"ok": True}
|
||||
Reference in New Issue
Block a user