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

Content: Post entity, tags, and approval workflow (Phase 4.1)

Abierto
#2 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
45/100
Tipo de issue
Nueva funcionalidad
Claridad
Bastante claro
Estado de actividad
Tranquilo
Stack tecnológico
csharp, postgresql

Línea de trabajo

Lee el módulo Members existente como referencia, incluido tests/CommunityPro.Tests/Members/MembersTestHarness.cs, y sigue las convenciones de IEndpointModule.MapEndpoints y las extensiones de DI. Después, traza el ContentDbContext, la migración del esquema de content, el servicio de transición de estado de Post y las pruebas para cada transición y comportamiento de los featured-slots; el trabajo estará terminado cuando estén cubiertos todos los criterios de aceptación y códigos de error enumerados.

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

Descripción

content

Scope

New CommunityPro.Content module: content Postgres schema, ContentDbContext, migrations, and the Post aggregate with its status workflow. Domain logic only — endpoints come in follow-up tickets.

Workflow

Draft → Submitted → (Approved ⇒ Published) | Rejected(reason) → Draft

Data model (content schema)

public sealed class Post
{
    public Guid Id { get; set; }
    public Guid AuthorId { get; set; }
    public string Title { get; set; }
    public string Slug { get; set; }             // unique, generated from title, immutable after publish
    public string Excerpt { get; set; }
    public string ContentJson { get; set; }      // TipTap JSON (stored for re-editing)
    public string ContentHtml { get; set; }      // sanitized render, produced server-side
    public string? CoverImageUrl { get; set; }   // Cloudinary
    public List<string> Tags { get; set; }       // jsonb; e.g. Engineering | Onboarding | Community Insights
    public PostStatus Status { get; set; }       // Draft | Submitted | Approved | Rejected | Published
    public bool IsFeatured { get; set; }         // single feature slot
    public string? RejectionReason { get; set; }
    public DateTimeOffset? PublishedAt { get; set; }
}

Rules

  • Slug: generated, unique (DB constraint), immutable once published.
  • Status transitions validated in a domain service returning Result<T> — illegal transitions yield content.invalid_state.
  • IsFeatured is a single slot: setting it clears the previous featured post (same pattern as members featured flag).
  • Rejection requires a reason; rejected posts return to Draft keeping the reason for the author to see.

Error codes

content.not_found, content.invalid_state, content.invalid_post

Acceptance criteria

  • Module scaffold matches existing modules (Members is the reference): DbContext, schema, IEndpointModule stub, DI extension
  • EF migration creates the table with slug unique constraint
  • Transition table fully tested (every legal + illegal transition)
  • Featured single-slot behavior tested
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.