"""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))