79 lines
3.1 KiB
Python
Executable File
79 lines
3.1 KiB
Python
Executable File
from fastapi import APIRouter, Depends, HTTPException, status
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
from sqlalchemy import select
|
|
from typing import List
|
|
|
|
from app.db.session import get_db
|
|
from app.api import deps
|
|
from app.models.user import User, UserRole
|
|
from app.models.system_settings import SystemSetting # ÚJ import
|
|
from app.models.gamification import PointRule, LevelConfig, RegionalSetting
|
|
from app.models.translation import Translation
|
|
from app.services.translation_service import TranslationService
|
|
|
|
router = APIRouter()
|
|
|
|
def check_admin_access(current_user: User, required_roles: List[UserRole]):
|
|
if current_user.role not in required_roles:
|
|
raise HTTPException(
|
|
status_code=status.HTTP_403_FORBIDDEN,
|
|
detail="Nincs jogosultságod ehhez a művelethez."
|
|
)
|
|
|
|
# --- ⚙️ ÚJ: DINAMIKUS RENDSZERBEÁLLÍTÁSOK (Pl. Jármű limit) ---
|
|
|
|
@router.get("/settings", response_model=List[dict])
|
|
async def get_all_system_settings(
|
|
db: AsyncSession = Depends(get_db),
|
|
current_user: User = Depends(deps.get_current_user)
|
|
):
|
|
"""Az összes globális rendszerbeállítás listázása."""
|
|
check_admin_access(current_user, [UserRole.SUPERUSER])
|
|
result = await db.execute(select(SystemSetting))
|
|
settings = result.scalars().all()
|
|
return [{"key": s.key, "value": s.value, "description": s.description} for s in settings]
|
|
|
|
@router.put("/settings/{key}")
|
|
async def update_system_setting(
|
|
key: str,
|
|
new_value: int, # Később lehet JSON is, ha komplexebb a beállítás
|
|
db: AsyncSession = Depends(get_db),
|
|
current_user: User = Depends(deps.get_current_user)
|
|
):
|
|
"""Egy adott beállítás (pl. FREE_VEHICLE_LIMIT) módosítása."""
|
|
check_admin_access(current_user, [UserRole.SUPERUSER])
|
|
|
|
result = await db.execute(select(SystemSetting).where(SystemSetting.key == key))
|
|
setting = result.scalar_one_or_none()
|
|
|
|
if not setting:
|
|
raise HTTPException(status_code=404, detail="Beállítás nem található")
|
|
|
|
setting.value = new_value
|
|
await db.commit()
|
|
return {"status": "success", "key": key, "new_value": new_value}
|
|
|
|
|
|
# --- 🌍 FORDÍTÁSOK KEZELÉSE (Meglévő kódod) ---
|
|
|
|
@router.post("/translations", status_code=status.HTTP_201_CREATED)
|
|
async def add_translation_draft(
|
|
key: str, lang: str, value: str,
|
|
db: AsyncSession = Depends(get_db),
|
|
current_user: User = Depends(deps.get_current_user)
|
|
):
|
|
check_admin_access(current_user, [UserRole.SUPERUSER, UserRole.REGIONAL_ADMIN])
|
|
new_t = Translation(key=key, lang_code=lang, value=value, is_published=False)
|
|
db.add(new_t)
|
|
await db.commit()
|
|
return {"message": "Fordítás piszkozatként mentve. Ne felejtsd el publikálni!"}
|
|
|
|
@router.post("/translations/publish")
|
|
async def publish_translations(
|
|
db: AsyncSession = Depends(get_db),
|
|
current_user: User = Depends(deps.get_current_user)
|
|
):
|
|
check_admin_access(current_user, [UserRole.SUPERUSER, UserRole.REGIONAL_ADMIN])
|
|
await TranslationService.publish_all(db)
|
|
return {"message": "Sikeres publikálás! A változások minden szerveren élesedtek."}
|
|
|