workspace/projects/gamilit/docs/95-guias-desarrollo/backend/SETUP-DEVELOPMENT.md
rckrdmrd ea1879f4ad feat: Initial workspace structure with multi-level Git configuration
- 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>
2025-12-08 10:44:23 -06:00

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