from fastapi import APIRouter, Depends, Query from sqlalchemy.orm import Session 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 from app.security.api_client_auth import require_api_client router = APIRouter(prefix="/internal", tags=["internal"], dependencies=[Depends(require_api_client)]) @router.get("/systems") def internal_list_systems( 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( 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.system_key, "name": i.name, "status": i.status, } for i in items ], "total": total, "limit": limit, "offset": offset, } @router.get("/companies") def internal_list_companies( 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( 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( 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, "username": i.username, "email": i.email, "display_name": i.display_name, "is_active": i.is_active, } for i in items ], "total": total, "limit": limit, "offset": offset, }