113 lines
2.9 KiB
Markdown
113 lines
2.9 KiB
Markdown
# MotoVaultPro Backend
|
|
|
|
## Modified Feature Capsule Architecture
|
|
|
|
Each feature is 100% self-contained in `src/features/[name]/`:
|
|
- **api/** - HTTP endpoints and routing
|
|
- **domain/** - Business logic and types
|
|
- **data/** - Database operations
|
|
- **migrations/** - Feature-specific schema
|
|
- **external/** - External API integrations
|
|
- **tests/** - All feature tests
|
|
- **docs/** - Feature documentation
|
|
|
|
## Quick Start (Containerized)
|
|
|
|
```bash
|
|
# From project root directory
|
|
# Ensure a valid .env exists at project root (production values provided by your team)
|
|
|
|
# Build and start all services (including backend)
|
|
make setup
|
|
|
|
# View logs
|
|
make logs-backend
|
|
|
|
# Run migrations
|
|
make migrate
|
|
|
|
# Run tests
|
|
make test
|
|
```
|
|
|
|
## Available Commands (Containerized)
|
|
|
|
**From project root:**
|
|
- `make start` - Build and start all services (production)
|
|
- `make test` - Run tests in containers
|
|
- `make migrate` - Run database migrations
|
|
- `make logs-backend` - View backend logs
|
|
- `make shell-backend` - Open shell in backend container
|
|
|
|
**Inside container (via make shell-backend):**
|
|
- `npm run build` - Build for production
|
|
- `npm start` - Run production build
|
|
- `npm test` - Run all tests
|
|
- `npm run test:feature --feature=vehicles` - Test specific feature
|
|
- `npm test -- features/vehicles` - Alternative: Test specific feature by path pattern
|
|
- `npm run schema:generate` - Generate combined schema
|
|
|
|
## Core Modules
|
|
|
|
### Configuration (`src/core/config/`)
|
|
- `config-loader.ts` - Environment variable loading and validation
|
|
- `database.ts` - PostgreSQL connection pool
|
|
- `redis.ts` - Redis client and cache service
|
|
- `tenant.ts` - Tenant configuration utilities
|
|
|
|
### Security (Fastify Plugins)
|
|
- `src/core/plugins/auth.plugin.ts` - Auth0 JWT via JWKS (@fastify/jwt + get-jwks)
|
|
- `src/core/plugins/error.plugin.ts` - Error handling
|
|
- `src/core/plugins/logging.plugin.ts` - Request logging
|
|
|
|
### Logging (`src/core/logging/`)
|
|
- `logger.ts` - Structured logging with Winston
|
|
|
|
### Middleware
|
|
- `src/core/middleware/tenant.ts` - Tenant extraction and validation
|
|
|
|
### Storage
|
|
- `src/core/storage/` - Storage abstractions
|
|
- `src/core/storage/adapters/minio.adapter.ts` - MinIO S3-compatible adapter
|
|
|
|
## Feature Development
|
|
|
|
To create a new feature capsule:
|
|
```bash
|
|
../scripts/generate-feature-capsule.sh feature-name
|
|
```
|
|
|
|
This creates the complete capsule structure with all necessary files.
|
|
|
|
## Testing
|
|
|
|
Tests mirror the source structure:
|
|
```
|
|
features/vehicles/
|
|
├── domain/
|
|
│ └── vehicles.service.ts
|
|
└── tests/
|
|
└── unit/
|
|
└── vehicles.service.test.ts
|
|
```
|
|
|
|
Run tests:
|
|
```bash
|
|
# All tests
|
|
npm test
|
|
|
|
# Specific feature
|
|
npm test -- features/vehicles
|
|
|
|
# Watch mode
|
|
npm run test:watch
|
|
```
|
|
|
|
## Environment Variables
|
|
|
|
Ensure `.env` includes these key variables:
|
|
- Database connection (DB_*)
|
|
- Redis connection (REDIS_*)
|
|
- Auth0 configuration (AUTH0_*) — backend validates JWTs via Auth0 JWKS (@fastify/jwt + get-jwks)
|
|
- External API keys
|