"""Tenant CRUD-endpoints.""" from uuid import UUID from fastapi import APIRouter, Depends, Query from sqlalchemy.ext.asyncio import AsyncSession from app.database import get_db from app.dependencies import get_current_user, require_admin from app.schemas import TenantCreate, TenantUpdate, TenantOut from app.services.tenant_service import TenantService router = APIRouter(prefix="/tenants", tags=["Tenants"]) @router.get("", response_model=list[TenantOut]) async def list_tenants( skip: int = Query(0, ge=0), limit: int = Query(100, ge=1, le=500), current_user=Depends(require_admin), db: AsyncSession = Depends(get_db), ): service = TenantService(db) items, _ = await service.list_tenants(skip=skip, limit=limit) return items @router.get("/{tenant_id}", response_model=TenantOut) async def get_tenant( tenant_id: UUID, current_user=Depends(require_admin), db: AsyncSession = Depends(get_db), ): service = TenantService(db) tenant = await service.get_by_id(tenant_id) if tenant is None: raise HTTPException(status_code=404, detail="Tenant not found") return TenantOut.model_validate(tenant) @router.post("", response_model=TenantOut, status_code=201) async def create_tenant( data: TenantCreate, current_user=Depends(require_admin), db: AsyncSession = Depends(get_db), ): service = TenantService(db) tenant = await service.create_tenant(data) return TenantOut.model_validate(tenant) @router.patch("/{tenant_id}", response_model=TenantOut) async def update_tenant( tenant_id: UUID, data: TenantUpdate, current_user=Depends(require_admin), db: AsyncSession = Depends(get_db), ): service = TenantService(db) tenant = await service.update_tenant(tenant_id, data) return TenantOut.model_validate(tenant) @router.delete("/{tenant_id}", status_code=204) async def delete_tenant( tenant_id: UUID, current_user=Depends(require_admin), db: AsyncSession = Depends(get_db), ): service = TenantService(db) await service.delete_tenant(tenant_id) return None from fastapi import HTTPException