feat: Complete NestJS backend scaffold — 22 modules, 39 entities, WebSocket gateway
All checks were successful
Test Asgard Runner / test (push) Successful in 3s

Full backend rewrite from Rust/Axum to NestJS/TypeScript.
- 22 feature modules (auth, servers, wipes, maps, plugins, players, console,
  chat, team, notifications, settings, schedules, analytics, alerts, status,
  store, webstore, admin, setup, migration, users, licenses)
- 39 TypeORM entities matching PostgreSQL schema (12 migrations)
- Common infrastructure: JWT/RBAC guards, decorators, exception filter
- NATS service with pub/sub/request-reply
- Socket.IO WebSocket gateway with NATS bridge
- Docker: NestJS Dockerfile + updated docker-compose.yml
- Zero compile errors (npx tsc --noEmit clean)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Vantz Stockwell
2026-02-15 21:29:25 -05:00
parent 0f8d0dd14f
commit d20493d533
141 changed files with 13552 additions and 4 deletions

View File

@@ -0,0 +1,42 @@
export default () => ({
port: parseInt(process.env.API_PORT || '3000', 10),
database: {
url: process.env.DATABASE_URL || 'postgres://corrosion:corrosion_dev@localhost:5432/corrosion',
maxConnections: parseInt(process.env.DATABASE_MAX_CONNECTIONS || '20', 10),
},
nats: {
url: process.env.NATS_URL || 'nats://localhost:4222',
},
jwt: {
secret: process.env.JWT_SECRET || 'change-me',
accessExpirySeconds: parseInt(process.env.JWT_ACCESS_EXPIRY_SECONDS || '900', 10),
refreshExpirySeconds: parseInt(process.env.JWT_REFRESH_EXPIRY_SECONDS || '604800', 10),
},
encryption: {
key: process.env.ENCRYPTION_KEY || '',
},
admin: {
email: process.env.ADMIN_EMAIL || '',
password: process.env.ADMIN_PASSWORD || '',
username: process.env.ADMIN_USERNAME || 'Commander',
licenseKey: process.env.ADMIN_LICENSE_KEY || '',
},
cloudflare: {
apiToken: process.env.CLOUDFLARE_API_TOKEN || '',
zoneId: process.env.CLOUDFLARE_ZONE_ID || '',
baseDomain: process.env.BASE_DOMAIN || 'corrosionmgmt.com',
},
steam: {
apiKey: process.env.STEAM_API_KEY || '',
},
smtp: {
host: process.env.SMTP_HOST || '',
port: parseInt(process.env.SMTP_PORT || '587', 10),
username: process.env.SMTP_USERNAME || '',
password: process.env.SMTP_PASSWORD || '',
from: process.env.SMTP_FROM || 'noreply@corrosionmgmt.com',
},
frontend: {
url: process.env.FRONTEND_URL || 'http://localhost:5174',
},
});