# DEM Tools - Backend

API REST per gestione email marketing, scraping e campagne DEM.

## 🚀 Quick Start

```bash
# Installa dipendenze
npm install

# Configura environment
cp .env.example .env
# Modifica .env con le tue credenziali

# Crea database (solo prima volta)
# Vedi sezione Database Setup

# Avvia server development
npm run dev
```

## 📦 Dipendenze Principali

- **Express** - Framework web
- **Sequelize** - ORM per MySQL
- **Puppeteer** - Web scraping
- **SerpAPI** - Search results
- **Bull** - Job queue (richiede Redis)
- **Winston** - Logging

## 🗄️ Database Setup

Il database deve essere creato manualmente:

```sql
mysql -h 94.23.73.2 -u root -p

CREATE DATABASE gix_demtools CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'gix_demtools'@'localhost' IDENTIFIED BY 'your_password';
GRANT ALL PRIVILEGES ON gix_demtools.* TO 'gix_demtools'@'localhost';
FLUSH PRIVILEGES;
```

Poi esegui le migrazioni:

```bash
npm run migrate
npm run seed  # Opzionale: dati di esempio
```

## 📁 Struttura

```
src/
├── config/           # Configurazioni (DB, Logger, etc.)
├── models/          # Modelli Sequelize
├── routes/          # Route Express
├── controllers/     # Controller business logic
├── services/        # Servizi applicativi
├── middleware/      # Middleware Express
├── validators/      # Validazione input
├── jobs/           # Background jobs (Bull)
├── integrations/   # API esterne
├── utils/          # Utility functions
└── database/       # Migrations & Seeders
```

## 🔧 Scripts Disponibili

```bash
npm run dev          # Development con nodemon
npm start            # Production
npm run migrate      # Esegui migrations
npm run migrate:undo # Rollback migration
npm run seed         # Esegui seeders
npm run lint         # ESLint
npm run format       # Prettier
npm test             # Jest tests
```

## 🌐 API Endpoints

- `GET /health` - Health check
- `GET /api` - API info
- `POST /api/auth/login` - Login
- `GET /api/contacts` - Lista contatti
- `POST /api/scraper/search` - Avvia scraping

Vedi [API Documentation](./docs/API.md) per lista completa.

## ⚙️ Environment Variables

Vedi `.env.example` per tutte le variabili disponibili.

Variabili obbligatorie:
- `DB_HOST`, `DB_USER`, `DB_PASSWORD`, `DB_NAME`
- `JWT_SECRET`
- `REDIS_HOST` (per background jobs)
- `SERPAPI_KEY` (per scraping)

## 🔒 Sicurezza

- JWT per autenticazione
- Rate limiting su tutte le route
- Helmet.js per security headers
- Input validation con Joi
- Password hashing con bcrypt

## 📊 Logging

I log sono salvati in:
- `logs/app.log` - Log generali
- `logs/error.log` - Solo errori

Livello di log configurabile con `LOG_LEVEL` in .env

## 🚨 Troubleshooting

### Errore connessione database
- Verifica credenziali in `.env`
- Verifica che il database esista
- Verifica che l'utente abbia i permessi

### Puppeteer non funziona
- Installa dipendenze sistema: `sudo apt-get install chromium-browser`
- Configura `PUPPETEER_EXECUTABLE_PATH` in .env

### Redis non connette
- Verifica Redis sia in esecuzione: `redis-cli ping`
- Installa: `sudo apt-get install redis-server`

## 📝 TODO

- [ ] Implementare autenticazione completa
- [ ] Creare modelli database
- [ ] Implementare servizi scraping
- [ ] Aggiungere tests
- [ ] Documentare API con Swagger
