managarten/services/mana-notify-go/CLAUDE.md
Till JS 585cdc1753 feat(mana-notify): rewrite notification service from NestJS to Go
Replaces the NestJS mana-notify service with a Go implementation.
Features: 4 notification channels (email/SMTP, Expo push, Matrix,
webhook), goroutine worker pool with retry/backoff (replaces BullMQ),
Go template engine (replaces Handlebars), PostgreSQL with auto-migrations
(5 tables), user preferences with quiet hours, idempotency via
externalId, batch sending, scheduled delivery, JWT + service key auth.

22 API endpoints, 1:1 compatible. Binary: 21 MB.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-27 22:28:19 +01:00

2.5 KiB

mana-notify (Go)

Go replacement for the NestJS mana-notify service. Unified notification microservice for email, push, Matrix, and webhook notifications.

Architecture

  • Language: Go 1.25
  • Database: PostgreSQL (pgx v5, 5 tables in notify schema)
  • Queue: Go channels + goroutine worker pool (replaces BullMQ)
  • Metrics: Prometheus
  • Port: 3040

Endpoints

Notifications (X-Service-Key auth)

  • POST /api/v1/notifications/send — Send immediately
  • POST /api/v1/notifications/schedule — Schedule for future
  • POST /api/v1/notifications/batch — Batch send (max 100)
  • GET /api/v1/notifications/{id} — Get status
  • DELETE /api/v1/notifications/{id} — Cancel pending

Templates (X-Service-Key auth)

  • GET /api/v1/templates — List all
  • GET /api/v1/templates/{slug} — Get by slug
  • POST /api/v1/templates — Create
  • PUT /api/v1/templates/{slug} — Update
  • DELETE /api/v1/templates/{slug} — Delete
  • POST /api/v1/templates/{slug}/preview — Preview
  • POST /api/v1/templates/preview — Preview custom

Devices (JWT auth)

  • POST /api/v1/devices/register — Register push device
  • GET /api/v1/devices — List devices
  • DELETE /api/v1/devices/{id} — Unregister

Preferences (JWT auth)

  • GET /api/v1/preferences — Get preferences
  • PUT /api/v1/preferences — Update preferences

System

  • GET /health — Health check
  • GET /metrics — Prometheus metrics

Notification Channels

Channel Service Worker Concurrency Max Retries
Email Brevo SMTP 5 3
Push Expo Push API 10 3
Matrix Matrix Homeserver API 5 3
Webhook HTTP callback 10 5

Commands

go run ./cmd/server          # Dev
go build -o bin/mana-notify ./cmd/server  # Build
go test ./...                # Test

Environment Variables

Variable Default Description
PORT 3040 Server port
DATABASE_URL postgresql://...localhost:5432/mana_notify PostgreSQL
SERVICE_KEY dev-service-key Service-to-service auth
MANA_CORE_AUTH_URL http://localhost:3001 JWT validation
SMTP_HOST smtp-relay.brevo.com SMTP host
SMTP_PORT 587 SMTP port
SMTP_USER SMTP username
SMTP_PASSWORD SMTP password
SMTP_FROM ManaCore noreply@mana.how Default from
EXPO_ACCESS_TOKEN Expo push token
MATRIX_HOMESERVER_URL Matrix homeserver
MATRIX_ACCESS_TOKEN Matrix bot token