# VIP Coordinator Backend

NestJS 10.x backend with Prisma ORM, Auth0 authentication, and PostgreSQL.

## Quick Start

```bash
# 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

```bash
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

```bash
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)
