mirror of
https://github.com/Tria-plc/edr-platform.git
synced 2026-08-29 17:38:12 +00:00
Initial commit of edr-passenger-api alpha version
This commit is contained in:
142
README.md
142
README.md
@@ -1 +1,141 @@
|
||||
# edr-platform
|
||||
# EDR Passenger API
|
||||
|
||||
NestJS REST API for the Ethio-Djibouti Railway passenger platform. Handles booking lifecycle, seat inventory, payments (Telebirr, CBE Birr, eBirr, Card, Wallet), loyalty, live tracking, notifications, and support.
|
||||
|
||||
## Tech Stack
|
||||
|
||||
- **Runtime**: Node.js 20, TypeScript
|
||||
- **Framework**: NestJS 11
|
||||
- **Database**: PostgreSQL via Prisma ORM
|
||||
- **Auth**: JWT (Passport)
|
||||
- **Docs**: Swagger / OpenAPI (`/api-docs`)
|
||||
- **Package manager**: pnpm 9
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- Node.js >= 20
|
||||
- pnpm >= 9 (`npm i -g pnpm`)
|
||||
- PostgreSQL 15+
|
||||
|
||||
## Quick Start
|
||||
|
||||
```bash
|
||||
# 1. Install dependencies (from monorepo root)
|
||||
pnpm install
|
||||
|
||||
# 2. Copy and fill environment variables
|
||||
cp apps/edr-passenger-api/.env.example apps/edr-passenger-api/.env
|
||||
|
||||
# 3. Generate Prisma client
|
||||
pnpm --filter @edr/passenger-api run prisma:generate
|
||||
|
||||
# 4. Run database migrations
|
||||
pnpm --filter @edr/passenger-api run prisma:migrate
|
||||
|
||||
# 5. Seed the database
|
||||
pnpm --filter @edr/passenger-api run prisma:seed
|
||||
|
||||
# 6. Start in development mode
|
||||
pnpm --filter @edr/passenger-api run dev
|
||||
```
|
||||
|
||||
API runs at **http://localhost:4000**
|
||||
Swagger UI at **http://localhost:4000/api-docs**
|
||||
|
||||
## Environment Variables
|
||||
|
||||
| Variable | Description | Default |
|
||||
| --------------------- | ------------------------------------ | -------------------------------- |
|
||||
| `PORT` | HTTP port | `4000` |
|
||||
| `DATABASE_URL` | PostgreSQL connection string | — |
|
||||
| `JWT_SECRET` | JWT signing secret | — |
|
||||
| `JWT_EXPIRES_IN` | JWT expiry | `7d` |
|
||||
| `FRONTEND_URL` | Allowed CORS origin (web app) | `http://localhost:3000` |
|
||||
| `PORTAL_URL` | Allowed CORS origin (portal) | `http://localhost:3001` |
|
||||
| `SENDGRID_API_KEY` | SendGrid key for email notifications | _(optional — logs if absent)_ |
|
||||
| `SENDGRID_FROM_EMAIL` | Sender email address | `noreply@edr-platform.com` |
|
||||
|
||||
## API Modules
|
||||
|
||||
| Tag | Base path | Description |
|
||||
| -------------- | ----------------- | ---------------------------------------- |
|
||||
| Auth | `/auth` | Register, login, JWT |
|
||||
| Stations | `/stations` | Station directory |
|
||||
| Fleet | `/fleet` | Train services, coaches, seat batches |
|
||||
| Schedule | `/schedule` | Trips, fare rules, status updates |
|
||||
| Search | `/search` | Trip search, fare quotes |
|
||||
| Seats | `/seats` | Seat maps, holds, releases |
|
||||
| Booking | `/bookings` | Create, retrieve, cancel bookings |
|
||||
| Payment | `/payments` | Initiate payment, refunds, methods |
|
||||
| Tickets | `/tickets` | QR ticket generation and validation |
|
||||
| Passenger | `/passengers` | Profiles, traveler profiles, saved routes|
|
||||
| Notifications | `/notifications` | In-app notifications |
|
||||
| Loyalty | `/loyalty` | Points, tiers, rewards |
|
||||
| Wallet | `/wallet` | Balance, top-up, ledger |
|
||||
| Promotions | `/promos` | Active promos, promo code validation |
|
||||
| Live Tracking | `/live` | Real-time trip status, crowd signals |
|
||||
| Support | `/support` | FAQ, chat conversations |
|
||||
| Dashboard | `/dashboard` | Home screen aggregate |
|
||||
|
||||
## Seed Credentials
|
||||
|
||||
After running `prisma:seed`:
|
||||
|
||||
| Role | Email | Password |
|
||||
| --------- | ------------------------ | ------------- |
|
||||
| Passenger | `kelemu@email.com` | `password123` |
|
||||
| Admin | `admin@edr-platform.com` | `admin123` |
|
||||
|
||||
## Docker
|
||||
|
||||
```bash
|
||||
# Build image (run from monorepo root)
|
||||
docker build -f apps/edr-passenger-api/Dockerfile -t edr-passenger-api .
|
||||
|
||||
# Run
|
||||
docker run -p 4000:4000 --env-file apps/edr-passenger-api/.env edr-passenger-api
|
||||
```
|
||||
|
||||
## Scripts
|
||||
|
||||
| Command | Description |
|
||||
| ---------------------- | ------------------------------ |
|
||||
| `pnpm dev` | Start with hot-reload |
|
||||
| `pnpm build` | Compile to `dist/` |
|
||||
| `pnpm start` | Run compiled output |
|
||||
| `pnpm test` | Run unit tests |
|
||||
| `pnpm lint` | ESLint |
|
||||
| `pnpm type-check` | TypeScript type check |
|
||||
| `pnpm prisma:generate` | Regenerate Prisma client |
|
||||
| `pnpm prisma:migrate` | Run pending migrations |
|
||||
| `pnpm prisma:seed` | Seed the database |
|
||||
|
||||
## Project Structure
|
||||
|
||||
```
|
||||
src/
|
||||
├── common/ # PrismaService, JwtGuard, JwtStrategy, filters, interceptors
|
||||
├── config/ # app.config.ts, database.config.ts
|
||||
└── modules/
|
||||
├── auth/
|
||||
├── stations/
|
||||
├── fleet/
|
||||
├── schedules/
|
||||
├── search/
|
||||
├── seats/
|
||||
├── bookings/
|
||||
├── payments/
|
||||
├── tickets/
|
||||
├── passengers/
|
||||
├── notifications/
|
||||
├── loyalty/
|
||||
├── wallet/
|
||||
├── promos/
|
||||
├── live/
|
||||
├── support/
|
||||
└── dashboard/
|
||||
prisma/
|
||||
├── schema.prisma
|
||||
├── seed.ts
|
||||
└── migrations/
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user