from externals.databases.database import get_db from externals.databases.pg_crud import ( get_tenant_by_name, create_tenant, ) from externals.databases.schemas.tenant import TenantCreate, TenantResponse from fastapi import APIRouter, Depends, HTTPException, status from sqlalchemy.ext.asyncio import AsyncSession from utils.logger import get_logger logger = get_logger("tenant management") router = APIRouter(prefix="/admin", tags=["Tenant"]) # CREATE TENANT @router.post( "/tenants", status_code=status.HTTP_201_CREATED, response_model=TenantResponse, ) async def create_tenant_endpoint( tenant: TenantCreate, db: AsyncSession = Depends(get_db), ): logger.info("Create tenant request", extra={"tenant_name": tenant.tenant_name}) existing = await get_tenant_by_name(db, tenant.tenant_name) if existing: raise HTTPException( status_code=status.HTTP_409_CONFLICT, detail="Tenant already exists", ) created = await create_tenant(db, tenant) return created # GET TENANT BY NAME @router.get( "/tenants/{tenant_name}", response_model=TenantResponse, ) async def get_tenant_endpoint( tenant_name: str, db: AsyncSession = Depends(get_db), ): logger.info("Get tenant request", extra={"tenant_name": tenant_name}) tenant = await get_tenant_by_name(db, tenant_name) if not tenant: raise HTTPException( status_code=status.HTTP_404_NOT_FOUND, detail="Tenant not found", ) return tenant