From 16c202259c6905f675e5839da8bd00f8b654a1d9 Mon Sep 17 00:00:00 2001 From: federicopedron05 Date: Wed, 18 Feb 2026 16:27:00 +0100 Subject: [PATCH 1/2] added weatherDate in AI prompt --- src/controllers/consigliController.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/controllers/consigliController.js b/src/controllers/consigliController.js index 815a9d6..cd924fe 100644 --- a/src/controllers/consigliController.js +++ b/src/controllers/consigliController.js @@ -31,7 +31,7 @@ exports.getConsigli = async (req, res) => { // Build weather context let weatherContext = ''; if (weather) { - weatherContext = `\nCurrent weather: temperature ${weather.temperature}°C, humidity ${weather.humidity}%, wind ${weather.windSpeed} km/h, condition: ${weather.condition}.`; + weatherContext = `\nCurrent weather: temperature ${weather.temperature}°C, humidity ${weather.humidity}%, wind ${weather.windSpeed} km/h, condition: ${weather.condition}, date: ${weather.date}.`; } const prompt = `You are an expert agronomist. Give exactly 4 practical tips for a citizen growing these ${lang.crops} in their ${lang.garden}: ${colture.join(', ')}.${weatherContext} From 73380bccc1095a2ffc5a0f99f1d94a047a599ef7 Mon Sep 17 00:00:00 2001 From: Antonio Caria Date: Wed, 18 Feb 2026 16:52:45 +0100 Subject: [PATCH 2/2] updated readme docs --- README.md | 524 +++++++++++++++++++++++++------------------------ doc/I18N.md | 184 ----------------- doc/LOGGING.md | 339 -------------------------------- doc/logo.png | Bin 0 -> 82624 bytes 4 files changed, 270 insertions(+), 777 deletions(-) delete mode 100644 doc/I18N.md delete mode 100644 doc/LOGGING.md create mode 100644 doc/logo.png diff --git a/README.md b/README.md index f8ed218..514c120 100644 --- a/README.md +++ b/README.md @@ -1,263 +1,279 @@ -# OrticelloAPI -Express API system for Orticello, a web application for Gardening management in community gardens. - -## Presentazione del Team -Ali Raja Faizan, Caria Antonio, Pedron Federico - -### TO DO - -#### Testing -- [x] Test classes for all working modules -- [ ] Integration tests for authentication flows -- [ ] E2E tests for main user stories - -#### User Story 2 - Search & Map (RF2) -- [ ] **Search filters implementation**: - - [ ] Filter by zone/area - - [ ] Filter by availability status - - [ ] Filter by sensor presence - - [ ] Filter by plot size -- [ ] Backend API for filtered search with multiple criteria - -#### User Story 4 - Plot Request (RF6.3) -- [ ] **Request submission system**: - - [ ] Validation: user must not have existing assignments - - [ ] Request status: "pending" -- [ ] **Notification system** for request confirmation -- [ ] Backend API for creating and managing plot requests -- [ ] Request model/schema in database - -#### User Story 6 - Notice Management (RF19, RF27) -- [ ] **Notice visibility system**: - - [ ] Municipality: "Public" and "Associations Only" options - - [ ] Association: auto-targeting to their citizens - -#### User Story 7 - Notice Consultation (RF3) -- [ ] **Notice filtering** by: - - [ ] Issuing entity (Municipality/Association) - - [ ] Date range - - [ ] Category -- [ ] **Read/Unread status tracking**: - - [ ] Mark as read functionality - - [ ] Visual indicators for unread notices - - [ ] User-notice read status model -- [ ] **Notice history** preservation -- [ ] Backend logic for user-specific notice visibility -- [ ] API endpoint for filtered notices by authenticated user - -#### User Story 8 - Competition Announcements (RF15.1) -- [ ] **PDF file upload** for bando documents -- [ ] **File validation** (PDF format, size limits) -- [ ] **File storage system** (local/cloud) -- [ ] **Mandatory field validation** (name, deadline, PDF) - -#### User Story 9 - Bando Consultation (RF26) -- [ ] **Active bando filtering** (future deadline only) -- [ ] **PDF download functionality** for each bando - -#### User Story 10 - Citizen Registration (RF5) -- [ ] **Email confirmation system**: - - [ ] Email service configuration - - [ ] Confirmation email template - - [ ] Email sending after registration -- [ ] **Enhanced duplicate checking**: - - [ ] Codice Fiscale uniqueness validation -- [ ] Registration success feedback - -#### User Story 11 - Request Management (RF25) -- [ ] **Request management dashboard** for associations: - - [ ] List of pending requests - - [ ] Request filtering (zone, priority, date) - - [ ] Citizen details display -- [ ] **Approval workflow**: - - [ ] Assignment duration input - - [ ] Plot status update to "occupied" - - [ ] Create affidaLotto record - - [ ] Citizen notification of approval -- [ ] **Rejection workflow**: - - [ ] Rejection reason field - - [ ] Citizen notification with reason -- [ ] Backend API for request approval/rejection -- [ ] Notification system (email/in-app) - -#### Advanced Features -- [ ] **Geospatial queries**: - - [ ] Query by distance from coordinates - - [ ] Query by geographic boundaries - - [ ] Optimize 2dsphere indexes usage -- [ ] **Sensor data management**: - - [ ] Date range queries for sensor readings - - [ ] Location-based sensor queries - - [ ] Latest reading optimization - - [ ] Data aggregation and statistics -- [ ] **Weather data management**: - - [ ] Date range queries for weather data - - [ ] Location-based weather queries - - [ ] Latest reading optimization -- [ ] **Role-based access control**: - - [ ] Apply checkRole middleware to protected routes - - [ ] Define permissions matrix for each endpoint - - [ ] Admin-specific functionalities -- [ ] **Audit logging** for critical operations -- [ ] **Email notification system** (SendGrid/Nodemailer) -- [ ] **In-app notification system** +
+ + +Orticello Logo + +**Sistema di gestione intelligente per orti urbani comunitari** + +[![Node.js](https://img.shields.io/badge/Node.js->=20.19.0-green.svg)](https://nodejs.org/) +[![MongoDB](https://img.shields.io/badge/MongoDB-Database-brightgreen.svg)](https://www.mongodb.com/) +[![Express](https://img.shields.io/badge/Express-4.16.3-blue.svg)](https://expressjs.com/) + +[Documentazione API](#-documentazione-api) • [Caratteristiche](#-caratteristiche-principali) • [Installazione](#-installazione) • [Team](#-team) + +
--- -## API Endpoints Implementation Status - -### 1. affidaLottoController.js 📦 (Plot Assignment & Requests) -| Method | Verb | Role | Status | Description / Requirements | -|--------|------|------|--------|---------------------------| -| `addColtura` | POST | `citt` | ✅ DONE | **RF7**: Citizen adds what they're cultivating | -| `removeColtura` | DELETE | `citt` | ✅ DONE | **RF7**: Citizen removes a crop | -| `getAllAffidaLotti` | GET | `asso, comu` | ✅ DONE | **RF100**: Assignment history | -| `getAffidaLottoById` | GET | `All` | ✅ DONE | Assignment details | -| `createAffidaLotto` | POST | `comu, asso` | ✅ DONE | Manual assignment (bypass request) | -| `updateAffidaLotto` | PUT | `comu, asso` | ✅ DONE | Update assignment details | -| `deleteAffidaLotto` | DELETE | `comu, asso` | ✅ DONE | Revoke assignment / End mandate | - -**Priority Tasks:** -- [ ] Implement `richiediLotto` endpoint for citizen plot requests -- [ ] Implement `getRichiestePendenti` to list pending requests for associations -- [ ] Implement `gestisciRichiesta` with approval/rejection logic -- [ ] Create `Richiesta` model/schema for plot requests -- [ ] Add role-based access control middleware to all endpoints - -### 2. bandoController.js 📜 (Competition Announcements) -| Method | Verb | Role | Status | Description / Requirements | -|--------|------|------|--------|---------------------------| -| `createBando` | POST | `comu` | ✅ DONE | **RF15**: Municipality publishes new bando | -| `deleteBando` | DELETE | `comu` | ✅ DONE | **RF15**: Municipality removes bando | -| `getAllBandi` | GET | `All` | ✅ DONE | **RF26**: List of bandi visible to all (or logged users) | -| `getBandoById` | GET | `All` | ✅ DONE | **RF26.2**: Bando details for application | -| `updateBando` | PUT | `comu` | ✅ DONE | Correction of errors in bando | -| `getActiveBandi` | GET | `Comu, Asso` | ✅ DONE | **RF26**: Only active bandi (deadline not passed) | - -**Priority Tasks:** -- [ ] Implement `getActiveBandi` to filter bandi with future deadlines -- [ ] Add PDF file upload functionality to `createBando` -- [ ] Add file storage system (local/cloud) -- [ ] Add file validation (PDF only, size limits) -- [ ] Add role-based access control middleware - -### 3. avvisoController.js 📢 (Notices & Communications) -| Method | Verb | Role | Status | Description / Requirements | -|--------|------|------|--------|---------------------------| -| `createAvviso` | POST | `comu, asso` | ✅ DONE | **RF19, RF27**: Municipality or Association creates notices | -| `getAllAvvisi` | GET | `All` | ✅ DONE | **RF3**: Notice board view (filtered by relevance) | -| `getAvvisoById` | GET | `All` | ✅ DONE | Notice details | -| `updateAvviso` | PUT | `comu, asso` | ✅ DONE | Update own notice | -| `deleteAvviso` | DELETE | `comu, asso` | ✅ DONE | Delete notice (only own) | -| `getAvvisiFiltered` | GET | `All` | ✅ DONE | **RF3.4**: Filtered notices (entity, date, category) | -| `markAsRead` | PUT | `All` | ✅ DONE | **RF3**: Mark notice as read | - -**Priority Tasks:** -- [ ] Implement notice visibility system (Public, Associations Only, Association-specific) -- [ ] Add `target` field validation in `createAvviso` -- [x] Implement `getAvvisiFiltered` with filtering by entity, date, category -- [x] Implement `markAsRead` endpoint -- [x] Create `AvvisoLetto` model for read/unread tracking -- [x] Add role-based access control middleware - -### 4. ortoController.js 🏡 (Garden Management) -| Method | Verb | Role | Status | Description / Requirements | -|--------|------|------|--------|---------------------------| -| `createOrto` | POST | `comu` | ✅ DONE | **RF16**: Municipality registers new garden space | -| `updateOrto` | PUT | `comu` | ✅ DONE | Modify data (e.g., address, number of plots) | -| `getAllOrtos` | GET | `All` | ✅ DONE | **RF2**: Map/List of city gardens | -| `getOrtoById` | GET | `All` | ✅ DONE | Single garden details | -| `deleteOrto` | DELETE | `comu` | ✅ DONE | Remove garden (with integrity check) | -| `getOrtosFiltrati` | GET | `All` | ✅ DONE | **RF2.2**: Gardens filtered by zone, availability, sensors, size | - -**Priority Tasks:** -- [x] Implement `getOrtosFiltrati` with multiple filter criteria -- [ ] Add geospatial query support for location-based filtering -- [x] Add role-based access control middleware to protected endpoints - -### 5. affidaOrtoController.js 🤝 (Garden-Association Assignment) -| Method | Verb | Role | Status | Description / Requirements | -|--------|------|------|--------|---------------------------| -| `assignOrto` (createAffidaOrto) | POST | `comu` | ✅ DONE | **RF18**: Municipality assigns garden management to Association | -| `revokeOrto` (deleteAffidaOrto) | DELETE | `comu` | ✅ DONE | **RF18**: Municipality revokes management | -| `getAllAssignments` (getAllAffidaOrti) | GET | `comu` | ✅ DONE | List of who manages what | -| `getAffidaOrtoById` | GET | `All` | ✅ DONE | Assignment details | -| `updateAffidaOrto` | PUT | `comu` | ✅ DONE | Update assignment details | -| `getActiveAffidaOrti` | GET | `All` | ✅ DONE | Active garden assignments only | - -**Priority Tasks:** -- [ ] Add role-based access control middleware to all endpoints -- [ ] Add validation to prevent assignment conflicts - -### 6. associazioneController.js 👥 (Association Member Management) -| Method | Verb | Role | Status | Description / Requirements | -|--------|------|------|--------|---------------------------| -| `addMembro` | POST | `asso (Admin)` | ✅ DONE | **RF22**: Association Admin adds collaborator | -| `removeMembro` | DELETE | `asso (Admin)` | ✅ DONE | **RF22**: Association Admin removes collaborator | -| `getMembri` | GET | `asso` | ✅ DONE | List of association staff | -| `createAssociazione` | POST | `comu` | ✅ DONE | Create new association | -| `getAllAssociazioni` | GET | `All` | ✅ DONE | List all associations | -| `getAssociazioneById` | GET | `All` | ✅ DONE | Association details | -| `updateAssociazione` | PUT | `asso (Admin), comu` | ✅ DONE | Update association info | -| `deleteAssociazione` | DELETE | `comu` | ✅ DONE | Remove association | - -**Priority Tasks:** -- [x] Implement `addMembro` to add association collaborators -- [x] Implement `removeMembro` to remove collaborators -- [x] Implement `getMembri` to list association members -- [ ] Create member relationship model (utente-associazione) -- [x] Add admin-only access control for member management - -### 7. utenteController.js 👤 (User Profile Management) -| Method | Verb | Role | Status | Description / Requirements | -|--------|------|------|--------|---------------------------| -| `updateProfile` (updateUtente) | PUT | `Owner` | ✅ DONE | **RF4**: User modifies own data (phone, address) | -| `deleteProfile` (deleteUtente) | DELETE | `Owner` | ✅ DONE | **RF5**: Account deletion (GDPR) | -| `getProfile` (getUtenteById) | GET | `Owner, comu` | ✅ DONE | View own data | -| `getAllUtenti` | GET | `comu (Admin)` | ✅ DONE | Global monitoring (optional but useful) | -| `createUtente` | POST | `Public` | ✅ DONE | **RF5**: Self-registration | -| `updatePassword` | PUT | `Owner` | ✅ DONE | Change password | - -**Priority Tasks:** -- [ ] Add email confirmation system for registration -- [ ] Implement email service integration -- [ ] Add ownership validation (users can only modify their own data) -- [ ] Add role-based access control for `getAllUtenti` - -### 8. comuneController.js 🏛️ (Municipality Advanced Administration) -| Method | Verb | Role | Status | Description / Requirements | -|--------|------|------|--------|---------------------------| -| `createUtenteComune` | POST | `comu (Admin)` | ❌ TODO | **RF12**: Create municipal employee profiles | -| `createAssociazioneAdmin` | POST | `comu` | ❌ TODO | **RF14**: Create first Admin profile for new Association | -| `createComune` | POST | `System` | ✅ DONE | Create municipality record | -| `getAllComuni` | GET | `All` | ✅ DONE | List all municipalities | -| `getComuneById` | GET | `All` | ✅ DONE | Municipality details | -| `updateComune` | PUT | `comu (Admin)` | ✅ DONE | Update municipality info | -| `deleteComune` | DELETE | `System` | ✅ DONE | Remove municipality | - -**Priority Tasks:** -- [ ] Implement `createUtenteComune` for creating municipal employees -- [ ] Implement `createAssociazioneAdmin` for association initialization -- [ ] Add validation to ensure first association admin creation -- [ ] Add admin-only access control +## 📖 Descrizione + +**Orticello** è una piattaforma RESTful API completa per la gestione degli orti urbani comunitari della città di Trento. L'applicazione facilita l'amministrazione dei terreni coltivabili, la gestione delle assegnazioni ai cittadini, il monitoraggio ambientale e la comunicazione tra comuni, associazioni e utenti. + +### 🎯 Obiettivi + +- 🏡 Semplificare la gestione degli orti urbani +- 👥 Connettere cittadini, associazioni e amministrazioni comunali +- 📊 Monitorare le condizioni ambientali con sensori IoT +- 📢 Facilitare la comunicazione attraverso avvisi e bandi +- 🌍 Supportare la sostenibilità urbana e l'agricoltura locale --- -### Implementation Priority +## ✨ Caratteristiche Principali + +### 🔐 Autenticazione e Autorizzazione +- Sistema JWT per autenticazione sicura +- Gestione ruoli multi-livello (Cittadini, Associazioni, Comuni) +- Controllo accessi basato su permessi granulari + +### 🗺️ Gestione Geospaziale +- Localizzazione orti e lotti con coordinate GeoJSON +- Query geospaziali avanzate (ricerca per distanza e area) +- Indicizzazione MongoDB 2dsphere per performance ottimali + +### 🌿 Amministrazione Orti e Lotti +- Gestione completa di orti urbani e singoli lotti +- Sistema di assegnazione e affidamento terreni +- Tracciamento stato e disponibilità lotti + +### 📡 Monitoraggio Ambientale +- Integrazione dati sensori IoT in tempo reale +- Raccolta dati meteorologici +- Storico condizioni ambientali + +### 📣 Comunicazione +- Sistema avvisi per comuni e associazioni +- Gestione bandi di concorso +- Notifiche mirate agli utenti + +### 🌐 Internazionalizzazione +- Supporto multilingua (🇮🇹 Italiano, 🇬🇧 Inglese, 🇩🇪 Tedesco) +- Rilevamento automatico lingua preferita +- Messaggi di errore localizzati + +### 🤖 AI Integration +- Integrazione Google Generative AI +- Consigli personalizzati per la coltivazione + +--- + +## 🏗️ Architettura + +### Stack Tecnologico + +``` +Backend Framework: Express.js 4.16.3 +Database: MongoDB 9.0.0 con Mongoose ODM +Autenticazione: JWT + bcrypt +Documentazione: OpenAPI 3.0 / Swagger +Testing: Jest + Supertest +Security: Helmet, CORS, Validator +``` + +### Struttura Moduli + +``` +📦 Orticello API +├── 🏡 Orti (Gardens) - Gestione orti urbani +├── 📐 Lotti (Plots) - Gestione singoli lotti coltivabili +├── 👤 Utenti (Users) - Gestione utenti (cittadini, admin) +├── 🏢 Associazioni - Gestione associazioni di quartiere +├── 🏛️ Comune (Municipality) - Gestione enti comunali +├── 🤝 Affidamenti - Assegnazioni orti e lotti +├── 📢 Avvisi (Notices) - Comunicazioni pubbliche +├── 📋 Bandi (Competitions) - Bandi di assegnazione +├── 🌤️ Meteo (Weather) - Dati meteorologici +└── 📡 Sensori (Sensors) - Dati sensori ambientali +``` + +--- + +## 🚀 Installazione + +### Prerequisiti + +- Node.js >= 20.19.0 +- npm >= 10.0.0 +- MongoDB (locale o cloud) + +### Setup + +```bash +# Clona il repository +git clone https://github.com/your-repo/orticello.git + +# Entra nella directory +cd orticello + +# Installa le dipendenze +npm install + +# Configura le variabili d'ambiente +cp .env.example .env +# Modifica .env con le tue configurazioni + +# Avvia l'applicazione +npm start + +# Oppure in modalità sviluppo +npm run dev +``` + +### Variabili d'Ambiente + +Crea un file `.env` nella root del progetto: + +```env +# Database +MONGODB_URI=mongodb://localhost:27017/orticello + +# Server +PORT=8080 + +# JWT +JWT_SECRET=your-secret-key-here + +# Google AI (opzionale) +GOOGLE_API_KEY=your-google-api-key +``` + +--- + +## 📚 Documentazione API + +La documentazione interattiva completa è disponibile tramite Swagger UI: + +``` +http://localhost:8080/api-docs +``` + +### Endpoints Principali + +| Risorsa | Endpoint | Descrizione | +|---------|----------|-------------| +| 🔐 Auth | `/api/v1/authentication` | Login e registrazione | +| 🏡 Orti | `/api/v1/orti` | CRUD orti urbani | +| 📐 Lotti | `/api/v1/lotti` | CRUD lotti coltivabili | +| 👤 Utenti | `/api/v1/utenti` | Gestione utenti | +| 🏢 Associazioni | `/api/v1/associazioni` | Gestione associazioni | +| 📢 Avvisi | `/api/v1/avvisi` | Gestione comunicazioni | +| 📋 Bandi | `/api/v1/bandi` | Gestione bandi | +| 🌤️ Meteo | `/api/v1/meteo` | Dati meteorologici | +| 📡 Sensori | `/api/v1/sensor` | Dati sensori IoT | + +### Esempio Richiesta + +```javascript +// Autenticazione +const response = await fetch('http://localhost:8080/api/v1/authentication/login', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + email: 'user@example.com', + password: 'password123' + }) +}); + +const { token } = await response.json(); + +// Richiesta autenticata +const orti = await fetch('http://localhost:8080/api/v1/orti', { + headers: { + 'Authorization': `Bearer ${token}`, + 'X-Language': 'it' + } +}); +``` + +--- + +## 🧪 Testing + +```bash +# Esegui tutti i test +npm test + +# Test con coverage +npm test -- --coverage + +# Test specifici +npm test -- controllers/ortoController.test.js +``` + +### Copertura Test + +- ✅ Controller tests +- ✅ Utility middleware tests +- ✅ Authentication tests + +--- + +## 🌍 Internazionalizzazione + +L'API supporta richieste multilingua: + +```bash +# Query parameter +GET /api/v1/orti?lang=en + +# Header personalizzato +X-Language: de + +# Accept-Language (automatico) +Accept-Language: en-US,en;q=0.9 +``` + +--- + +## 🔒 Sicurezza + +- 🔐 Autenticazione JWT con token expiration +- 🔑 Password hashing con bcrypt +- ✅ Validazione input con validator.js +- 🛡️ CORS configurato +- 🔍 Sanitizzazione dati +- 📝 Logging completo richieste ed errori + +--- + +## 📊 Logging + +Sistema di logging strutturato per: +- ✅ Richieste HTTP +- ❌ Errori applicativi +- 🔌 Connessioni database +- ⚠️ Avvisi di sistema + +--- + +## 👥 Team + +Sviluppato con ❤️ da: + +- **Ali Raja Faizan** +- **Antonio Caria** +- **Federico Pedron** + +--- + +## 📞 Contatti + +Per domande o supporto, apri una issue su GitHub. + +--- -**High Priority (Core User Stories):** -1. Plot request system (`richiediLotto`, `getRichiestePendenti`, `gestisciRichiesta`) -2. Notice visibility and filtering system -3. Active bandi filtering with PDF support -4. Role-based access control on all endpoints +
-**Medium Priority (Enhanced Features):** -1. Association member management -2. Email confirmation system -3. Municipal employee management -4. Read/unread notice tracking +**Coltiva il futuro verde delle città! 🌱🏙️** -**Low Priority (Nice to Have):** -1. Advanced filtering for gardens -2. Geospatial queries optimization -3. Audit logging implementation +
\ No newline at end of file diff --git a/doc/I18N.md b/doc/I18N.md deleted file mode 100644 index 54bb4fb..0000000 --- a/doc/I18N.md +++ /dev/null @@ -1,184 +0,0 @@ -# Sistema di Internazionalizzazione (i18n) - Orticello API - -## Lingue Supportate -- 🇮🇹 Italiano (it) - Default -- 🇬🇧 Inglese (en) -- 🇩🇪 Tedesco (de) - -## Come Funziona - -Il sistema rileva automaticamente la lingua preferita dell'utente in questo ordine di priorità: - -1. **Query Parameter** - `?lang=en` -2. **Header Personalizzato** - `X-Language: de` -3. **Header Accept-Language** - Rilevamento automatico dal browser -4. **Lingua Default** - Italiano (it) - -## Esempi di Utilizzo - -### 1. Tramite Query Parameter -```bash -GET /api/v1/orti?lang=en -GET /api/v1/utenti?lang=de -``` - -### 2. Tramite Header Personalizzato -```bash -curl -H "X-Language: en" http://localhost:8080/api/v1/orti -``` - -### 3. Tramite Accept-Language (automatico dal browser) -```bash -curl -H "Accept-Language: de-DE,de;q=0.9,en;q=0.8" http://localhost:8080/api/v1/orti -``` - -### 4. Fetch API (JavaScript) -```javascript -// Con query parameter -fetch('/api/v1/orti?lang=en') - -// Con header personalizzato -fetch('/api/v1/orti', { - headers: { - 'X-Language': 'de' - } -}) - -// Automatico (usa Accept-Language del browser) -fetch('/api/v1/orti') -``` - -### 5. Axios (JavaScript) -```javascript -// Con header personalizzato -axios.get('/api/v1/orti', { - headers: { - 'X-Language': 'en' - } -}) - -// Con query parameter -axios.get('/api/v1/orti', { - params: { - lang: 'de' - } -}) -``` - -## Esempi di Risposte - -### Italiano (Default) -```json -{ - "message": "Orto non trovato" -} -``` - -### Inglese -```json -{ - "message": "Garden not found" -} -``` - -### Tedesco -```json -{ - "message": "Garten nicht gefunden" -} -``` - -## Struttura File di Traduzione - -Le traduzioni sono organizzate in `/src/locales/`: - -``` -src/locales/ -├── it.json (Italiano) -├── en.json (Inglese) -└── de.json (Tedesco) -``` - -### Categorie di Messaggi - -- `errors.*` - Messaggi di errore -- `success.*` - Messaggi di successo -- `notFound.*` - Messaggi per risorse non trovate -- `validation.*` - Messaggi di validazione -- `auth.*` - Messaggi di autenticazione - -## Aggiungere Nuove Traduzioni - -### 1. Nei Controller -```javascript -// Invece di: -res.status(404).json({ message: 'Orto non trovato' }); - -// Usa: -res.status(404).json({ message: req.t('notFound.orto') }); -``` - -### 2. Nei File di Traduzione -Aggiungi la chiave in tutti i file lingua: - -**it.json** -```json -{ - "notFound": { - "orto": "Orto non trovato" - } -} -``` - -**en.json** -```json -{ - "notFound": { - "orto": "Garden not found" - } -} -``` - -**de.json** -```json -{ - "notFound": { - "orto": "Garten nicht gefunden" - } -} -``` - -## Testing - -### Test con cURL -```bash -# Italiano (default) -curl http://localhost:8080/api/v1/orti/invalid-id - -# Inglese -curl http://localhost:8080/api/v1/orti/invalid-id?lang=en - -# Tedesco -curl -H "X-Language: de" http://localhost:8080/api/v1/orti/invalid-id -``` - -## Best Practices - -1. **Usa sempre chiavi di traduzione** invece di testo hardcoded -2. **Organizza le chiavi** per categoria (errors, success, etc.) -3. **Mantieni consistenza** nei nomi delle chiavi tra tutte le lingue -4. **Testa tutte le lingue** dopo aver aggiunto nuove traduzioni -5. **Documenta** nuove chiavi di traduzione aggiunte - -## Note per gli Sviluppatori - -- Il middleware `detectLanguage` è applicato globalmente in `app.js` -- La funzione `req.t()` è disponibile in tutti i controller -- Usa la notazione punto per chiavi annidate: `req.t('errors.retrieving_ortos')` -- Le traduzioni mancanti torneranno alla chiave stessa come fallback - -## Roadmap - -- [ ] Aggiungere traduzioni per tutti i controller -- [ ] Implementare traduzioni per messaggi di validazione Mongoose -- [ ] Aggiungere supporto per parametri dinamici nelle traduzioni diff --git a/doc/LOGGING.md b/doc/LOGGING.md deleted file mode 100644 index 93d6684..0000000 --- a/doc/LOGGING.md +++ /dev/null @@ -1,339 +0,0 @@ -# Sistema di Logging - Orticello API - -## Panoramica - -Sistema di logging completo e configurabile per tracciare tutte le operazioni importanti dell'API. - -## Caratteristiche - -✅ **Completamente configurabile** tramite variabili d'ambiente -✅ **4 livelli di log**: error, warn, info, debug -✅ **Output flessibile**: console, file, o entrambi -✅ **Formato strutturato** con timestamp e contesto -✅ **Logging specializzato** per HTTP, DB, Auth -✅ **Rotazione automatica** dei file di log -✅ **Possibilità di disabilitare** completamente - -## Configurazione - -### Variabili d'Ambiente - -Tutte le configurazioni sono gestite tramite variabili d'ambiente nel file `.env`: - -```bash -# Abilita/disabilita logging -LOG_ENABLED=true - -# Livello di log (error | warn | info | debug) -LOG_LEVEL=info - -# Output su console -LOG_TO_CONSOLE=true - -# Output su file -LOG_TO_FILE=false - -# Percorso file di log -LOG_FILE_PATH=logs/app.log -``` - -### Livelli di Log - -| Livello | Descrizione | Quando usare | -|---------|-------------|--------------| -| `error` | Solo errori critici | Produzione | -| `warn` | Errori + warnings | Produzione | -| `info` | Informazioni generali + errori + warnings | Staging/Produzione | -| `debug` | Tutti i dettagli inclusi debug | Sviluppo | - -### Configurazioni Consigliate - -#### Sviluppo Locale -```bash -LOG_ENABLED=true -LOG_LEVEL=debug -LOG_TO_CONSOLE=true -LOG_TO_FILE=false -``` - -#### Produzione -```bash -LOG_ENABLED=true -LOG_LEVEL=warn -LOG_TO_CONSOLE=true -LOG_TO_FILE=true -LOG_FILE_PATH=/var/log/orticello/app.log -``` - -#### Testing -```bash -LOG_ENABLED=false -``` - -## Utilizzo - -### Nel Codice - -```javascript -const logger = require('./config/logger'); - -// Log generale -logger.info('Operazione completata'); -logger.error('Errore critico', { error: err.message }); -logger.warn('Attenzione', { details: 'qualcosa da notare' }); -logger.debug('Debug info', { data: someData }); - -// Log HTTP (automatico tramite middleware) -logger.http(req, 200, 'Request processed'); - -// Log Database -logger.db('INSERT', 'Orto', true, { id: orto._id }); -logger.db('UPDATE', 'Utente', false, { error: 'Validation failed' }); - -// Log Autenticazione -logger.auth('LOGIN', userId, true, { method: 'email' }); -logger.auth('REGISTER', email, false, { reason: 'Email exists' }); -``` - -### Middleware Automatici - -Il sistema include middleware che loggano automaticamente: - -#### 1. Request Logger -Logga tutte le richieste HTTP in arrivo e le risposte: -``` -[2024-12-17T10:30:45.123Z] [INFO] | {"method":"GET","url":"/api/v1/orti","statusCode":200} - Request completed in 145ms -``` - -#### 2. Error Logger -Logga tutti gli errori non gestiti con stack trace completo: -``` -[2024-12-17T10:30:45.123Z] [ERROR] | {"error":"ValidationError","stack":"..."} - Unhandled error -``` - -## Formato dei Log - -### Console (con colori) -``` -[2024-12-17T10:30:45.123Z] [INFO] | {"userId":"123","action":"login"} - User authenticated -``` - -### File (JSON-like) -``` -[2024-12-17T10:30:45.123Z] [ERROR] | {"method":"POST","url":"/api/v1/orti","error":"Validation failed"} - Error creating orto -``` - -## Rotazione dei Log - -I file di log vengono automaticamente ruotati quando superano **10MB**: - -``` -logs/app.log # File corrente -logs/app_2024-12-17.log # File rotato -logs/app_2024-12-16.log # File rotato precedente -``` - -## Esempi di Log per Operazione - -### 1. Operazioni CRUD - -```javascript -// GET /api/v1/orti -[INFO] DB SELECT on Orto: SUCCESS | {"count":15} - -// POST /api/v1/orti -[INFO] DB INSERT on Orto: SUCCESS | {"id":"674...","nome":"Orto Nord"} - -// PUT /api/v1/orti/:id -[INFO] DB UPDATE on Orto: SUCCESS | {"id":"674..."} - -// DELETE /api/v1/orti/:id -[WARN] Orto not found | {"id":"invalid-id"} -[INFO] DB DELETE on Orto: SUCCESS | {"id":"674..."} -``` - -### 2. Autenticazione - -```javascript -// Login riuscito -[INFO] Auth LOGIN for user mario@example.com: SUCCESS | {"userId":"123"} - -// Login fallito -[WARN] Auth LOGIN for user mario@example.com: FAILED | {"reason":"Wrong password"} - -// Registrazione Google -[INFO] Auth GOOGLE_REGISTER for user nuovo@gmail.com: SUCCESS | {"userId":"456"} -``` - -### 3. Errori - -```javascript -// Errore database -[ERROR] DB SELECT on Orto: FAILED | {"error":"Connection timeout"} - -// Errore validazione -[ERROR] DB INSERT on Utente: FAILED | {"error":"Email already exists"} - -// Errore non gestito -[ERROR] Unhandled error: Cannot read property 'id' of undefined | {"stack":"..."} -``` - -### 4. Richieste HTTP - -```javascript -// Richiesta normale -[INFO] | {"method":"GET","url":"/api/v1/orti","statusCode":200} - Request completed in 45ms - -// Richiesta non trovata -[WARN] 404 - Route not found | {"method":"GET","url":"/api/v1/nonexistent"} - -// Richiesta con errore -[ERROR] | {"method":"POST","url":"/api/v1/orti","statusCode":500} - Request completed in 120ms -``` - -## Best Practices - -### 1. Usa il Livello Appropriato - -```javascript -// ❌ Non fare -logger.info('Database connection failed'); - -// ✅ Fare -logger.error('Database connection failed', { error: err.message }); -``` - -### 2. Includi Sempre il Contesto - -```javascript -// ❌ Non fare -logger.info('Orto created'); - -// ✅ Fare -logger.db('INSERT', 'Orto', true, { id: orto._id, nome: orto.nome }); -``` - -### 3. Non Loggare Dati Sensibili - -```javascript -// ❌ Non fare -logger.debug('User login', { password: req.body.password }); - -// ✅ Fare -logger.debug('User login attempt', { email: req.body.email }); -``` - -### 4. Usa Debug per Dettagli di Sviluppo - -```javascript -// Durante sviluppo -logger.debug('Processing request', { body: req.body, params: req.params }); - -// In produzione (LOG_LEVEL=info) questo non verrà registrato -``` - -## Monitoraggio e Analisi - -### Trovare Errori - -```bash -# Cerca errori nei log -grep "ERROR" logs/app.log - -# Conta gli errori -grep -c "ERROR" logs/app.log - -# Ultimi 50 errori -grep "ERROR" logs/app.log | tail -n 50 -``` - -### Analisi Performance - -```bash -# Richieste lente (>1000ms) -grep "Request completed" logs/app.log | grep -E "[0-9]{4,}ms" - -# Conta richieste per endpoint -grep "Request completed" logs/app.log | grep -oP '"/api/v1/\w+"' | sort | uniq -c -``` - -### Audit di Sicurezza - -```bash -# Login falliti -grep "Auth LOGIN.*FAILED" logs/app.log - -# Tentativi di accesso 404 -grep "404" logs/app.log -``` - -## Disabilitare il Logging - -### Temporaneamente (per test) -```bash -LOG_ENABLED=false npm test -``` - -### Permanentemente -Nel file `.env`: -```bash -LOG_ENABLED=false -``` - -## Struttura File - -``` -src/ -├── config/ -│ └── logger.js # Sistema di logging principale -├── middleware/ -│ ├── requestLogger.js # Middleware per richieste HTTP -│ └── errorLogger.js # Middleware per errori -└── controllers/ - └── ortoController.js # Esempio di utilizzo nei controller - -logs/ # Directory log (auto-creata) -└── app.log # File di log principale -``` - -## Integrazione con Servizi Esterni - -Il sistema può essere facilmente esteso per integrare servizi di logging cloud: - -- **Sentry**: per error tracking -- **LogDNA/Datadog**: per log management -- **ELK Stack**: per analisi avanzata -- **CloudWatch**: per AWS deployment - -## Troubleshooting - -### I log non appaiono - -1. Verifica che `LOG_ENABLED=true` -2. Controlla il livello: `LOG_LEVEL` deve includere il livello che vuoi vedere -3. Se usi file, verifica i permessi di scrittura su `LOG_FILE_PATH` - -### File di log troppo grandi - -Il sistema ruota automaticamente i file >10MB. Per modificare: - -```javascript -// In src/config/logger.js -const maxSize = 5 * 1024 * 1024; // 5MB invece di 10MB -``` - -### Prestazioni degradate - -Se i log rallentano l'applicazione: -- Aumenta `LOG_LEVEL` (es. da debug a info) -- Disabilita `LOG_TO_FILE` in produzione -- Usa servizi esterni di logging asincroni - -## Roadmap - -- [ ] Integrazione con Sentry -- [ ] Log rotation basato su tempo (daily, weekly) -- [ ] Compressione file di log rotati -- [ ] Export log in formato JSON strutturato -- [ ] Dashboard web per visualizzazione log -- [ ] Alerts automatici per errori critici diff --git a/doc/logo.png b/doc/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..f068bc8b92fe1d9a12f5fc78d73bc5077cfbd363 GIT binary patch literal 82624 zcmYIPRZv`A6WoR1!QCN1fZ)L$LU4D7#WlElaQ8rPcXxMpcelkoxc%_()nBLf03eEs{Zs$|fVb~IR9NWuCn3cFfdBvrK>Vkml8erXCk#kQ z`S#WGe602GFaQG$!XJ<&iHaiJt5a28ecN2`sJc++EU$jNtl~^pVsQ>7Ullg(jyNsu z^Y44o>+l=*U7Ps!>upDv7~B?8Bsuf>n)`+;v&UWPb=tX@6pugD|4(x`R4%0A%6%5TKb1O9h_C)>;}r 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
  • kN#!ElqaZa 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