import dotenv from 'dotenv'; import { createClient } from 'redis'; import User from '../models/community/user.js'; dotenv.config(); const EXPIRATION_TIME = 30 * 60 * 1000; const redisClient = createClient({ url: `redis://${process.env.REDIS_HOST}:${process.env.REDIS_PORT}`, password: process.env.REDIS_PASSWORD, legacyMode: false, }); redisClient.connect().catch(console.error); const setUserSession = async (userId, sessionData) => { try { await redisClient.hSet(`user:${userId}`, sessionData); } catch (error) { console.error('Fehler beim Setzen der Benutzersitzung:', error); } }; const deleteUserSession = async (userId) => { try { await redisClient.del(`user:${userId}`); } catch (error) { console.error('Fehler beim Löschen der Benutzersitzung:', error); } }; const getUserSession = async (userId) => { try { return await redisClient.hGetAll(`user:${userId}`); } catch (error) { console.error('Fehler beim Abrufen der Benutzersitzung:', error); return null; } }; const updateUserTimestamp = async (hashedId) => { try { const userKey = `user:${hashedId}`; const userExists = await redisClient.exists(userKey); if (userExists) { await redisClient.hSet(userKey, 'timestamp', Date.now()); console.log(`Zeitstempel für Benutzer ${hashedId} aktualisiert.`); } else { console.warn(`Benutzer mit der hashedId ${hashedId} wurde nicht gefunden.`); } } catch (error) { console.error('Fehler beim Aktualisieren des Zeitstempels:', error); } }; const cleanupExpiredSessions = async () => { try { const keys = await redisClient.keys('user:*'); const now = Date.now(); for (const key of keys) { const session = await redisClient.hGetAll(key); if (session.timestamp && now - parseInt(session.timestamp) > EXPIRATION_TIME) { const userId = key.split(':')[1]; await redisClient.del(key); await User.update({ authCode: '' }, { where: { hashedId: userId } }); console.log(`Abgelaufene Sitzung für Benutzer ${userId} gelöscht.`); } } } catch (error) { console.error('Fehler beim Bereinigen abgelaufener Sitzungen:', error); } }; export { setUserSession, deleteUserSession, getUserSession, updateUserTimestamp, cleanupExpiredSessions, redisClient };