Files
2026-06-10 02:04:37 -06:00

50 lines
1.6 KiB
Python

from __future__ import annotations
from fastapi import APIRouter, Depends, HTTPException, status
from asyncpg import Connection
from app.dependencies import get_db
from app.models.configuracion import ConfigUpdate, ConfigResponse, ALLOWED_CONFIG_KEYS
from app.models.common import ErrorResponse, OkResponse
from app.auth import require_auth
router = APIRouter(prefix="/configuracion", tags=["Configuración"])
@router.get("", response_model=ConfigResponse)
async def get_configuracion(
_auth: dict = Depends(require_auth),
db: Connection = Depends(get_db),
):
rows = await db.fetch("SELECT clave, valor FROM Configuracion")
config = {row["clave"]: row["valor"] for row in rows}
return ConfigResponse(config=config)
@router.put("", response_model=OkResponse, responses={400: {"model": ErrorResponse}})
async def update_configuracion(
body: ConfigUpdate,
_auth: dict = Depends(require_auth),
db: Connection = Depends(get_db),
):
allowed = body.get_allowed()
if not allowed:
raise HTTPException(
status_code=status.HTTP_400_BAD_REQUEST,
detail="No valid config keys provided",
)
async with db.transaction():
for clave, valor in allowed.items():
await db.execute(
"""
INSERT INTO "Configuracion" (id, clave, valor, "updatedAt")
VALUES (gen_random_uuid(), $1, $2, now())
ON CONFLICT (clave) DO UPDATE SET valor = $2, "updatedAt" = now()
""",
clave,
valor,
)
return OkResponse()