""" Router tenant – gestione organizzazioni (solo super_admin). Endpoint: GET /api/v1/tenants → lista tenant POST /api/v1/tenants → crea tenant + admin GET /api/v1/tenants/{id} → dettaglio tenant PATCH /api/v1/tenants/{id} → modifica tenant """ import uuid from fastapi import APIRouter from app.dependencies import SuperAdminUser, DB from app.schemas.tenant import TenantCreateRequest, TenantResponse, TenantUpdateRequest from app.services.tenant_service import TenantService router = APIRouter(prefix="/tenants", tags=["Tenant (super-admin)"]) @router.get( "", response_model=list[TenantResponse], summary="Lista tutti i tenant", ) async def list_tenants( _: SuperAdminUser, db: DB, ) -> list[TenantResponse]: service = TenantService(db) tenants = await service.list_tenants() return [TenantResponse.model_validate(t) for t in tenants] @router.post( "", response_model=TenantResponse, status_code=201, summary="Crea nuovo tenant con admin iniziale", ) async def create_tenant( body: TenantCreateRequest, _: SuperAdminUser, db: DB, ) -> TenantResponse: service = TenantService(db) tenant, _ = await service.create_tenant(body) return TenantResponse.model_validate(tenant) @router.get( "/{tenant_id}", response_model=TenantResponse, summary="Dettaglio tenant", ) async def get_tenant( tenant_id: uuid.UUID, _: SuperAdminUser, db: DB, ) -> TenantResponse: service = TenantService(db) tenant = await service.get_tenant(tenant_id) return TenantResponse.model_validate(tenant) @router.patch( "/{tenant_id}", response_model=TenantResponse, summary="Modifica tenant", ) async def update_tenant( tenant_id: uuid.UUID, body: TenantUpdateRequest, _: SuperAdminUser, db: DB, ) -> TenantResponse: service = TenantService(db) tenant = await service.update_tenant(tenant_id, body) return TenantResponse.model_validate(tenant)