Skip to content

feat(community): retrospectiva multi-fonte — contrato + GitHub/Discord (Fase 1)#438

Open
Clintonrocha98 wants to merge 1 commit into
feature/retrospective-multi-sourcefrom
feature/retro-contract
Open

feat(community): retrospectiva multi-fonte — contrato + GitHub/Discord (Fase 1)#438
Clintonrocha98 wants to merge 1 commit into
feature/retrospective-multi-sourcefrom
feature/retro-contract

Conversation

@Clintonrocha98

Copy link
Copy Markdown
Member

Fase 1 — Juntar as fontes

Primeira fatia da retrospectiva multi-fonte. Transforma a retrospectiva (hoje só GitHub, read model ao vivo no portal) numa peça plugável por fonte: adicionar uma plataforma passa a ser 1 classe + 1 tag no módulo dono do dado, sem tocar o portal.

Aponta para a branch de integração feature/retrospective-multi-source.

O que entra

community (domínio) — o contrato

  • RetrospectiveSource: key() + collect(Period, SourceFilters): SourceResult.
  • DTOs tipados: Period, SourceFilters (hideBots + exclusions), Metric, HeadlineMetrics, SourceResult, e a interface Slide (kind() + toArray()).
  • Nenhum import de Integration: o contrato mora no domínio, as fontes o implementam.

integration-githubGithubSource

  • Refatora o antigo CommunityRetrospective do portal preservando o cálculo 1:1 (bots, PRs merged/unmerged, repos só com PR no recorte, destaques por linhas).
  • Empacota a saída em slides tipados (github.panorama, github.repos, github.highlights, github.core, github.community).

activityDiscordSource (mora aqui porque o dado — Voice, Message, Reaction, MembershipEvent — é do activity)

  • 5 slides: discord.voice_board, discord.messages, discord.new_members, discord.reactions, discord.top_message.
  • Agrega tudo em SQL escopado pela janela (as tabelas são grandes em prod; messages ~2GB). Filtra por sent_at/occurred_at (tempo do evento), nunca created_at. hideBots via source_kind. Nome de exibição resolvido só para o topo de cada ranking.

portal — orquestração

  • RetrospectiveDeck resolve as fontes por tagged service (retrospective.source), ordena (github → discord) e descarta as sem dado.
  • A página compõe: cover (chips por fonte, sem soma cruzada) → bloco de cada fonte (kind → componente Blade por convenção) → closing.
  • Os filtros ricos do visitante (repos/tipos/desfecho/pessoa/ordenação) foram aposentados: viram configuração editorial na Fase 2. Restam recorte de período e ocultar bots.

Fora de escopo (fica pra depois)

  • Persistência/snapshot da edição e curadoria (Fase 2).
  • Deck Builder visual (Fase 3).
  • WhatsApp (PR aditivo).

Notas

  • Sem migrations nesta fase (nenhuma tabela nova).
  • Testes: GithubSource (golden 1:1, herdado do read model antigo), DiscordSource (agregações + escopo temporal + hideBots), RetrospectiveDeck (ordem/descarte) e página multi-fonte.
  • Na suíte completa local há 3 falhas em BackfillRepositoryTest (timezone, +00:00 vs -03:00) e alguns erros de out of shared memory no DROP sob paralelismo. Ambos são pré-existentes/ambientais (confirmado: o backfill falha igual na base, e os testes de activity passam isolados) — não têm relação com esta mudança.

… (phase 1)

Fase 1 da retrospectiva multi-fonte: transforma a retrô (antes só GitHub,
read model ao vivo no portal) numa peça plugável por fonte.

- community: contrato RetrospectiveSource (key + collect(Period, SourceFilters):
  SourceResult) e DTOs tipados (Period, SourceFilters, Metric, HeadlineMetrics,
  SourceResult) + interface Slide. Módulo de domínio, dono do contrato.
- integration-github: GithubSource refatora o antigo CommunityRetrospective
  preservando o cálculo 1:1 (bots, PRs merged/unmerged, repos com PR, destaques),
  empacotado em slides tipados.
- activity: DiscordSource (dono do dado) com 5 slides — voz, mensagens, novos
  membros, reações e mensagem mais reagida. Agrega tudo em SQL escopado por
  sent_at/occurred_at, hideBots via source_kind, nome via metadata do Discord.
- portal: RetrospectiveDeck resolve as fontes por tagged service
  (retrospective.source), ordena e descarta vazias; página compõe cover (chips
  por fonte) + blocos por fonte (kind -> Blade por convenção) + closing.
  Filtros ricos do visitante aposentados (viram config editorial na Fase 2);
  restam recorte de período e ocultar bots.

Sem tabelas novas nesta fase. Testes: GithubSource (golden 1:1), DiscordSource
(agregações), RetrospectiveDeck (ordem/descartes) e página multi-fonte.

@henrique-leme henrique-leme left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants