Major Enhancement: NestJS Migration + CASL Authorization + Error Handling
Some checks failed
CI/CD Pipeline / Backend Tests (push) Has been cancelled
CI/CD Pipeline / Frontend Tests (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (push) Has been cancelled
CI/CD Pipeline / Security Scan (push) Has been cancelled
CI/CD Pipeline / Deploy to Staging (push) Has been cancelled
CI/CD Pipeline / Deploy to Production (push) Has been cancelled

Complete rewrite from Express to NestJS with enterprise-grade features:

## Backend Improvements
- Migrated from Express to NestJS 11.0.1 with TypeScript
- Implemented Prisma ORM 7.3.0 for type-safe database access
- Added CASL authorization system replacing role-based guards
- Created global exception filters with structured logging
- Implemented Auth0 JWT authentication with Passport.js
- Added vehicle management with conflict detection
- Enhanced event scheduling with driver/vehicle assignment
- Comprehensive error handling and logging

## Frontend Improvements
- Upgraded to React 19.2.0 with Vite 7.2.4
- Implemented CASL-based permission system
- Added AbilityContext for declarative permissions
- Created ErrorHandler utility for consistent error messages
- Enhanced API client with request/response logging
- Added War Room (Command Center) dashboard
- Created VIP Schedule view with complete itineraries
- Implemented Vehicle Management UI
- Added mock data generators for testing (288 events across 20 VIPs)

## New Features
- Vehicle fleet management (types, capacity, status tracking)
- Complete 3-day Jamboree schedule generation
- Individual VIP schedule pages with PDF export (planned)
- Real-time War Room dashboard with auto-refresh
- Permission-based navigation filtering
- First user auto-approval as administrator

## Documentation
- Created CASL_AUTHORIZATION.md (comprehensive guide)
- Created ERROR_HANDLING.md (error handling patterns)
- Updated CLAUDE.md with new architecture
- Added migration guides and best practices

## Technical Debt Resolved
- Removed custom authentication in favor of Auth0
- Replaced role checks with CASL abilities
- Standardized error responses across API
- Implemented proper TypeScript typing
- Added comprehensive logging

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-01-31 08:50:25 +01:00
parent 8ace1ab2c1
commit 868f7efc23
351 changed files with 44997 additions and 6276 deletions

View File

@@ -0,0 +1,58 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.errorLogger = exports.requestLogger = void 0;
// Generate a simple request ID
const generateRequestId = () => {
return `${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
};
// Request logger middleware
const requestLogger = (req, res, next) => {
const requestId = generateRequestId();
// Attach request ID to request object
req.requestId = requestId;
const startTime = Date.now();
// Log request
const logContext = {
requestId,
method: req.method,
url: req.originalUrl,
ip: req.ip || 'unknown',
userAgent: req.get('user-agent'),
userId: req.user?.id
};
console.log(`[${new Date().toISOString()}] REQUEST:`, JSON.stringify(logContext));
// Log response
const originalSend = res.send;
res.send = function (data) {
const duration = Date.now() - startTime;
console.log(`[${new Date().toISOString()}] RESPONSE:`, JSON.stringify({
requestId,
statusCode: res.statusCode,
duration: `${duration}ms`
}));
return originalSend.call(this, data);
};
next();
};
exports.requestLogger = requestLogger;
// Error logger (to be used before error handler)
const errorLogger = (err, req, res, next) => {
const requestId = req.requestId || 'unknown';
console.error(`[${new Date().toISOString()}] ERROR:`, JSON.stringify({
requestId,
error: {
name: err.name,
message: err.message,
stack: err.stack
},
request: {
method: req.method,
url: req.originalUrl,
headers: req.headers,
body: req.body
}
}));
next(err);
};
exports.errorLogger = errorLogger;
//# sourceMappingURL=logger.js.map