Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

Contributors: leaderboard endpoint with period filters (Phase 5.3)

Abierto
#8 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
4/5
Tiempo estimado
3-5 días
Aptitud para principiantes
45/100
Tipo de issue
Nueva funcionalidad
Claridad
Bastante claro
Estado de actividad
Tranquilo
Stack tecnológico
csharp, postgresql

Línea de trabajo

Empieza comprobando dependency #6 y, después, sigue el patrón de módulos de endpoint a través de IEndpointModule.MapEndpoints y del contrato público existente de Members/Identity. Lee los patrones de ContributionEvent y MembersTestHarness.cs antes de añadir cobertura de xUnit en tests/CommunityPro.Tests//. Se considera terminado cuando haya una respuesta anónima paginada, un ranking determinista, cobertura de los límites de periodo en UTC, un mapeo estable de errores y datos de perfil únicamente de miembros activos.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

contributors

Scope

GET /contributors?period=all|90d|30d (anonymous, paginated) returning the ranked leaderboard the Top Contributors page renders (ISR, revalidate 300s).

Shape

{ "rank": 1, "login": "octocat", "avatarUrl": "…", "memberId": "…|null", "displayName": "…|null", "mergedPrs": 42 }

Rules

  • Aggregate with a plain grouped query over ContributionEvent first (materialize into a contributor_stats view/table only if it proves slow — don't pre-optimize).
  • Join to member profiles via GithubUserId through a public module contract on the Members/Identity side (e.g. a bulk lookup IReadOnlyDictionary<long, MemberRef> by GitHub id) — no cross-module DbContext access.
  • Non-member org contributors still appear (login + GitHub avatar, memberId: null). Deactivated members appear as non-members (no profile link).
  • Period boundaries computed in UTC off MergedAt.

Error codes

contributors.invalid_period

Dependencies

Blocked by #6. Backfill #7 makes the data real but isn't a code dependency.

Acceptance criteria

  • Ranking is stable (ties broken deterministically, e.g. earliest merge first)
  • Period filters tested at the boundary (e.g. a PR merged exactly 90d ago)
  • Member join returns profile info only for active members
  • Paginated; default page size sensible (~20)
Conventions (project-wide, non-negotiable)
  • .NET 9, records for immutable shapes, file-scoped namespaces, primary constructors where they read well. Minimal-API endpoints grouped per module via IEndpointModule.MapEndpoints.
  • Result<T> (SharedKernel) instead of exception-driven control flow. Endpoint results map failures to ProblemDetails with the stable error codes listed above — the frontend keys off them.
  • Module owns its EF Core DbContext mapped to its own Postgres schema. Modules never reference each other's internals — cross-module needs go through a public contract interface or an in-process domain event (IEventPublisher).
  • All external calls (GitHub, Stripe, Brevo, Cloudinary, Meilisearch) behind interfaces owned by the consuming module.
  • Every list endpoint paginated (offset is fine). xUnit tests in tests/CommunityPro.Tests/<Module>/ following the existing harness patterns (see Members/MembersTestHarness.cs).
Lenguaje dominante
C#
Estrellas
0
Forks
0
Métricas de merge de PR
Sin PR fusionados en 30 d

Preparar el entorno

  • Incluye un Dockerfile o un archivo de Docker Compose
  • Sin plantilla de pull request
  • Sin guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de CommunityPro/community-pro-api

Todos los issues de CommunityPro/community-pro-api

Issues similares

Más issues de C#

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.