This commit implements comprehensive driver schedule self-service functionality, allowing drivers to access their own schedules without requiring administrator permissions, along with full schedule support for multi-day views. Backend Changes: - Added /drivers/me/* endpoints for driver self-service operations: - GET /drivers/me - Get authenticated driver's profile - GET /drivers/me/schedule/ics - Export driver's own schedule as ICS - GET /drivers/me/schedule/pdf - Export driver's own schedule as PDF - POST /drivers/me/send-schedule - Send schedule to driver via Signal - PATCH /drivers/me - Update driver's own profile - Added fullSchedule parameter support to schedule export service: - Defaults to true (full upcoming schedule) - Pass fullSchedule=false for single-day view - Applied to ICS, PDF, and Signal message generation - Fixed route ordering in drivers.controller.ts: - Static routes (send-all-schedules) now come before :id routes - Prevents path matching issues - TypeScript improvements in copilot.service.ts: - Fixed type errors with proper null handling - Added explicit return types Frontend Changes: - Created MySchedule page with simplified driver-focused UI: - Preview PDF button - Opens schedule PDF in new browser tab - Send to Signal button - Sends schedule directly to driver's phone - Uses /drivers/me/* endpoints to avoid permission issues - No longer requires driver ID parameter - Resolved "Forbidden Resource" errors for driver role users: - Replaced /drivers/:id endpoints with /drivers/me endpoints - Drivers can now access their own data without admin permissions Key Features: 1. Full Schedule by Default - Drivers see all upcoming events, not just today 2. Self-Service Access - Drivers manage their own schedules independently 3. PDF Preview - Quick browser-based preview without downloading 4. Signal Integration - Direct schedule delivery to mobile devices 5. Role-Based Security - Proper CASL permissions for driver self-access This resolves the driver schedule access issue and provides a streamlined experience for drivers to view and share their schedules. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
VIP Coordinator Backend
NestJS 10.x backend with Prisma ORM, Auth0 authentication, and PostgreSQL.
Quick Start
# Install dependencies
npm install
# Set up environment variables
cp .env.example .env
# Edit .env with your Auth0 credentials
# Start PostgreSQL (via Docker)
cd ..
docker-compose up -d postgres
# Generate Prisma Client
npx prisma generate
# Run database migrations
npx prisma migrate dev
# Seed sample data (optional)
npm run prisma:seed
# Start development server
npm run start:dev
API Endpoints
All endpoints are prefixed with /api/v1
Public Endpoints
GET /health- Health check
Authentication
GET /auth/profile- Get current user profile
Users (Admin only)
GET /users- List all usersGET /users/pending- List pending approval usersGET /users/:id- Get user by IDPATCH /users/:id- Update userPATCH /users/:id/approve- Approve/deny userDELETE /users/:id- Delete user (soft)
VIPs (Admin, Coordinator)
GET /vips- List all VIPsPOST /vips- Create VIPGET /vips/:id- Get VIP by IDPATCH /vips/:id- Update VIPDELETE /vips/:id- Delete VIP (soft)
Drivers (Admin, Coordinator)
GET /drivers- List all driversPOST /drivers- Create driverGET /drivers/:id- Get driver by IDGET /drivers/:id/schedule- Get driver schedulePATCH /drivers/:id- Update driverDELETE /drivers/:id- Delete driver (soft)
Events (Admin, Coordinator; Drivers can view and update status)
GET /events- List all eventsPOST /events- Create event (with conflict detection)GET /events/:id- Get event by IDPATCH /events/:id- Update eventPATCH /events/:id/status- Update event statusDELETE /events/:id- Delete event (soft)
Flights (Admin, Coordinator)
GET /flights- List all flightsPOST /flights- Create flightGET /flights/status/:flightNumber- Get real-time flight statusGET /flights/vip/:vipId- Get flights for VIPGET /flights/:id- Get flight by IDPATCH /flights/:id- Update flightDELETE /flights/:id- Delete flight
Development Commands
npm run start:dev # Start dev server with hot reload
npm run build # Build for production
npm run start:prod # Start production server
npm run lint # Run ESLint
npm run test # Run tests
npm run test:watch # Run tests in watch mode
npm run test:cov # Run tests with coverage
Database Commands
npx prisma studio # Open Prisma Studio (database GUI)
npx prisma migrate dev # Create and apply migration
npx prisma migrate deploy # Apply migrations (production)
npx prisma migrate reset # Reset database (DEV ONLY)
npx prisma generate # Regenerate Prisma Client
npm run prisma:seed # Seed database with sample data
Environment Variables
See .env.example for all required variables:
DATABASE_URL- PostgreSQL connection stringAUTH0_DOMAIN- Your Auth0 tenant domainAUTH0_AUDIENCE- Your Auth0 API identifierAUTH0_ISSUER- Your Auth0 issuer URLAVIATIONSTACK_API_KEY- Flight tracking API key (optional)
Features
- ✅ Auth0 JWT authentication
- ✅ Role-based access control (Administrator, Coordinator, Driver)
- ✅ User approval workflow
- ✅ VIP management
- ✅ Driver management
- ✅ Event scheduling with conflict detection
- ✅ Flight tracking integration
- ✅ Soft deletes for all entities
- ✅ Comprehensive validation
- ✅ Type-safe database queries with Prisma
Tech Stack
- Framework: NestJS 10.x
- Database: PostgreSQL 15+ with Prisma 5.x ORM
- Authentication: Auth0 + Passport JWT
- Validation: class-validator + class-transformer
- HTTP Client: @nestjs/axios (for flight tracking)