// /pages/api/talas5/webserviceMap/gisStationsMeasurementsSQL.js import mysql from "mysql2/promise"; // Erstellen eines Verbindungspools anstelle einer einzelnen Verbindung const pool = mysql.createPool({ host: process.env.DB_HOST, user: process.env.DB_USER, password: process.env.DB_PASSWORD, database: process.env.DB_NAME, port: process.env.DB_PORT, waitForConnections: true, connectionLimit: 10, queueLimit: 0, }); export default async function handler(req, res) { const { idMap, idUser } = req.query; if (!idMap || !idUser) { return res.status(400).json({ error: "idMap and idUser are required" }); } try { let onlySystem = -1; let districtCounter = 0; // Get onlySystem const [mapResult] = await pool.query("SELECT idsystem_typ FROM maps WHERE id = ?", [idMap]); if (mapResult.length > 0) { onlySystem = mapResult[0].idsystem_typ ?? -1; } // Get districtCounter if (idUser > 0) { const [userLayerResult] = await pool.query("SELECT count(*) as count FROM user_User_layer1 WHERE iduser = ?", [idUser]); districtCounter = userLayerResult[0].count; } // Building the query let query = ` SELECT ld.idLD, dc.message, p.level, p.name, p.color, ld.idDevice, de.isService, dc.idIcon FROM location as l LEFT JOIN location_coordinates AS co ON l.idLocation = co.idLocation and co.idMaps = ? LEFT JOIN location_device AS ld ON ld.idLocation = l.idLocation LEFT JOIN datapoint as d ON d.idLD = ld.idLD LEFT JOIN datapoint_conditions AS dc ON dc.idcondition = d.last_message_condition LEFT JOIN prio AS p ON p.idPrio = dc.idprio LEFT JOIN devices AS de ON de.idDevice = ld.idDevice LEFT JOIN area as a on a.idArea = l.idArea WHERE p.level < 100 AND co.X > 0 `; const queryParams = [idMap]; if (districtCounter > 0) { query += ` AND a.iddistrict IN (SELECT iddistrict FROM user_user_layer1 WHERE iduser = ?)`; queryParams.push(idUser); } if (onlySystem >= 0) { query += ` AND de.idsystem_typ = ?`; queryParams.push(onlySystem); } query += ` ORDER BY p.level desc`; const [results] = await pool.query(query, queryParams); const mpss = { IdMap: idMap.toString(), Statis: results.map((row) => ({ IdLD: row.idLD ?? -1, Le: row.level ?? -1, Me: row.message ?? "?", Na: row.name ?? "?", Co: row.color ?? "#ffffff", Feld: row.idDevice ?? -1, Icon: row.idIcon ?? 0, })), }; res.status(200).json(mpss); } catch (error) { console.error("Fehler beim Laden der Daten:", error); res.status(500).json({ error: "Interner Serverfehler" }); } }