69 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			69 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
"""
 | 
						|
Tenants API routes
 | 
						|
"""
 | 
						|
from fastapi import APIRouter, Depends, HTTPException, status
 | 
						|
from typing import List
 | 
						|
from pydantic import BaseModel
 | 
						|
from sqlalchemy.orm import Session
 | 
						|
 | 
						|
from ...database import SessionLocal
 | 
						|
from ...models import Tenant
 | 
						|
from ...config.settings import settings
 | 
						|
 | 
						|
router = APIRouter()
 | 
						|
 | 
						|
# Pydantic models for tenants
 | 
						|
class TenantCreate(BaseModel):
 | 
						|
    name: str
 | 
						|
    subdomain: str
 | 
						|
 | 
						|
    class Config:
 | 
						|
        json_schema_extra = {
 | 
						|
            "example": {
 | 
						|
                "name": "Acme Corporation",
 | 
						|
                "subdomain": "acme"
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
class TenantResponse(BaseModel):
 | 
						|
    id: int
 | 
						|
    name: str
 | 
						|
    subdomain: str
 | 
						|
    is_active: bool
 | 
						|
 | 
						|
    class Config:
 | 
						|
        from_attributes = True
 | 
						|
        json_schema_extra = {
 | 
						|
            "example": {
 | 
						|
                "id": 1,
 | 
						|
                "name": "Acme Corporation",
 | 
						|
                "subdomain": "acme",
 | 
						|
                "is_active": True
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
@router.get("/", response_model=List[TenantResponse])
 | 
						|
async def get_tenants(skip: int = 0, limit: int = 100, db: Session = Depends(SessionLocal)):
 | 
						|
    """Get all tenants"""
 | 
						|
    tenants = db.query(Tenant).offset(skip).limit(limit).all()
 | 
						|
    return tenants
 | 
						|
 | 
						|
@router.get("/{tenant_id}", response_model=TenantResponse)
 | 
						|
async def get_tenant(tenant_id: int, db: Session = Depends(SessionLocal)):
 | 
						|
    """Get a specific tenant"""
 | 
						|
    tenant = db.query(Tenant).filter(Tenant.id == tenant_id).first()
 | 
						|
    if not tenant:
 | 
						|
        raise HTTPException(status_code=404, detail="Tenant not found")
 | 
						|
    return tenant
 | 
						|
 | 
						|
@router.post("/", response_model=TenantResponse)
 | 
						|
async def create_tenant(tenant: TenantCreate, db: Session = Depends(SessionLocal)):
 | 
						|
    """Create a new tenant"""
 | 
						|
    if not settings.MULTI_TENANT_ENABLED:
 | 
						|
        raise HTTPException(status_code=400, detail="Multi-tenant is not enabled")
 | 
						|
    
 | 
						|
    db_tenant = Tenant(**tenant.model_dump())
 | 
						|
    db.add(db_tenant)
 | 
						|
    db.commit()
 | 
						|
    db.refresh(db_tenant)
 | 
						|
    return db_tenant |