const express = require('express'); const { exec } = require('child_process'); const fs = require('fs'); const cors = require('cors'); // Pour autoriser React const { createProxyMiddleware } = require('http-proxy-middleware'); // Le pont vers Java const app = express(); // 1. Activer CORS pour que React puisse communiquer avec l'API app.use(cors()); // 2. Parser le texte (uniquement pour la route de déploiement) app.use('/api/deploy', express.text({ type: '*/*', limit: '5mb' })); let currentJavaProcess = null; // 3. Votre route de déploiement app.post('/api/deploy', async (req, res) => { try { const yamlContent = req.body; // Appel au générateur pour obtenir le ZIP const genResponse = await fetch("https://jilali21-generator.hf.space/api/generator", { method: 'POST', body: yamlContent }); const zipBuffer = await genResponse.arrayBuffer(); fs.writeFileSync('/tmp/project.zip', Buffer.from(zipBuffer)); // ⚠️ LA CORRECTION EST ICI : // On tue brutalement tout processus Java existant pour libérer le port 8080 exec('pkill -f java || true', () => { // Une fois l'ancien Java mort, on prépare le nouveau dossier exec('rm -rf /tmp/app && unzip -o /tmp/project.zip -d /tmp/app', (err) => { if (err) return res.status(500).send("Erreur d'extraction ZIP"); // On compile et on lance le nouveau Spring Boot sur le port 8080 currentJavaProcess = exec('mvn spring-boot:run -Dspring-boot.run.arguments="--server.port=8080"', { cwd: '/tmp/app' }); // Optionnel : afficher les logs Java dans la console Node.js currentJavaProcess.stdout.on('data', (data) => console.log(data)); res.status(200).json({ message: "Déploiement en cours. L'API sera prête dans environ 40 secondes." }); }); }); // Fin du bloc pkill } catch (e) { res.status(500).send(e.message); } }); // 4. LE PROXY // Redirige toutes les requêtes (sauf /api/deploy) vers le Spring Boot sur le port 8080 app.use('/', createProxyMiddleware({ target: 'http://localhost:8080', changeOrigin: true, onError: (err, req, res) => { res.status(503).send("L'API Spring Boot démarre ou est en cours de déploiement... Veuillez patienter environ 40 secondes."); } })); // 5. Node.js écoute sur le 7860 pour satisfaire Hugging Face app.listen(7860, () => console.log('Runner listening on port 7860...'));