]> git.digitality.be Git - pdw25-26/commitdiff
feat(alerts): ajout serveur standalone micro-service port 3003
authorSteph Ponzo <ponzo.stephane2@gmail.com>
Thu, 26 Feb 2026 13:23:26 +0000 (14:23 +0100)
committerSteph Ponzo <ponzo.stephane2@gmail.com>
Thu, 26 Feb 2026 13:23:26 +0000 (14:23 +0100)
Wallette/server/modules/alerts/server.js [new file with mode: 0644]
Wallette/server/package.json

diff --git a/Wallette/server/modules/alerts/server.js b/Wallette/server/modules/alerts/server.js
new file mode 100644 (file)
index 0000000..adb7e29
--- /dev/null
@@ -0,0 +1,126 @@
+// =========================================================
+// ALERTS SERVICE - Serveur standalone
+// =========================================================
+// Ce fichier est le point d'entrée du micro-service Alerts.
+
+//
+// USAGE : node server.js   (depuis Wallette/server/)
+// PORT  : process.env.ALERTS_PORT || 3003
+// =========================================================
+
+import cors from 'cors';
+import dotenv from 'dotenv';
+import express from 'express';
+import { createServer } from 'http';
+import path from 'path';
+import { fileURLToPath } from 'url';
+
+// Charger .env depuis le dossier server/
+const __filename = fileURLToPath(import.meta.url);
+const __dirname = path.dirname(__filename);
+dotenv.config({ path: path.resolve(__dirname, '../../.env') });
+
+// =========================================================
+// IMPORTS DU MODULE ALERTS (AUCUNE MODIFICATION)
+// =========================================================
+import db from '../../config/db.js';
+import { createMySQLAdapter } from './adapters/mysql.adapter.js';
+import { createAlertsController } from './alerts.controller.js';
+import { createAlertsRepo } from './alerts.repo.js';
+import { createAlertsRouter } from './alerts.router.js';
+import { createAlertsService } from './alerts.service.js';
+import { broadcastAlert, getConnectedUsersCount, initSocketIO } from './socketManager.js';
+
+// =========================================================
+// PORT DU SERVICE
+// =========================================================
+const PORT = process.env.ALERTS_PORT || 3003;
+
+// =========================================================
+// CRÉER L'APPLICATION EXPRESS
+// =========================================================
+const app = express();
+
+app.use(cors());
+app.use(express.json());
+app.use(express.urlencoded({ extended: true }));
+
+// =========================================================
+// SERVEUR HTTP + SOCKET.IO
+// =========================================================
+const httpServer = createServer(app);
+
+const io = initSocketIO(httpServer, {
+    cors: {
+        origin: "*",
+        methods: ["GET", "POST"]
+    }
+});
+
+console.log('✅ Socket.IO initialisé (alerts-service)');
+
+// =========================================================
+// HEALTH CHECK (requis par le gateway)
+// =========================================================
+app.get('/health', (req, res) => {
+    res.json({
+        ok: true,
+        service: 'alerts-service',
+        port: PORT,
+        socketConnections: getConnectedUsersCount()
+    });
+});
+
+// =========================================================
+// INITIALISER LE MODULE ALERTS (INCHANGÉ)
+// =========================================================
+const alertsAdapter = createMySQLAdapter(db);
+const alertsRepo = createAlertsRepo(alertsAdapter);
+const alertsService = createAlertsService(alertsRepo);
+const alertsController = createAlertsController(alertsService, alertsRepo);
+const alertsRouter = createAlertsRouter(alertsController);
+
+console.log('✅ Module Alerts initialisé');
+
+// =========================================================
+// MONTER LES ROUTES
+// =========================================================
+app.use('/api/alerts', alertsRouter);
+
+// =========================================================
+// ROUTE TEST BROADCAST
+// =========================================================
+app.post('/test/broadcast-alert', (req, res) => {
+    const testAlert = req.body.alert || {
+        action: 'BUY', pair: 'BTC/EUR', confidence: 0.87,
+        reason: 'Signal de test', alertLevel: 'WARNING', price: 42150.23
+    };
+    const count = broadcastAlert(testAlert);
+    res.json({ success: true, message: `Alerte envoyée à ${count} utilisateur(s)`, alert: testAlert });
+});
+
+// =========================================================
+// 404 + ERREURS GLOBALES
+// =========================================================
+app.use((req, res) => {
+    res.status(404).json({ error: 'Route non trouvée', path: req.path });
+});
+
+app.use((err, req, res, next) => {
+    console.error('Erreur serveur:', err);
+    res.status(500).json({ error: 'Erreur serveur', message: process.env.NODE_ENV === 'development' ? err.message : undefined });
+});
+
+// =========================================================
+// DÉMARRAGE
+// =========================================================
+httpServer.listen(PORT, () => {
+    console.log(`
+╔══════════════════════════════════════════╗
+║         ALERTS SERVICE                   ║
+║  HTTP   : http://localhost:${PORT}          ║
+║  WS     : ws://localhost:${PORT}            ║
+╚══════════════════════════════════════════╝`);
+});
+
+export { alertsRepo, alertsService, io };
index 1c28eb2e37bb449251161fc6b8218749a157e28e..53e6e860f5fd7cf7fdde8223e88b5ea9783e7115 100644 (file)
@@ -8,7 +8,9 @@
     "start": "node app.js",
     "dev": "node --watch app.js",
     "test": "node test-module-complet.js",
-    "test:server": "node test-server-socket.js"
+    "test:server": "node test-server-socket.js",
+    "alerts": "node modules/alerts/server.js",
+    "alerts:dev": "node --watch modules/alerts/server.js"
   },
   "keywords": [
     "crypto",