Commit Graph

23 Commits

Author SHA1 Message Date
Bastian Wagner
0e8ac74116 feat: add manager guide and contextual help 2026-08-02 09:22:16 +02:00
Bastian Wagner
6eab6251d5 fehlerhafte tests entfernt 2026-08-01 19:44:07 +02:00
Bastian Wagner
3551641a85 feat(teams): manage player active status and team-role with treasurer safeguard
Team managers (captain and above) can now deactivate/reactivate a player and
change their team-role from the player detail page. Deactivation zeroes the
open balance via an auditable adjustment transaction instead of overwriting
the balance field, and both actions are blocked if they would leave a team
without an active treasurer. Also hardens the existing PUT teams/:id/players
endpoint down to profile-only fields, fixing a typo bug and closing a gap
where any authenticated user could mutate a player's active/role/balance in
any team.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-01 15:42:09 +02:00
Bastian Wagner
2424a8c025 Merge branch 'feature/penalty-catalog-management' 2026-08-01 15:03:07 +02:00
Bastian Wagner
c7dfdd7498 fix: address penalty catalog review findings 2026-08-01 14:46:58 +02:00
Bastian Wagner
17228a52db feat: secure penalty catalog management 2026-08-01 13:17:44 +02:00
Bastian Wagner
4c1bd49405 fixes 2026-08-01 13:17:26 +02:00
Bastian Wagner
e3bff40181 Merge branch 'feature/admin-user-management' 2026-08-01 11:50:27 +02:00
Bastian Wagner
431eba86e7 fix: align admin profile request validation 2026-08-01 11:20:47 +02:00
Bastian Wagner
1288f5fc60 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/.
2026-08-01 09:27:44 +02:00
Bastian Wagner
bec1826bfa fix: close admin user security gaps 2026-08-01 00:19:49 +02:00
Bastian Wagner
e6acfdcac7 feat: secure admin user management 2026-07-31 23:37:54 +02:00
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
Bastian Wagner
0a0990c6f4 feat(mail): redesign email templates with TeamWallet branding and shared layout partial 2026-07-31 22:49:40 +02:00
Bastian Wagner
ae9de39ac4 chore(mail): remove nestjs-i18n, only ever used for the two mail templates
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-31 22:41:01 +02:00
Bastian Wagner
4105460400 test: guard inactive directory membership 2026-07-31 22:36:18 +02:00
Bastian Wagner
247aeefd4c fix(mail): remove dead return before sendMail, add firstName personalization
- Remove I18n dependency injection from MailService constructor
- Hardcode German email subject/body strings directly in the service
- Add optional firstName field to userSignUp and forgotPassword methods
- Wire firstName from user object through auth.service.ts call sites
- Add comprehensive unit tests for MailService

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-31 22:33:34 +02:00
Bastian Wagner
d738b49cbf fix: query user directory safely 2026-07-31 22:29:15 +02:00
Bastian Wagner
c382234746 feat: add safe user directory query 2026-07-31 22:12:53 +02:00
Bastian Wagner
72b3a9dc93 files 2026-07-31 21:38:58 +02:00
Bastian Wagner
e6757ab9dc files 2026-07-31 21:25:31 +02:00
Bastian Wagner
4ef35b3755 migration 2026-07-31 21:20:16 +02:00
Bastian Wagner
6bea4f766a first commit 2026-07-31 21:02:47 +02:00