Governança Comunitária - API Arah
Parte de: API Arah - Lógica de Negócio e Usabilidade
Versão: 1.0
Data: 2025-01-23
🏛️ Governança Comunitária
A API de governança permite interesses do usuário, votações comunitárias, caracterização do território e histórico de participação. Ver também Moderação (moderação dinâmica comunitária).
Interesses do Usuário
Listar Interesses (GET /api/v1/users/me/interests)
Descrição: Lista os interesses (tags) do usuário autenticado.
Como usar:
- Exige autenticação
- Retorna
IReadOnlyList<string>(tags em lowercase)
Regras de negócio:
- Máximo 10 interesses por usuário
- Tags normalizadas (trim, lowercase)
- Interesses aparecem no perfil (
UserProfileResponse.Interests)
Adicionar Interesse (POST /api/v1/users/me/interests)
Descrição: Adiciona um interesse ao usuário.
Como usar:
- Exige autenticação
- Body:
AddInterestRequestcomInterestTag(string, máx. 50 caracteres)
Regras de negócio:
- Tag não vazia, máx. 50 caracteres
- Máx. 10 interesses; retorna erro se exceder
- Validação: letras, números, espaços e hífens
Validação:
- FluentValidation (
AddInterestRequestValidator)
Remover Interesse (DELETE /api/v1/users/me/interests/{tag})
Descrição: Remove um interesse do usuário.
Como usar:
- Exige autenticação
- Path param:
tag(ex.:meio-ambiente)
Regras de negócio:
- Idempotente: 204 mesmo se tag não existir
- Tag na URL deve corresponder ao valor armazenado (lowercase)
Votações Comunitárias
Todas as votações são por território. Base path: GET/POST /api/v1/territories/{territoryId}/votings.
Criar Votação (POST /api/v1/territories/{territoryId}/votings)
Descrição: Cria uma votação no território.
Como usar:
- Exige autenticação
- Path:
territoryId - Body:
CreateVotingRequest:Type:ThemePrioritization|ModerationRule|TerritoryCharacterization|FeatureFlag|CommunityPolicyTitle,DescriptionOptions: array de strings (opções de voto)Visibility:AllMembers|ResidentsOnly|CuratorsOnlyStartsAtUtc,EndsAtUtc(opcional)
Regras de negócio:
- Quem pode criar: Residents (ThemePrioritization, TerritoryCharacterization, CommunityPolicy) ou Curadores (ModerationRule, FeatureFlag)
- Votação criada como
Draft; deve ser aberta para votação - Opções obrigatórias, pelo menos 2
Validação: CreateVotingRequestValidator
Listar Votações (GET /api/v1/territories/{territoryId}/votings)
Descrição: Lista votações do território.
Como usar:
- Exige autenticação
- Query params:
status(opcional, ex.: Open, Closed),skip,take(paginação)
Regras de negócio:
- Respeita visibilidade e permissões do usuário
- Retorna lista paginada de
VotingResponse
Obter Votação (GET /api/v1/territories/{territoryId}/votings/{votingId})
Descrição: Obtém detalhes de uma votação.
Como usar:
- Exige autenticação
- Path:
territoryId,votingId
Regras de negócio:
- 404 se votação ou território não existir
- Respeita visibilidade
Votar (POST /api/v1/territories/{territoryId}/votings/{votingId}/vote)
Descrição: Registra voto em uma votação aberta.
Como usar:
- Exige autenticação
- Body:
VoteRequestcomSelectedOption(string)
Regras de negócio:
- Votação deve estar
Open - Usuário só pode votar uma vez
SelectedOptiondeve existir emOptions- Elegibilidade conforme
Visibility(AllMembers, ResidentsOnly, CuratorsOnly) - Retorna 204 No Content em sucesso
Fechar Votação (POST /api/v1/territories/{territoryId}/votings/{votingId}/close)
Descrição: Fecha uma votação (apenas criador ou curador).
Como usar:
- Exige autenticação
- Apenas criador da votação ou curador do território
Regras de negócio:
- Votação passa a
Closed - Resultados podem ser aplicados (ModerationRule, TerritoryCharacterization, etc.)
Resultados (GET /api/v1/territories/{territoryId}/votings/{votingId}/results)
Descrição: Obtém contagem de votos por opção.
Como usar:
- Exige autenticação
- Retorna
VotingResultsResponse(opção → contagem)
Regras de negócio:
- Disponível quando votação está
ClosedouApproved/Rejected
Histórico de Governança no Perfil
Histórico de Participação (GET /api/v1/users/me/profile/governance)
Descrição: Retorna histórico de votações participadas e contribuições para moderação.
Como usar:
- Exige autenticação
- Retorna
UserProfileGovernanceResponse:VotingHistory: lista deVotingHistoryItem(votação, opção escolhida, etc.)ModerationContributions: contagem de contribuições (propostas, reports, etc.)
Regras de negócio:
- Apenas o próprio usuário (me)
- Dados agregados para exibição no perfil
📚 Documentação Relacionada
- Moderação - Reports, bloqueios e moderação dinâmica comunitária (regras por território)
- Feed - Filtro opcional por interesses (
filterByInterests) - Territórios - Caracterização (tags) em
TerritoryResponse - Docs de domínio:
docs/GOVERNANCE_SYSTEM.md,docs/VOTING_SYSTEM.md,docs/COMMUNITY_MODERATION.md
Voltar para: Índice da Documentação da API