const express = require('express'); const sqlite3 = require('sqlite3').verbose(); const path = require('path'); const fs = require('fs'); const app = express(); const PORT = 3001; const DB_FILE = path.join(__dirname, 'congelo.db'); // Connexion et initialisation de la base de données SQLite const db = new sqlite3.Database(DB_FILE, (err) => { if (err) { console.error('Erreur lors de la création/connexion à SQLite:', err.message); } else { console.log('Connecté avec succès à la base SQLite : congelo.db'); db.run(` CREATE TABLE IF NOT EXISTS inventaire ( id INTEGER PRIMARY KEY AUTOINCREMENT, nom TEXT NOT NULL, type TEXT NOT NULL CHECK(type IN ('Viande', 'Fruits/Légumes', 'Autre')), format TEXT, quantite INTEGER NOT NULL DEFAULT 1, date_ajout TEXT NOT NULL ) `, (err) => { if (err) { console.error("Erreur d'initialisation de la table:", err.message); } else { console.log("Table 'inventaire' prête."); } }); } }); // Middleware pour parser le JSON app.use(express.json()); // --- ROUTES DE L'API REST --- // 1. Récupérer tous les items app.get('/api/items', (req, res) => { const tri = req.query.tri || 'nom'; let column = 'nom'; let direction = 'ASC'; if (tri === 'type') { column = 'type'; } else if (tri === 'date') { column = 'date_ajout'; direction = 'DESC'; // Plus récents d'abord } const query = `SELECT * FROM inventaire ORDER BY ${column} ${direction}`; db.all(query, [], (err, rows) => { if (err) { return res.status(500).json({ error: err.message }); } res.json(rows); }); }); // 2. Ajouter un nouvel item app.post('/api/items', (req, res) => { const { nom, type, format, quantite, date_ajout } = req.body; if (!nom || !type || !date_ajout) { return res.status(400).json({ error: "Les champs 'nom', 'type' et 'date_ajout' sont obligatoires." }); } const query = `INSERT INTO inventaire (nom, type, format, quantite, date_ajout) VALUES (?, ?, ?, ?, ?)`; const params = [nom, type, format || '', parseInt(quantite) || 1, date_ajout]; db.run(query, params, function(err) { if (err) { return res.status(500).json({ error: err.message }); } res.status(201).json({ id: this.lastID, nom, type, format, quantite, date_ajout }); }); }); // 3. Modifier la quantité d'un item (Incrémenter / Décrémenter) app.put('/api/items/:id/quantite', (req, res) => { const id = req.params.id; const { action } = req.body; db.get(`SELECT quantite FROM inventaire WHERE id = ?`, [id], (err, row) => { if (err) return res.status(500).json({ error: err.message }); if (!row) return res.status(404).json({ error: "Item introuvable" }); let nouvelleQuantite = row.quantite; if (action === 'increment') { nouvelleQuantite += 1; } else if (action === 'decrement') { nouvelleQuantite -= 1; } if (nouvelleQuantite < 0) nouvelleQuantite = 0; db.run(`UPDATE inventaire SET quantite = ? WHERE id = ?`, [nouvelleQuantite, id], (err) => { if (err) return res.status(500).json({ error: err.message }); res.json({ id, quantite: nouvelleQuantite }); }); }); }); // 4. Mettre à jour l'ensemble d'un item app.put('/api/items/:id', (req, res) => { const id = req.params.id; const { nom, type, format, quantite, date_ajout } = req.body; const query = `UPDATE inventaire SET nom = ?, type = ?, format = ?, quantite = ?, date_ajout = ? WHERE id = ?`; db.run(query, [nom, type, format, quantite, date_ajout, id], (err) => { if (err) return res.status(500).json({ error: err.message }); res.json({ success: true }); }); }); // 5. Supprimer un item app.delete('/api/items/:id', (req, res) => { const id = req.params.id; db.run(`DELETE FROM inventaire WHERE id = ?`, [id], (err) => { if (err) { return res.status(500).json({ error: err.message }); } res.json({ success: true, message: `L'item ${id} a été supprimé.` }); }); }); // --- SERVICE DE LA PAGE WEB FRONTEND (REACT SANS COMPILATION SERVEUR) --- app.get('/', (req, res) => { res.send(`