intra_max_chatbot/admin/routes/org_users.py
2026-03-26 00:34:03 +03:00

64 lines
1.9 KiB
Python

import re
from fastapi import APIRouter, Depends, Form, Request
from fastapi.responses import HTMLResponse, RedirectResponse
from admin.auth import require_admin
from admin.templates_env import templates
from database.queries.org_users import (
create_org_user,
delete_org_user,
get_org_users,
)
from database.queries.organizations import get_all_organizations
import external.client as ext
router = APIRouter(prefix="/org-users", dependencies=[Depends(require_admin)])
def normalize_phone(raw: str) -> str:
digits = re.sub(r"\D", "", raw)
if digits.startswith("8") and len(digits) == 11:
digits = "7" + digits[1:]
return digits
@router.get("", response_class=HTMLResponse)
async def list_org_users(request: Request, org_id: int | None = None):
users = await get_org_users(org_id=org_id)
orgs = await get_all_organizations()
return templates.TemplateResponse(
request=request,
name="org_users/list.html",
context={"users": users, "orgs": orgs, "filter_org_id": org_id},
)
@router.get("/create", response_class=HTMLResponse)
async def create_org_user_form(request: Request):
orgs = await get_all_organizations()
return templates.TemplateResponse(
request=request, name="org_users/create.html", context={"orgs": orgs}
)
@router.post("/create")
async def create_org_user_action(
org_id: int = Form(...),
phone: str = Form(...),
display_name: str = Form(""),
):
phone = normalize_phone(phone)
row_id = await create_org_user(
org_id=org_id,
phone=phone,
display_name=display_name or None,
)
ext.sync_user(row_id)
return RedirectResponse("/admin/org-users", status_code=303)
@router.post("/{user_id}/delete")
async def delete_org_user_action(user_id: int):
await delete_org_user(user_id)
return RedirectResponse("/admin/org-users", status_code=303)