98 lines
3.8 KiB
Python
98 lines
3.8 KiB
Python
from fastapi import APIRouter, Depends, Query
|
|
from sqlalchemy.orm import Session
|
|
|
|
from app.api.internal import verify_internal_secret
|
|
from app.db.session import get_db
|
|
from app.repositories.companies_repo import CompaniesRepository
|
|
from app.repositories.modules_repo import ModulesRepository
|
|
from app.repositories.sites_repo import SitesRepository
|
|
from app.repositories.systems_repo import SystemsRepository
|
|
from app.repositories.users_repo import UsersRepository
|
|
|
|
router = APIRouter(prefix="/internal", tags=["internal"])
|
|
|
|
|
|
@router.get("/systems")
|
|
def internal_list_systems(
|
|
_: None = Depends(verify_internal_secret),
|
|
db: Session = Depends(get_db),
|
|
limit: int = Query(default=200, ge=1, le=1000),
|
|
offset: int = Query(default=0, ge=0),
|
|
) -> dict:
|
|
repo = SystemsRepository(db)
|
|
items, total = repo.list(limit=limit, offset=offset)
|
|
return {"items": [{"id": i.id, "system_key": i.system_key, "name": i.name, "status": i.status} for i in items], "total": total, "limit": limit, "offset": offset}
|
|
|
|
|
|
@router.get("/modules")
|
|
def internal_list_modules(
|
|
_: None = Depends(verify_internal_secret),
|
|
db: Session = Depends(get_db),
|
|
limit: int = Query(default=500, ge=1, le=2000),
|
|
offset: int = Query(default=0, ge=0),
|
|
) -> dict:
|
|
modules_repo = ModulesRepository(db)
|
|
items, total = modules_repo.list(limit=limit, offset=offset)
|
|
return {
|
|
"items": [
|
|
{
|
|
"id": i.id,
|
|
"module_key": i.module_key,
|
|
"system_key": i.module_key.split(".", 1)[0] if "." in i.module_key else None,
|
|
"name": i.name,
|
|
"status": i.status,
|
|
}
|
|
for i in items
|
|
],
|
|
"total": total,
|
|
"limit": limit,
|
|
"offset": offset,
|
|
}
|
|
|
|
|
|
@router.get("/companies")
|
|
def internal_list_companies(
|
|
_: None = Depends(verify_internal_secret),
|
|
db: Session = Depends(get_db),
|
|
keyword: str | None = Query(default=None),
|
|
limit: int = Query(default=500, ge=1, le=2000),
|
|
offset: int = Query(default=0, ge=0),
|
|
) -> dict:
|
|
repo = CompaniesRepository(db)
|
|
items, total = repo.list(keyword=keyword, limit=limit, offset=offset)
|
|
return {"items": [{"id": i.id, "company_key": i.company_key, "name": i.name, "status": i.status} for i in items], "total": total, "limit": limit, "offset": offset}
|
|
|
|
|
|
@router.get("/sites")
|
|
def internal_list_sites(
|
|
_: None = Depends(verify_internal_secret),
|
|
db: Session = Depends(get_db),
|
|
company_key: str | None = Query(default=None),
|
|
limit: int = Query(default=500, ge=1, le=2000),
|
|
offset: int = Query(default=0, ge=0),
|
|
) -> dict:
|
|
companies_repo = CompaniesRepository(db)
|
|
sites_repo = SitesRepository(db)
|
|
company_id = None
|
|
if company_key:
|
|
company = companies_repo.get_by_key(company_key)
|
|
if company:
|
|
company_id = company.id
|
|
companies, _ = companies_repo.list(limit=2000, offset=0)
|
|
mapping = {c.id: c.company_key for c in companies}
|
|
items, total = sites_repo.list(company_id=company_id, limit=limit, offset=offset)
|
|
return {"items": [{"id": i.id, "site_key": i.site_key, "company_key": mapping.get(i.company_id), "name": i.name, "status": i.status} for i in items], "total": total, "limit": limit, "offset": offset}
|
|
|
|
|
|
@router.get("/members")
|
|
def internal_list_members(
|
|
_: None = Depends(verify_internal_secret),
|
|
db: Session = Depends(get_db),
|
|
keyword: str | None = Query(default=None),
|
|
limit: int = Query(default=500, ge=1, le=2000),
|
|
offset: int = Query(default=0, ge=0),
|
|
) -> dict:
|
|
repo = UsersRepository(db)
|
|
items, total = repo.list(keyword=keyword, limit=limit, offset=offset)
|
|
return {"items": [{"id": i.id, "authentik_sub": i.authentik_sub, "email": i.email, "display_name": i.display_name, "is_active": i.is_active} for i in items], "total": total, "limit": limit, "offset": offset}
|