File size: 1,543 Bytes
478dec6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
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