From 1288f5fc604320c8b8c7ab838671d85938e9c623 Mon Sep 17 00:00:00 2001 From: Bastian Wagner Date: Sat, 1 Aug 2026 09:27:44 +0200 Subject: [PATCH] fix(mail): resolve templates from __dirname so they exist in the built image The Docker runtime image only ships dist/, but mail-config.service.ts pointed at src/mail/mail-templates and nest-cli.json never copied the .hbs files into dist/ either. This was silently masked before because the return-before-sendMail bug meant the path was never touched; fixing that bug now surfaces it as a hard crash on boot (readFileSync throwing synchronously inside the MailerModule factory). Resolve the templates dir from __dirname instead, which is correct in both dev (src/mail) and the compiled image (dist/mail), and add the mail-templates .hbs files to nest-cli.json's asset copy list so they actually land in dist/. --- myteamwallet_backend/nest-cli.json | 2 +- myteamwallet_backend/src/mail/mail-config.service.ts | 10 ++++------ 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/myteamwallet_backend/nest-cli.json b/myteamwallet_backend/nest-cli.json index 960099e..8af2a25 100644 --- a/myteamwallet_backend/nest-cli.json +++ b/myteamwallet_backend/nest-cli.json @@ -3,6 +3,6 @@ "collection": "@nestjs/schematics", "sourceRoot": "src", "compilerOptions": { - "assets": [{ "include": "i18n/**/*", "watchAssets": true }] + "assets": [{ "include": "mail/mail-templates/**/*.hbs", "watchAssets": true }] } } diff --git a/myteamwallet_backend/src/mail/mail-config.service.ts b/myteamwallet_backend/src/mail/mail-config.service.ts index acec8db..9f7b816 100644 --- a/myteamwallet_backend/src/mail/mail-config.service.ts +++ b/myteamwallet_backend/src/mail/mail-config.service.ts @@ -11,12 +11,10 @@ export class MailConfigService implements MailerOptionsFactory { constructor(private configService: ConfigService) {} createMailerOptions(): MailerOptions { - const templatesDir = path.join( - this.configService.get('app.workingDirectory'), - 'src', - 'mail', - 'mail-templates', - ); + // __dirname resolves to src/mail in dev (ts-node) and dist/mail in the + // built image, so this stays correct without depending on whether the + // process was started from a source or compiled checkout. + const templatesDir = path.join(__dirname, 'mail-templates'); handlebars.registerPartial( 'layout',