-
Notifications
You must be signed in to change notification settings - Fork 1
33 System Config e Work Queue
Este documento descreve a base P0 implementada para:
-
SystemConfig: configurações globais calibráveis gerenciadas por
SystemAdmin. - Work Queue: fila genérica de itens de trabalho para suportar automação + fallback humano (curadoria/moderação/verificações).
Nota: SystemConfig não armazena segredos (senhas, API keys). Apenas valores calibráveis e seleção de provider. Segredos devem permanecer em variáveis de ambiente/secret manager.
Centralizar configurações globais que hoje ficam espalhadas (thresholds, janelas, toggles, providers, etc.), com:
- auditoria (
system_config.created/system_config.updated) - cache leve (5 min) com invalidação em update
-
Listar configs (filtro opcional por categoria):
GET /api/v1/admin/system-configs?category=MODERATION|VALIDATION|ASSETS|PROVIDERS|OBSERVABILITY|SECURITY|OTHER
-
Obter por key:
GET /api/v1/admin/system-configs/{key}
-
Criar/atualizar (upsert):
PUT /api/v1/admin/system-configs/{key}- Body:
-
value(string) -
category(string) -
description(string, opcional)
-
- Requer
SystemPermissionType.SystemAdmin.
Representar uma fila genérica para tarefas que podem começar automáticas e, quando necessário, cair em revisão humana:
- verificação de identidade (global)
- verificação de residência (territorial)
- curadoria de assets (territorial)
- casos de moderação (territorial)
Nesta fase P0, o foco é a infra: persistência, listagem e conclusão manual com auditoria.
-
Listar work items (global):
GET /api/v1/admin/work-items?type=&status=-
type:IDENTITYVERIFICATION|RESIDENCYVERIFICATION|ASSETCURATION|MODERATIONCASE|OTHER -
status:PENDING|AUTOPROCESSED|REQUIRESHUMANREVIEW|COMPLETED|CANCELLED
-
Completar work item (global):
POST /api/v1/admin/work-items/{workItemId}/complete- Body:
-
outcome(string):APPROVED|REJECTED|NOACTION -
notes(string, opcional)
-
-
Listar work items do território:
GET /api/v1/territories/{territoryId}/work-items?type=&status=- Permissão:
CuratorouModeratorno território (SystemAdmin também passa).
-
Completar work item do território:
POST /api/v1/territories/{territoryId}/work-items/{workItemId}/complete- Permissão:
- se o item exige
RequiredSystemPermission: precisa dessaSystemPermission - se o item exige
RequiredCapability: precisa dessaMembershipCapability - caso contrário:
CuratorouModerator
- se o item exige
- Criação:
work_item.created - Conclusão:
work_item.completed
- P1 (Verificações): usar Work Items para fila de identidade e residência com evidências (upload/asset).
- P1 (Assets): manter validação comunitária por Resident, e adicionar decisão final por Curator (estado/curation status).
- P2 (Moderação): alimentar Work Items a partir de reports/blocks, com fallback para Moderator e (futuro) triagem por IA.
-
Identidade (global):
POST /api/v1/verification/identity/document- Body:
{"documentRef":"..."} - Resultado: retorna
workItemId(vai para revisão humana por SystemAdmin).
-
Identidade (global) com upload:
-
POST /api/v1/verification/identity/document/upload(multipart/form-data) - Form:
file - Resultado: retorna
evidenceIdeworkItemId.
-
-
Residência (territorial):
POST /api/v1/memberships/{territoryId}/verify-residency/document- Body:
{"documentRef":"..."} - Resultado: retorna
workItemId(vai para revisão humana por Curator do território).
-
Residência (territorial) com upload:
-
POST /api/v1/memberships/{territoryId}/verify-residency/document/upload(multipart/form-data) - Form:
file - Resultado: retorna
evidenceIdeworkItemId.
-
-
Identidade (SystemAdmin):
POST /api/v1/admin/verifications/identity/{workItemId}/decide- Body:
{"outcome":"APPROVED|REJECTED","notes":"..."}
-
Residência (Curator):
POST /api/v1/territories/{territoryId}/verifications/residency/{workItemId}/decide- Body:
{"outcome":"APPROVED|REJECTED","notes":"..."}
- Ao criar um
TerritoryAsset, o status inicial passa a serSUGGESTEDe um Work Item deASSETCURATIONé criado para curadoria humana. -
Resident validado continua podendo registrar validações (
/api/v1/assets/{assetId}/validate), como sinal comunitário. - Curator faz a decisão final de curadoria.
POST /api/v1/assets/{assetId}/curate?territoryId=...- Body:
{"outcome":"APPROVED|REJECTED","notes":"..."}
DocumentEvidence armazena apenas metadados:
IdUserId-
TerritoryId(obrigatório para residência; nulo para identidade) -
Kind(Identity|Residency) -
StorageProvider(Local|S3) -
StorageKey(chave/caminho no storage) -
ContentType,SizeBytes,Sha256,OriginalFileName,CreatedAtUtc
O conteúdo do arquivo fica em IFileStorage (local ou S3/MinIO).
-
Admin (SystemAdmin):
GET /api/v1/admin/evidences/{evidenceId}/download
-
Território (Curator/Moderator):
GET /api/v1/territories/{territoryId}/evidences/{evidenceId}/download
O download por proxy permite aplicar autorização/auditoria e não expõe URL pública do storage.
📄 Documento completo: Ver no repositório