Skip to content

feat(newsletters): newsletter entities + renderer (Wave 3, Spring - partial)#63

Open
mpge wants to merge 1 commit into
mainfrom
feat/newsletter-system
Open

feat(newsletters): newsletter entities + renderer (Wave 3, Spring - partial)#63
mpge wants to merge 1 commit into
mainfrom
feat/newsletter-system

Conversation

@mpge
Copy link
Copy Markdown
Member

@mpge mpge commented May 22, 2026

Summary

Wave 3 partial port of the newsletter engine to Spring Boot / JPA. Entities + renderer + themes. DB-bound services are a follow-up.

  • 5 JPA entities under dev/escalated/models/newsletter/
  • Contact.marketingOptOutAt field added
  • services/newsletter/NewsletterRenderer.java — full renderer (Markdown → theme → click rewrite → pixel injection)
  • Two starter themes under resources/templates/escalated/newsletter_themes/ using {{key}} / {{{key}}} substitution
  • README usage example

Architecture notes

  • No Flyway/Liquibase migration committed — schema is auto-derived by Hibernate when spring.jpa.hibernate.ddl-auto=update, or hosts using a migration tool generate the SQL from these @Entity classes.
  • Markdown is host-pluggable via NewsletterRenderer.Options.markdownToHtml (recommended: flexmark-java or commonmark-java).
  • Theme rendering uses simple {{key}} / {{{key}}} substitution — no Thymeleaf dependency for the renderer (themes still live under resources/templates/ so Thymeleaf-using hosts can re-render through their own view layer).
  • JPA conventions — extends existing BaseEntity for id / createdAt / updatedAt (NewsletterDelivery does not extend it because it omits updatedAt for write-volume reasons).

Out of scope / follow-ups

  • Flyway / Liquibase migration script
  • Planner / Dispatcher / Tracker services using JpaRepositorys
  • Spring MVC controllers (admin CRUD + public tracking/unsubscribe/view-in-browser + ESP webhooks)
  • @Scheduled task for the dispatcher tick

Reviewer notes

  • Do not auto-merge. Hand back to Matthew for review.

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.

1 participant