Backend API service for FacilPay - Stellar-based multi-chain payment gateway. Handles payment processing, webhook management, settlement operations, and merchant integrations.
Backend API built with NestJS.
- Docker and Docker Compose for the fastest local setup
- Node.js 18+ and npm for running without Docker
Start the API and PostgreSQL with hot reload:
docker compose up --buildThe API will be available at http://localhost:3000.
Run database migrations inside the API container:
docker compose run --rm api migrateRun E2E tests against a throwaway PostgreSQL database:
docker compose -f docker-compose.test.yml run --rm api test:e2eStop and remove local containers, networks, and volumes:
docker compose down -v- Install dependencies
npm installcp .env.example .envnpm run start:devnpm run dev
npm test
npm run test:e2e
npm run migrate
npm run docker:dev
npm run docker:test:e2e## 🩺 Health Check
To verify the API is running correctly, use the health check endpoint:
```bash
curl -i http://localhost:3000/health Expected Response
Status: 200 OK
Body:
{
"status": "ok"
}The API includes a JWT-based authentication system with the following endpoints:
curl -X POST http://localhost:3000/auth/register \
-H "Content-Type: application/json" \
-d '{"email":"user@example.com","password":"password123"}'curl -X POST http://localhost:3000/auth/login \
-H "Content-Type: application/json" \
-d '{"email":"user@example.com","password":"password123"}'curl -X GET http://localhost:3000/profile \
-H "Authorization: Bearer YOUR_JWT_TOKEN"## 📁 Project Structure
src/
├── modules/
│ ├── auth/
│ │ ├── auth.controller.ts
│ │ ├── auth.service.ts
│ │ ├── auth.module.ts
│ │ ├── jwt.strategy.ts
│ │ ├── guards/
│ │ └── decorators/
│ ├── users/
│ │ ├── user.entity.ts
│ │ ├── dto/
│ │ └── users.module.ts
│ └── health/
│ ├── health.controller.ts
│ ├── health.service.ts
│ └── health.module.ts
├── app.controller.ts
├── app.service.ts
├── app.module.ts
└── main.ts
The server runs on port 3000 by default.
The port can be configured using the PORT variable in the .env file
Logging is structured with Pino and writes rotating files under the log directory.
Environment variables:
- LOG_LEVEL (default: info in production, debug in development)
- LOG_DIR (default: logs)
- LOG_PRETTY (default: true in development, false in production)
- LOG_MAX_SIZE (default: 10m)
- LOG_RETENTION_DAYS (default: 14)
- LOG_BODY (default: false)
- LOG_BODY_MAX_LENGTH (default: 2048)
- LOG_RESPONSE_BODY (default: false)
-
JWT token-based authentication
-
Password hashing with bcrypt
-
Protected routes with guards
-
Public route decorator
-
Current user decorator
-
Role-based access control (ready for implementation)
-
Telegram: https://t.me/+afM9uh7GGtVkYmZk
├── modules/
│ ├── auth/
│ ├── stellar/ <-- New Module
│ │ ├── stellar.service.ts
│ │ └── stellar.module.ts
│ ├── users/
│ └── health/