mirror of
https://github.com/Memo-2023/mana-monorepo.git
synced 2026-05-17 09:39:41 +02:00
mana-search-go → mana-search mana-notify-go → mana-notify mana-crawler-go → mana-crawler mana-api-gateway-go → mana-api-gateway Legacy NestJS versions are deleted, suffix no longer needed. Updated all references in docker-compose, CLAUDE.md, package.json, Forgejo workflows, and service package.json files. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
76 lines
2.5 KiB
Markdown
76 lines
2.5 KiB
Markdown
# 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
|
|
|
|
```bash
|
|
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 |
|