Files
vip-coordinator/backend
kyle 8ff331f8fa fix: load Traccar credentials from database on startup
Previously TraccarClientService was trying to authenticate with default
credentials (admin/admin) before GpsService could load the actual
credentials from the database. This caused 401 errors on driver enrollment.

Now GpsService sets credentials on TraccarClientService during onModuleInit()
after loading them from the gps_settings table.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 22:44:13 +01:00
..

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 users
  • GET /users/pending - List pending approval users
  • GET /users/:id - Get user by ID
  • PATCH /users/:id - Update user
  • PATCH /users/:id/approve - Approve/deny user
  • DELETE /users/:id - Delete user (soft)

VIPs (Admin, Coordinator)

  • GET /vips - List all VIPs
  • POST /vips - Create VIP
  • GET /vips/:id - Get VIP by ID
  • PATCH /vips/:id - Update VIP
  • DELETE /vips/:id - Delete VIP (soft)

Drivers (Admin, Coordinator)

  • GET /drivers - List all drivers
  • POST /drivers - Create driver
  • GET /drivers/:id - Get driver by ID
  • GET /drivers/:id/schedule - Get driver schedule
  • PATCH /drivers/:id - Update driver
  • DELETE /drivers/:id - Delete driver (soft)

Events (Admin, Coordinator; Drivers can view and update status)

  • GET /events - List all events
  • POST /events - Create event (with conflict detection)
  • GET /events/:id - Get event by ID
  • PATCH /events/:id - Update event
  • PATCH /events/:id/status - Update event status
  • DELETE /events/:id - Delete event (soft)

Flights (Admin, Coordinator)

  • GET /flights - List all flights
  • POST /flights - Create flight
  • GET /flights/status/:flightNumber - Get real-time flight status
  • GET /flights/vip/:vipId - Get flights for VIP
  • GET /flights/:id - Get flight by ID
  • PATCH /flights/:id - Update flight
  • DELETE /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 string
  • AUTH0_DOMAIN - Your Auth0 tenant domain
  • AUTH0_AUDIENCE - Your Auth0 API identifier
  • AUTH0_ISSUER - Your Auth0 issuer URL
  • AVIATIONSTACK_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)