Global admins couldn't see the app's event log (no read endpoint or UI existed for it) and had no way to clean up old entries or re-run a scheduled job without touching the database or server directly. Backend: - LoggingService.findLogs() + admin-only LogsController (GET admin/logs) with level/event/date-range/search filtering and pagination, mirroring AdminUsersService.findPlayers(). - LogRetentionScheduler deletes log entries older than LOG_RETENTION_DAYS (default 365, via app.config.ts), following the existing @Cron scheduler pattern. - Admin-only POST admin/run endpoints on CashboxExportController and RecurringTransactionsController that invoke the existing schedulers' public run methods on demand - both are safe to re-run since their "due" queries advance nextRunDate only after a successful run. Frontend: - New /logs page (global-admin gated, same pattern as /users): AG-Grid infinite-scroll table with level/event/date-range/search filters, plus buttons to trigger the two jobs now and see the result land in the grid immediately. - LogsApi, and triggerRunNow() added to the existing CashboxExportApi and RecurringTransactionApi. - Discoverability link from /users to /logs. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
36 lines
720 B
Plaintext
36 lines
720 B
Plaintext
NODE_ENV=development
|
|
APP_PORT=3000
|
|
APP_NAME="NestJS API"
|
|
API_PREFIX=api
|
|
FRONTEND_DOMAIN=http://localhost:3000
|
|
BACKEND_DOMAIN=http://localhost:3000
|
|
LOG_RETENTION_DAYS=365
|
|
|
|
DATABASE_TYPE=postgres
|
|
DATABASE_HOST=postgres
|
|
DATABASE_PORT=5432
|
|
DATABASE_USERNAME=root
|
|
DATABASE_PASSWORD=secret
|
|
DATABASE_NAME=api
|
|
DATABASE_SYNCHRONIZE=false
|
|
DATABASE_MAX_CONNECTIONS=100
|
|
DATABASE_SSL_ENABLED=false
|
|
DATABASE_REJECT_UNAUTHORIZED=false
|
|
DATABASE_CA=
|
|
DATABASE_KEY=
|
|
DATABASE_CERT=
|
|
|
|
MAIL_HOST=maildev
|
|
MAIL_PORT=1025
|
|
MAIL_USER=
|
|
MAIL_PASSWORD=
|
|
MAIL_IGNORE_TLS=true
|
|
MAIL_SECURE=false
|
|
MAIL_REQUIRE_TLS=false
|
|
MAIL_DEFAULT_EMAIL=noreply@example.com
|
|
MAIL_DEFAULT_NAME=Api
|
|
MAIL_CLIENT_PORT=1080
|
|
|
|
AUTH_JWT_SECRET=secret
|
|
AUTH_JWT_TOKEN_EXPIRES_IN=1d
|