Organization Tenants
Vínculo M:N entre cooperativa (organization) e tenant — base do escopo de leitura por tenant.
Define quais tenants alcançam cada cooperativa. É o que faz a trava de acesso funcionar: um usuário só enxerga as cooperativas (e os documentos delas) dos tenants dos quais faz parte. Enquanto uma cooperativa não tiver vínculo com nenhum tenant do usuário, ela permanece invisível para ele.
As rotas são app-to-app (/service/*): o tenant é sempre o do chamador
(resolvido do token de serviço pelo ServiceAuthMiddleware) — nunca vem no corpo.
Ou seja, um serviço só consegue vincular/desvincular cooperativas ao próprio
tenant.
| Método | Rota | Auth | Sucesso | Idempotente |
|---|---|---|---|---|
POST | /service/organizations/:organizationId/tenants | serviço | 201 | sim |
DELETE | /service/organizations/:organizationId/tenants | serviço | 204 | sim |
GET | /api/tenants/:tenantId/organizations | usuário | 200 | — |
Vincular cooperativa ao tenant
POST /service/organizations/:organizationId/tenants
Cria o vínculo entre a cooperativa e o tenant autenticado. Idempotente: se o
vínculo já existir, retorna 201 do mesmo jeito, sem duplicar.
| Param | Tipo | Regras |
|---|---|---|
organizationId | uuid | Cooperativa existente (404 OrganizationNotFoundError se não existir) |
curl -X POST \
http://localhost:3000/service/organizations/$ORGANIZATION_ID/tenants \
-H "Authorization: Bearer $SERVICE_ACCESS_TOKEN"201 Created
{
"organizationId": "o1b2c3d4-e5f6-4789-a123-456789abcdef",
"tenantId": "t1b2c3d4-e5f6-4789-a123-456789abcdef"
}404 Not Found — cooperativa não encontrada.
Desvincular cooperativa do tenant
DELETE /service/organizations/:organizationId/tenants
Remove o vínculo entre a cooperativa e o tenant autenticado. Idempotente: se não
houver vínculo, ainda retorna 204.
| Param | Tipo | Regras |
|---|---|---|
organizationId | uuid | Cooperativa existente (404 OrganizationNotFoundError se não existir) |
curl -X DELETE \
http://localhost:3000/service/organizations/$ORGANIZATION_ID/tenants \
-H "Authorization: Bearer $SERVICE_ACCESS_TOKEN"204 No Content — vínculo removido (ou já inexistente).
404 Not Found — cooperativa não encontrada.
Listar cooperativas de um tenant (admin)
GET /api/tenants/:tenantId/organizations — contexto usuário (/api), exige
scope read no resource resource:tenants_id. Retorna as cooperativas alcançadas
pelo tenant. 404 se o tenant não existir.
curl http://localhost:3000/api/tenants/$TENANT_ID/organizations \
-H "Authorization: Bearer $ACCESS_TOKEN"200 OK
{
"data": [
{
"id": "o1b2c3d4-e5f6-4789-a123-456789abcdef",
"name": "Cooperativa Recicla Já",
"alias": null,
"federalTaxId": "12345678000190",
"active": true,
"listed": true
}
]
}404 Not Found — tenant não encontrado.