Pular para o conteúdo principal

Status: Approved · v2 · SPEC-API-MANAGEMENT-001

depends_on: SPEC-DOMAIN-PERMISSION-001, SPEC-API-OVERVIEW-001

used_by: IS-MVP-04.6, IS-MVP-08.3, IS-MVP-15.2

API de gestão, permissões, auditoria e assets

Infraestrutura transversal para memberships, roles, overrides, owner transfer e uploads seguros.

Princípios e padrões

  • Base path /api/v1; JSON UTF-8; chaves em camelCase.
  • Toda resposta usa ApiResponse<T> com ok, data|error e meta contendo requestId e timestamp.
  • IDs são strings opacas; datas são ISO-8601 UTC; dinheiro é inteiro em centavos com moeda BRL.
  • Listas usam page e pageSize no MVP; default 20, máximo 100; metadados ficam em meta.pagination.
  • Endpoints públicos usam DTOs públicos específicos; entidades internas, memberships, saldos e dados privados nunca vazam.
  • Erros de domínio são estáveis e acionáveis; stack traces e detalhes internos não são retornados.
  • Alterações sensíveis usam Idempotency-Key, confirmação recente quando necessário e audit log.
  • Uploads usam fluxo presigned; o backend valida propósito, MIME, tamanho e ownership antes de confirmar o asset.

Endpoints

MétodoRotaAcessoRequestResponseRegras principais
GET/management/my-entitiesAutenticadoManagedEntitiesQueryManagedEntitiesResponseAgrupa team/torcida/championship/field/service.
GET/management/:entityType/:entityId/managersmanageManagers/viewManagersManagersResponseRole, overrides e status autorizados.
POST/management/:entityType/:entityId/managers/invitemanageManagersInviteManagerRequestManagerInviteResponseAté limite.
POST/management/invites/:inviteId/respondUsuário alvoRespondManagerInviteRequestManagementMembershipResponseAccept/reject.
PATCH/management/:entityType/:entityId/managers/:membershipIdmanageManagersUpdateManagerAccessRequestManagementMembershipResponseRole + overrides.
DELETE/management/:entityType/:entityId/managers/:membershipIdmanageManagersRemoveManagerRequestOperationResponseNão remove owner/último full.
POST/management/:entityType/:entityId/transfer-primary-ownerprimary_ownerTransferOwnerRequestTransferOwnerResponseAuth recente e confirmação.
GET/permissions/catalogAutenticadoentityTypePermissionCatalogResponseKeys/labels/grupos.
POST/permissions/checkAutenticadoPermissionCheckRequestPermissionCheckResponseUso diagnóstico; não substitui guard.
GET/management/:entityType/:entityId/audit-logsviewAuditAuditQueryAuditLogsResponsePrivado e paginado.
POST/uploads/presignAutenticadoCreateUploadIntentRequestCreateUploadIntentResponsePurpose/entity ownership.
POST/uploads/:assetId/confirmAutenticadoConfirmUploadRequestAssetResponseVerifica object metadata.
DELETE/assets/:assetIdAsset owner/permissionDeleteAssetRequestOperationResponseSoft delete/detach policy.

Autenticação e autorização

  • Um primary_owner por entidade.
  • Permission positiva efetiva = role grants + manual grants − manual revokes.
  • Acesso sempre revalidado no momento da ação.
  • Uploads vinculados a purpose/entity e permission.

Erros de domínio

CódigoHTTPQuando ocorreAção esperada no cliente
PRIMARY_OWNER_REQUIRED409Operação deixaria sem ownerTransferir.
LAST_FULL_MANAGER409Remoção deixaria risco configuradoRevisar.
MANAGEMENT_INVITE_EXPIRED410Invite expiradoNovo invite.
UNKNOWN_PERMISSION422Key inválida para entity typeUsar catálogo.
UPLOAD_TYPE_NOT_ALLOWED422MIME/purpose inválidoTrocar arquivo.
UPLOAD_TOO_LARGE413Tamanho excede purposeComprimir.
ASSET_OWNERSHIP_MISMATCH403Asset de outro contextoBloquear.

Idempotência e concorrência

  • Invite, transfer owner e upload confirmation idempotentes.
  • Membership update usa version para evitar sobrescrita.

Auditoria e efeitos colaterais

  • Toda mudança de acesso/owner e asset attach/delete auditada.
  • Invites geram notifications.

Exemplos

accessUpdate

{
"role": "media_manager",
"grantPermissions": [
"team.manageIdentity"
],
"revokePermissions": [
"team.publishPosts"
],
"version": 3
}

presign

{
"purpose": "team_logo",
"entity": {
"type": "team",
"id": "team_001"
},
"fileName": "escudo.png",
"mimeType": "image/png",
"sizeBytes": 483210
}

Mocks

  • Roles e permissions fixtures completas.
  • Revoked membership muda comportamento imediatamente.
  • Uploads fake retornam URL local segura.

Testes obrigatórios

  • Owner invariants.
  • Permission merge.
  • Revocation immediate.
  • Invite lifecycle.
  • Upload MIME/size/ownership.
  • Audit privacy.

Critérios de aceite

  • Todas entidades gerenciáveis cobertas.
  • Jogador excluído de ManageableEntityType.
  • UI consegue explicar access sem confiar no check endpoint.

Machine summary

spec: SPEC-API-MANAGEMENT-001
api_group: API de gestão, permissões, auditoria e assets
base_path: /api/v1
response_envelope: ApiResponse<T>
ids: string
dates: ISO-8601
money: integer_cents