import { readFileSync } from 'fs'; import { join } from 'path'; import { parse } from 'csv-parse/sync'; import axios from 'axios'; import { getSessionStatus, getClientsMap, getSessionIdForSocket } from './broadcast.js'; export function setupRoutes(app, __dirname) { // Health-Check-Endpoint app.get('/api/health', (req, res) => { res.json({ status: 'ok', timestamp: new Date().toISOString() }); }); // Session-Status-Endpoint app.get('/api/session', (req, res) => { try { const sessionId = req.sessionID; console.log('Session-Check - SessionID:', sessionId); console.log('Session-Check - Alle Clients:', Array.from(getClientsMap().keys())); // Prüfe zuerst in der clients Map const clientsMap = getClientsMap(); let client = clientsMap.get(sessionId); // Wenn kein Client mit dieser Session-ID gefunden wurde, aber es gibt Clients, // die bereits eingeloggt sind, könnte es sein, dass die Session-ID beim Reload geändert wurde. // In diesem Fall sollten wir den Client mit der Express-Session-ID verknüpfen. // Aber wir können nicht sicher sein, welcher Client zu welcher Session gehört, // daher geben wir einfach die Session-ID zurück und lassen den Client beim setSessionId // den richtigen Client finden. if (client && client.userName) { console.log('Session-Check - Client gefunden:', client.userName); res.json({ loggedIn: true, sessionId: sessionId, // Wichtig: Sende Session-ID zurück user: { sessionId: client.sessionId, userName: client.userName, gender: client.gender, age: client.age, country: client.country, isoCountryCode: client.isoCountryCode } }); } else { console.log('Session-Check - Kein Client gefunden für SessionID:', sessionId); // Prüfe auch alle Clients, um zu sehen, ob es ein Mismatch gibt for (const [sid, c] of clientsMap.entries()) { if (c.userName) { console.log('Session-Check - Gefundener Client:', sid, c.userName); } } // Sende Session-ID zurück, auch wenn nicht eingeloggt (für Login) res.json({ loggedIn: false, sessionId: sessionId }); } } catch (error) { console.error('Fehler beim Prüfen der Session:', error); res.json({ loggedIn: false }); } }); // Länderliste-Endpoint app.get('/api/countries', async (req, res) => { try { // Versuche zuerst, die CSV-Datei zu laden const csvPath = join(__dirname, '../docroot/countries.csv'); let countries = {}; try { const fileContent = readFileSync(csvPath, 'utf-8'); const records = parse(fileContent, { columns: true, skip_empty_lines: true, quote: '"', trim: true, relax_quotes: true, relax_column_count: true }); records.forEach(record => { if (record.Name && record.Code) { // Entferne alle Anführungszeichen (auch am Anfang/Ende) const name = record.Name.replace(/^["']+|["']+$/g, '').replace(/["']/g, '').trim(); const code = record.Code.replace(/^["']+|["']+$/g, '').replace(/["']/g, '').trim(); if (name && code) { countries[name] = code.toLowerCase(); } } }); } catch (fileError) { // Wenn die Datei nicht existiert, lade von der URL console.log('CSV-Datei nicht gefunden, lade von URL...'); const response = await axios.get('https://pkgstore.datahub.io/core/country-list/data_csv/data/d7c9d7cfb42cb69f4422dec222dbbaa8/data_csv.csv'); const lines = response.data.split('\n'); for (let i = 1; i < lines.length; i++) { const line = lines[i].trim(); if (!line) continue; // Parse CSV-Zeile mit Berücksichtigung von Anführungszeichen const parseCSVLine = (line) => { const result = []; let current = ''; let inQuotes = false; for (let i = 0; i < line.length; i++) { const char = line[i]; if (char === '"') { // Ignoriere Anführungszeichen, sie werden nicht zum Wert hinzugefügt inQuotes = !inQuotes; } else if (char === ',' && !inQuotes) { result.push(current.trim()); current = ''; } else { current += char; } } result.push(current.trim()); return result; }; const [name, code] = parseCSVLine(line); if (name && code) { // Entferne alle Anführungszeichen (auch am Anfang/Ende) const cleanName = name.replace(/^["']+|["']+$/g, '').replace(/["']/g, '').trim(); const cleanCode = code.replace(/^["']+|["']+$/g, '').replace(/["']/g, '').trim(); if (cleanName && cleanCode) { countries[cleanName] = cleanCode.toLowerCase(); } } } } res.json(countries); } catch (error) { console.error('Fehler beim Laden der Länderliste:', error); res.status(500).json({ error: 'Fehler beim Laden der Länderliste' }); } }); // Partners-Links app.get('/api/partners', (req, res) => { try { const csvPath = join(__dirname, '../docroot/links.csv'); const fileContent = readFileSync(csvPath, 'utf-8'); const records = parse(fileContent, { columns: true, skip_empty_lines: true, quote: '"' }); res.json(records); } catch (error) { console.error('Fehler beim Laden der Partner-Links:', error); res.status(500).json({ error: 'Fehler beim Laden der Partner-Links' }); } }); }