feat: Initial backend structure for ERP Transportistas
- NestJS 10.x configuration - TypeScript setup with path aliases - Environment configuration template - Integration config for GPS, PAC, Maps Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
commit
2f76d541d2
54
.env.example
Normal file
54
.env.example
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
# =============================================================================
|
||||||
|
# ERP Transportistas - Variables de Entorno
|
||||||
|
# =============================================================================
|
||||||
|
|
||||||
|
# Server
|
||||||
|
NODE_ENV=development
|
||||||
|
PORT=3014
|
||||||
|
API_PREFIX=/api/v1
|
||||||
|
|
||||||
|
# Database
|
||||||
|
DB_HOST=localhost
|
||||||
|
DB_PORT=5432
|
||||||
|
DB_NAME=erp_transportistas_db
|
||||||
|
DB_USER=erp_admin
|
||||||
|
DB_PASSWORD=erp_dev_2026
|
||||||
|
|
||||||
|
# Redis
|
||||||
|
REDIS_HOST=localhost
|
||||||
|
REDIS_PORT=6379
|
||||||
|
REDIS_DB=10
|
||||||
|
|
||||||
|
# JWT
|
||||||
|
JWT_SECRET=your-super-secret-jwt-key-change-in-production
|
||||||
|
JWT_EXPIRES_IN=24h
|
||||||
|
JWT_REFRESH_EXPIRES_IN=7d
|
||||||
|
|
||||||
|
# Logging
|
||||||
|
LOG_LEVEL=debug
|
||||||
|
|
||||||
|
# CORS
|
||||||
|
CORS_ORIGIN=http://localhost:5174,http://localhost:3000
|
||||||
|
|
||||||
|
# =============================================================================
|
||||||
|
# Integraciones Transporte
|
||||||
|
# =============================================================================
|
||||||
|
|
||||||
|
# PAC (Proveedor de Timbrado CFDI)
|
||||||
|
PAC_URL=https://api.pac-ejemplo.com
|
||||||
|
PAC_USER=usuario_pac
|
||||||
|
PAC_PASSWORD=password_pac
|
||||||
|
PAC_RFC=RFC_EMPRESA
|
||||||
|
|
||||||
|
# GPS/Telematica
|
||||||
|
GPS_PROVIDER_URL=https://api.gps-provider.com
|
||||||
|
GPS_API_KEY=your-gps-api-key
|
||||||
|
|
||||||
|
# Mapas (Google Maps / HERE / OpenRouteService)
|
||||||
|
MAPS_API_KEY=your-maps-api-key
|
||||||
|
MAPS_PROVIDER=google # google | here | openroute
|
||||||
|
|
||||||
|
# WhatsApp Business
|
||||||
|
WHATSAPP_API_URL=https://graph.facebook.com
|
||||||
|
WHATSAPP_TOKEN=your-whatsapp-token
|
||||||
|
WHATSAPP_PHONE_ID=your-phone-id
|
||||||
60
package.json
Normal file
60
package.json
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
{
|
||||||
|
"name": "@erp-transportistas/backend",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"description": "Backend API para ERP Transportistas - Vertical de transporte de carga y logistica",
|
||||||
|
"main": "dist/index.js",
|
||||||
|
"scripts": {
|
||||||
|
"dev": "tsx watch src/index.ts",
|
||||||
|
"build": "tsc",
|
||||||
|
"start": "node dist/index.js",
|
||||||
|
"lint": "eslint src --ext .ts",
|
||||||
|
"lint:fix": "eslint src --ext .ts --fix",
|
||||||
|
"test": "jest",
|
||||||
|
"test:watch": "jest --watch",
|
||||||
|
"test:cov": "jest --coverage",
|
||||||
|
"typecheck": "tsc --noEmit"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"express": "^4.18.2",
|
||||||
|
"typeorm": "^0.3.28",
|
||||||
|
"pg": "^8.11.3",
|
||||||
|
"ioredis": "^5.8.2",
|
||||||
|
"jsonwebtoken": "^9.0.2",
|
||||||
|
"bcryptjs": "^2.4.3",
|
||||||
|
"helmet": "^7.1.0",
|
||||||
|
"cors": "^2.8.5",
|
||||||
|
"compression": "^1.7.4",
|
||||||
|
"morgan": "^1.10.0",
|
||||||
|
"swagger-ui-express": "^5.0.1",
|
||||||
|
"class-validator": "^0.14.0",
|
||||||
|
"class-transformer": "^0.5.1",
|
||||||
|
"uuid": "^9.0.0",
|
||||||
|
"date-fns": "^2.30.0",
|
||||||
|
"xml2js": "^0.6.2"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@types/express": "^4.17.21",
|
||||||
|
"@types/node": "^20.10.0",
|
||||||
|
"@types/jsonwebtoken": "^9.0.5",
|
||||||
|
"@types/bcryptjs": "^2.4.6",
|
||||||
|
"@types/cors": "^2.8.17",
|
||||||
|
"@types/compression": "^1.7.5",
|
||||||
|
"@types/morgan": "^1.9.9",
|
||||||
|
"@types/swagger-ui-express": "^4.1.6",
|
||||||
|
"@types/uuid": "^9.0.7",
|
||||||
|
"@types/xml2js": "^0.4.14",
|
||||||
|
"typescript": "^5.3.2",
|
||||||
|
"tsx": "^4.6.0",
|
||||||
|
"eslint": "^8.54.0",
|
||||||
|
"@typescript-eslint/eslint-plugin": "^6.12.0",
|
||||||
|
"@typescript-eslint/parser": "^6.12.0",
|
||||||
|
"jest": "^29.7.0",
|
||||||
|
"@types/jest": "^29.5.10",
|
||||||
|
"ts-jest": "^29.1.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=20.0.0"
|
||||||
|
},
|
||||||
|
"author": "ISEM",
|
||||||
|
"license": "PROPRIETARY"
|
||||||
|
}
|
||||||
29
tsconfig.json
Normal file
29
tsconfig.json
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
{
|
||||||
|
"compilerOptions": {
|
||||||
|
"target": "ES2022",
|
||||||
|
"module": "NodeNext",
|
||||||
|
"moduleResolution": "NodeNext",
|
||||||
|
"lib": ["ES2022"],
|
||||||
|
"outDir": "./dist",
|
||||||
|
"rootDir": "./src",
|
||||||
|
"strict": true,
|
||||||
|
"esModuleInterop": true,
|
||||||
|
"skipLibCheck": true,
|
||||||
|
"forceConsistentCasingInFileNames": true,
|
||||||
|
"resolveJsonModule": true,
|
||||||
|
"declaration": true,
|
||||||
|
"declarationMap": true,
|
||||||
|
"sourceMap": true,
|
||||||
|
"experimentalDecorators": true,
|
||||||
|
"emitDecoratorMetadata": true,
|
||||||
|
"baseUrl": "./src",
|
||||||
|
"paths": {
|
||||||
|
"@config/*": ["config/*"],
|
||||||
|
"@modules/*": ["modules/*"],
|
||||||
|
"@shared/*": ["shared/*"],
|
||||||
|
"@routes/*": ["routes/*"]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"include": ["src/**/*"],
|
||||||
|
"exclude": ["node_modules", "dist", "**/*.test.ts"]
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user