smart-chatbot-api / app /routers /admin_settings.py
GitHub Actions
Deploy from GitHub Actions (2026-05-31 09:04 UTC)
55c0d78
Raw
History Blame Contribute Delete
2.37 kB
import uuid
from fastapi import APIRouter, Depends, HTTPException
from sqlalchemy import select
from sqlalchemy.orm import Session
from app.models.database import get_db, Tenant
from app.dependencies.admin_auth import require_admin_jwt
from app.schemas.admin_settings import GoLiveRequest, TenantSettingsUpdate, TenantResponse
router = APIRouter(prefix="/admin", tags=["admin"])
@router.patch("/go-live", response_model=TenantResponse)
def patch_admin_go_live(
request: GoLiveRequest,
tenant_id: uuid.UUID = Depends(require_admin_jwt),
db: Session = Depends(get_db)
):
tenant = db.scalar(select(Tenant).where(Tenant.id == tenant_id))
if not tenant:
raise HTTPException(status_code=404, detail="Tenant not found")
tenant.is_active = request.is_active
db.commit()
db.refresh(tenant)
return tenant
@router.put("/settings", response_model=TenantResponse)
def put_admin_settings(
request: TenantSettingsUpdate,
tenant_id: uuid.UUID = Depends(require_admin_jwt),
db: Session = Depends(get_db)
):
tenant = db.scalar(select(Tenant).where(Tenant.id == tenant_id))
if not tenant:
raise HTTPException(status_code=404, detail="Tenant not found")
if request.name is not None:
tenant.name = request.name
if request.website_url is not None:
tenant.website_url = str(request.website_url)
if tenant.customization is None:
tenant.customization = {}
customization_update = {}
if request.industry is not None:
customization_update["industry"] = request.industry
if request.timezone is not None:
customization_update["timezone"] = request.timezone
if request.chatbot_name is not None:
customization_update["chatbot_name"] = request.chatbot_name
if request.chatbot_greeting is not None:
customization_update["chatbot_greeting"] = request.chatbot_greeting
if customization_update:
# SQLAlchemy requires a new dict object for JSON column mutation tracking
new_customization = dict(tenant.customization)
new_customization.update(customization_update)
tenant.customization = new_customization
if "backup_email" in request.model_fields_set:
tenant.backup_email = str(request.backup_email) if request.backup_email else None
db.commit()
db.refresh(tenant)
return tenant