import mysql from "mysql2/promise"; const dbConfig = { 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, }; export default async function handler(req, res) { const { idMap, idUser } = req.query; if (!idMap || !idUser) { res.status(400).json({ error: "idMap and idUser are required" }); return; } let connection; try { connection = await mysql.createConnection(dbConfig); let onlySystem = -1; let districtCounter = 0; // Get onlySystem const [mapResult] = await connection.execute( "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 connection.execute( "SELECT count(*) as count FROM user_User_layer1 WHERE iduser = ?", [idUser] ); districtCounter = userLayerResult[0].count; } // Get GisStatusStations 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 `; if (districtCounter > 0) { query += ` AND a.iddistrict IN (SELECT iddistrict FROM user_user_layer1 WHERE iduser = ?)`; } if (onlySystem >= 0) { query += ` AND de.idsystem_typ = ?`; } query += ` ORDER BY p.level desc`; const queryParams = [idMap]; if (districtCounter > 0) { queryParams.push(idUser); } if (onlySystem >= 0) { queryParams.push(onlySystem); } const [results] = await connection.execute(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" }); } finally { if (connection) { await connection.end(); } } }