- Configure workspace Git repository with comprehensive .gitignore - Add Odoo as submodule for ERP reference code - Include documentation: SETUP.md, GIT-STRUCTURE.md - Add gitignore templates for projects (backend, frontend, database) - Structure supports independent repos per project/subproject level Workspace includes: - core/ - Reusable patterns, modules, orchestration system - projects/ - Active projects (erp-suite, gamilit, trading-platform, etc.) - knowledge-base/ - Reference code and patterns (includes Odoo submodule) - devtools/ - Development tools and templates - customers/ - Client implementations template 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
340 lines
5.7 KiB
Markdown
340 lines
5.7 KiB
Markdown
# Setup de Desarrollo Backend
|
|
|
|
**Versión:** 1.0.0
|
|
**Última Actualización:** 2025-11-28
|
|
**Aplica a:** apps/backend/
|
|
|
|
---
|
|
|
|
## Requisitos Previos
|
|
|
|
- Node.js v18+ (recomendado v20 LTS)
|
|
- npm v9+ o pnpm
|
|
- PostgreSQL 15+
|
|
- Git
|
|
|
|
---
|
|
|
|
## Instalación Inicial
|
|
|
|
### 1. Clonar Repositorio
|
|
|
|
```bash
|
|
git clone <repository-url>
|
|
cd gamilit
|
|
```
|
|
|
|
### 2. Instalar Dependencias
|
|
|
|
```bash
|
|
# Desde la raíz del monorepo
|
|
npm install
|
|
```
|
|
|
|
### 3. Configurar Variables de Entorno
|
|
|
|
```bash
|
|
# Copiar template
|
|
cp apps/backend/.env.example apps/backend/.env
|
|
|
|
# Editar con tus valores
|
|
nano apps/backend/.env
|
|
```
|
|
|
|
### Variables Requeridas
|
|
|
|
```env
|
|
# Database
|
|
DB_HOST=localhost
|
|
DB_PORT=5432
|
|
DB_USERNAME=gamilit_user
|
|
DB_PASSWORD=your_password
|
|
DB_DATABASE=gamilit_dev
|
|
|
|
# JWT
|
|
JWT_SECRET=your-super-secret-key-min-32-chars
|
|
JWT_EXPIRATION=1h
|
|
JWT_REFRESH_EXPIRATION=7d
|
|
|
|
# Application
|
|
PORT=3000
|
|
NODE_ENV=development
|
|
|
|
# Optional: Redis (para rate limiting en producción)
|
|
REDIS_HOST=localhost
|
|
REDIS_PORT=6379
|
|
|
|
# Optional: Mail (para emails en desarrollo usar Mailtrap)
|
|
MAIL_HOST=smtp.mailtrap.io
|
|
MAIL_PORT=587
|
|
MAIL_USER=your-mailtrap-user
|
|
MAIL_PASS=your-mailtrap-pass
|
|
```
|
|
|
|
---
|
|
|
|
## Configurar Base de Datos
|
|
|
|
### 1. Crear Base de Datos
|
|
|
|
```bash
|
|
cd apps/database
|
|
|
|
# Ejecutar script de creación
|
|
./create-database.sh
|
|
|
|
# O recrear desde cero (elimina datos existentes)
|
|
./drop-and-recreate-database.sh
|
|
```
|
|
|
|
### 2. Verificar Conexión
|
|
|
|
```bash
|
|
# Probar conexión
|
|
psql -h localhost -U gamilit_user -d gamilit_dev -c "SELECT 1"
|
|
```
|
|
|
|
---
|
|
|
|
## Ejecutar Backend
|
|
|
|
### Modo Desarrollo (con hot-reload)
|
|
|
|
```bash
|
|
# Desde raíz del monorepo
|
|
npm run dev:backend
|
|
|
|
# O desde apps/backend
|
|
cd apps/backend
|
|
npm run start:dev
|
|
```
|
|
|
|
### Modo Debug
|
|
|
|
```bash
|
|
npm run start:debug
|
|
```
|
|
|
|
### Modo Producción
|
|
|
|
```bash
|
|
npm run build:backend
|
|
npm run start:prod
|
|
```
|
|
|
|
---
|
|
|
|
## Verificar Instalación
|
|
|
|
### Health Check
|
|
|
|
```bash
|
|
curl http://localhost:3000/api/health
|
|
```
|
|
|
|
Respuesta esperada:
|
|
```json
|
|
{
|
|
"status": "ok",
|
|
"timestamp": "2025-11-28T10:00:00Z",
|
|
"database": "connected"
|
|
}
|
|
```
|
|
|
|
### Swagger UI
|
|
|
|
Abrir en navegador: `http://localhost:3000/api/docs`
|
|
|
|
---
|
|
|
|
## Estructura del Proyecto
|
|
|
|
```
|
|
apps/backend/
|
|
├── src/
|
|
│ ├── main.ts # Entry point
|
|
│ ├── app.module.ts # Root module
|
|
│ ├── modules/ # Feature modules
|
|
│ │ ├── auth/
|
|
│ │ ├── gamification/
|
|
│ │ ├── educational/
|
|
│ │ └── ...
|
|
│ ├── shared/ # Shared code
|
|
│ │ ├── decorators/
|
|
│ │ ├── guards/
|
|
│ │ ├── filters/
|
|
│ │ └── utils/
|
|
│ └── config/ # Configuration
|
|
├── test/ # E2E tests
|
|
├── nest-cli.json
|
|
├── tsconfig.json
|
|
└── package.json
|
|
```
|
|
|
|
---
|
|
|
|
## Scripts Disponibles
|
|
|
|
| Script | Descripción |
|
|
|--------|-------------|
|
|
| `npm run start:dev` | Desarrollo con hot-reload |
|
|
| `npm run start:debug` | Desarrollo con debugger |
|
|
| `npm run build` | Compilar para producción |
|
|
| `npm run start:prod` | Ejecutar build de producción |
|
|
| `npm run test` | Ejecutar tests unitarios |
|
|
| `npm run test:watch` | Tests en modo watch |
|
|
| `npm run test:cov` | Tests con coverage |
|
|
| `npm run test:e2e` | Tests end-to-end |
|
|
| `npm run lint` | Ejecutar ESLint |
|
|
| `npm run format` | Formatear con Prettier |
|
|
|
|
---
|
|
|
|
## Debugging
|
|
|
|
### VS Code
|
|
|
|
Crear `.vscode/launch.json`:
|
|
|
|
```json
|
|
{
|
|
"version": "0.2.0",
|
|
"configurations": [
|
|
{
|
|
"type": "node",
|
|
"request": "attach",
|
|
"name": "Attach to Backend",
|
|
"port": 9229,
|
|
"restart": true,
|
|
"sourceMaps": true,
|
|
"localRoot": "${workspaceFolder}/apps/backend",
|
|
"remoteRoot": "${workspaceFolder}/apps/backend"
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
Luego:
|
|
1. Ejecutar `npm run start:debug`
|
|
2. En VS Code: Run → Start Debugging
|
|
|
|
### Logs
|
|
|
|
```bash
|
|
# Ver logs en tiempo real
|
|
tail -f logs/app.log
|
|
|
|
# Filtrar por nivel
|
|
grep ERROR logs/app.log
|
|
```
|
|
|
|
---
|
|
|
|
## Troubleshooting
|
|
|
|
### Error: Cannot connect to database
|
|
|
|
```bash
|
|
# Verificar PostgreSQL está corriendo
|
|
pg_isready -h localhost -p 5432
|
|
|
|
# Verificar credenciales
|
|
psql -h localhost -U gamilit_user -d gamilit_dev
|
|
```
|
|
|
|
### Error: Port 3000 already in use
|
|
|
|
```bash
|
|
# Encontrar proceso usando el puerto
|
|
lsof -i :3000
|
|
|
|
# Matar proceso
|
|
kill -9 <PID>
|
|
```
|
|
|
|
### Error: Module not found
|
|
|
|
```bash
|
|
# Reinstalar dependencias
|
|
rm -rf node_modules
|
|
npm install
|
|
```
|
|
|
|
### Error: TypeORM entity metadata not found
|
|
|
|
- Verificar que la entidad está importada en el módulo correspondiente
|
|
- Verificar path en `typeorm.config.ts` → `entities`
|
|
|
|
---
|
|
|
|
## Desarrollo con Docker (Opcional)
|
|
|
|
### docker-compose.yml
|
|
|
|
```yaml
|
|
version: '3.8'
|
|
services:
|
|
backend:
|
|
build:
|
|
context: .
|
|
dockerfile: apps/backend/Dockerfile
|
|
ports:
|
|
- "3000:3000"
|
|
environment:
|
|
- DB_HOST=postgres
|
|
- DB_PORT=5432
|
|
depends_on:
|
|
- postgres
|
|
|
|
postgres:
|
|
image: postgres:15-alpine
|
|
environment:
|
|
POSTGRES_USER: gamilit_user
|
|
POSTGRES_PASSWORD: your_password
|
|
POSTGRES_DB: gamilit_dev
|
|
ports:
|
|
- "5432:5432"
|
|
volumes:
|
|
- postgres_data:/var/lib/postgresql/data
|
|
|
|
volumes:
|
|
postgres_data:
|
|
```
|
|
|
|
### Ejecutar
|
|
|
|
```bash
|
|
docker-compose up -d
|
|
```
|
|
|
|
---
|
|
|
|
## IDE Recomendado
|
|
|
|
### VS Code Extensions
|
|
|
|
- ESLint
|
|
- Prettier
|
|
- NestJS Snippets
|
|
- PostgreSQL (para queries)
|
|
- Thunder Client (para testing API)
|
|
|
|
### Settings Recomendadas
|
|
|
|
```json
|
|
{
|
|
"editor.formatOnSave": true,
|
|
"editor.defaultFormatter": "esbenp.prettier-vscode",
|
|
"typescript.preferences.importModuleSpecifier": "relative"
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## Ver También
|
|
|
|
- [ESTRUCTURA-MODULOS.md](./ESTRUCTURA-MODULOS.md) - Estructura de módulos
|
|
- [DATABASE-INTEGRATION.md](./DATABASE-INTEGRATION.md) - Integración con BD
|
|
- [../TESTING-GUIDE.md](../TESTING-GUIDE.md) - Guía de testing
|
|
- [../DEV-SERVERS.md](../DEV-SERVERS.md) - Servidores de desarrollo
|