Files
ai-worker-platform/backend/app/api/v1/tenants.py
T

61 lines
1.9 KiB
Python

"""Tenant management endpoints."""
from fastapi import APIRouter, Depends, HTTPException
from sqlalchemy.orm import Session
from typing import List
from app.database import get_db
from app.schemas.tenant import TenantCreate, TenantUpdate, TenantResponse
from app.services.tenant_service import TenantService
from app.api.deps import get_current_user, require_roles
from app.core.permissions import Role
from app.models.user import User
router = APIRouter(prefix="/tenants")
@router.get("", response_model=List[TenantResponse])
def list_tenants(
skip: int = 0, limit: int = 100,
user: User = Depends(require_roles(Role.SUPER_ADMIN)),
db: Session = Depends(get_db),
):
return TenantService.list_tenants(db, skip, limit)
@router.post("", response_model=TenantResponse)
def create_tenant(
req: TenantCreate,
user: User = Depends(require_roles(Role.SUPER_ADMIN)),
db: Session = Depends(get_db),
):
try:
return TenantService.create_tenant(db, req)
except ValueError as e:
raise HTTPException(status_code=409, detail=str(e))
@router.get("/{tenant_id}", response_model=TenantResponse)
def get_tenant(
tenant_id: int,
user: User = Depends(get_current_user),
db: Session = Depends(get_db),
):
if user.role != Role.SUPER_ADMIN.value and user.tenant_id != tenant_id:
raise HTTPException(status_code=403, detail="Cannot access other tenants")
t = TenantService.get_tenant(db, tenant_id)
if not t:
raise HTTPException(status_code=404, detail="Tenant not found")
return t
@router.put("/{tenant_id}", response_model=TenantResponse)
def update_tenant(
tenant_id: int,
req: TenantUpdate,
user: User = Depends(require_roles(Role.SUPER_ADMIN, Role.TENANT_ADMIN)),
db: Session = Depends(get_db),
):
try:
return TenantService.update_tenant(db, tenant_id, req)
except ValueError as e:
raise HTTPException(status_code=404, detail=str(e))