b78c01cae9
- Fix broken import (system_settings → system_setting) that crashed OIDC endpoint on every request - Extract get_setting_value to shared CRUD module - Add JWKS force-refresh cooldown (30s) to prevent abuse - Remove dead _OIDC_TOKEN_URL constant - Add raise from for exception chaining - Remove unused _photo_url variable - Add pattern validation on referral_code field
41 lines
1.2 KiB
Python
41 lines
1.2 KiB
Python
from sqlalchemy import select
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
|
|
from app.database.models import SystemSetting
|
|
|
|
|
|
async def upsert_system_setting(
|
|
db: AsyncSession,
|
|
key: str,
|
|
value: str | None,
|
|
description: str | None = None,
|
|
) -> SystemSetting:
|
|
result = await db.execute(select(SystemSetting).where(SystemSetting.key == key))
|
|
setting = result.scalar_one_or_none()
|
|
|
|
if setting is None:
|
|
setting = SystemSetting(key=key, value=value, description=description)
|
|
db.add(setting)
|
|
else:
|
|
setting.value = value
|
|
if description is not None:
|
|
setting.description = description
|
|
|
|
await db.flush()
|
|
return setting
|
|
|
|
|
|
async def get_setting_value(db: AsyncSession, key: str) -> str | None:
|
|
"""Get a setting value from database."""
|
|
result = await db.execute(select(SystemSetting).where(SystemSetting.key == key))
|
|
setting = result.scalar_one_or_none()
|
|
return setting.value if setting else None
|
|
|
|
|
|
async def delete_system_setting(db: AsyncSession, key: str) -> None:
|
|
result = await db.execute(select(SystemSetting).where(SystemSetting.key == key))
|
|
setting = result.scalar_one_or_none()
|
|
if setting is not None:
|
|
await db.delete(setting)
|
|
await db.flush()
|