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

Mentorship: messaging thread + unread tracking (Phase 6.5)

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

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
5/5
Tiempo estimado
Más de una semana
Aptitud para principiantes
35/100
Tipo de issue
Nueva funcionalidad
Claridad
Bastante claro
Estado de actividad
Tranquilo
Stack tecnológico
csharp, postgresql

Línea de trabajo

Primero resuelve la dependencia de #10 y luego inspecciona los patrones existentes de endpoints de módulos usando IEndpointModule.MapEndpoints y el test harness de tests/CommunityPro.Tests/Members/MembersTestHarness.cs. Se considera terminado cuando haya endpoints de mensajes y lectura exclusivos para participantes, polling estable mediante cursor, recuentos correctos de no leídos, validación de texto plano y rechazo de posts dirigidos a mentorships concluidas con los códigos de error indicados.

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

Descripción

mentorship

Scope

Per-mentorship message thread. Polling v1 — no websockets (frontend polls with refetchInterval: 5000 while the thread is open).

Data model

public sealed class ThreadMessage
{
    public Guid Id { get; set; }
    public Guid MentorshipId { get; set; }
    public Guid SenderId { get; set; }
    public string Body { get; set; }
    public DateTimeOffset SentAt { get; set; }
}
// plus LastReadAt per participant (e.g. MentorshipParticipantState) for unread counts

Endpoints (participants only)

Method Path Notes
GET /mentorship/{id}/messages?after= incremental fetch for polling; after = cursor (message id or timestamp); capped page size
POST /mentorship/{id}/messages body length-capped (~2000 chars), trimmed, non-empty
POST /mentorship/{id}/read stamp caller's LastReadAt

Unread counts (per mentorship, for the dashboard) derived from LastReadAt — expose on the GET /mentorship/mine payload from #10 rather than a separate endpoint.

Rules

  • Only Active mentorship participants can post; reading history stays allowed after conclusion.
  • Plain text only in v1 — no HTML rendering path at all.

Error codes

mentorship.not_found, mentorship.forbidden, mentorship.invalid_message, mentorship.invalid_state

Dependencies

Blocked by #10.

Acceptance criteria

  • after cursor returns strictly newer messages, stable ordering
  • Non-participant gets not_found-shaped forbidden (no existence leak)
  • Unread counts correct across both participants
  • Posting to a concluded mentorship rejected
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.