Files
teamwallet/.env.example
Bastian Wagner c80f78594e fix: register mail layout partial on handlebars singleton for real mailer wiring
The HandlebarsAdapter reads partials config from a top-level sibling of
`template` (mailerOptions.options.partials), not from
template.options.partials where it was nested. Because the mail templates
use partial blocks ({{#> layout}}...{{/layout}}), the unregistered partial
rendered silently as an unstyled fragment instead of throwing, so this went
unnoticed. A config-only fix also breaks on Windows because the adapter's
glob-based directory loader mishandles backslash path separators.

Fix registers the shared `layout` partial directly on the handlebars module
singleton in MailConfigService, bypassing the broken glob loader entirely.

Also:
- add mail-config.service.spec.ts, an integration test that drives the real
  MailerOptions + HandlebarsAdapter wiring (would have caught this bug,
  unlike the existing template-only spec which registers the partial itself)
- remove stale nestjs-i18n references from .env.example, env-example, and
  the backend README (i18n was already removed from the code)
- add missing trailing newlines to activation.hbs and reset-password.hbs

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-31 23:29:19 +02:00

56 lines
1.1 KiB
Plaintext

NODE_ENV=production
APP_PORT=3999
APP_NAME="NestJS API"
API_PREFIX=api
FRONTEND_DOMAIN=http://localhost:3999
BACKEND_DOMAIN=http://localhost:3999
# External database - not part of this container
DATABASE_TYPE=mysql
DATABASE_HOST=change-me
DATABASE_PORT=3306
DATABASE_USERNAME=change-me
DATABASE_PASSWORD=change-me
DATABASE_NAME=change-me
DATABASE_SYNCHRONIZE=false
DATABASE_MAX_CONNECTIONS=100
DATABASE_SSL_ENABLED=false
DATABASE_REJECT_UNAUTHORIZED=false
DATABASE_CA=
DATABASE_KEY=
DATABASE_CERT=
# Support "local", "s3"
FILE_DRIVER=local
ACCESS_KEY_ID=
SECRET_ACCESS_KEY=
AWS_S3_REGION=
AWS_DEFAULT_S3_BUCKET=
MAIL_HOST=change-me
MAIL_PORT=465
MAIL_USER=change-me
MAIL_PASSWORD=change-me
MAIL_IGNORE_TLS=true
MAIL_SECURE=true
MAIL_REQUIRE_TLS=false
MAIL_DEFAULT_EMAIL=noreply@example.com
MAIL_DEFAULT_NAME=Api
MAIL_CLIENT_PORT=1080
AUTH_JWT_SECRET=change-me
AUTH_JWT_TOKEN_EXPIRES_IN=100d
FACEBOOK_APP_ID=
FACEBOOK_APP_SECRET=
GOOGLE_CLIENT_ID=
GOOGLE_CLIENT_SECRET=
APPLE_APP_AUDIENCE=[]
TWITTER_CONSUMER_KEY=
TWITTER_CONSUMER_SECRET=
WORKER_HOST=redis://redis:6379/1