ваше сообщение коммита
This commit is contained in:
@@ -14,7 +14,7 @@ class SessionService {
|
||||
async saveSession(session) {
|
||||
try {
|
||||
return new Promise((resolve, reject) => {
|
||||
session.save(err => {
|
||||
session.save((err) => {
|
||||
if (err) {
|
||||
logger.error('Error saving session:', err);
|
||||
reject(err);
|
||||
@@ -38,7 +38,9 @@ class SessionService {
|
||||
*/
|
||||
async linkGuestMessages(session, userId) {
|
||||
try {
|
||||
logger.info(`[linkGuestMessages] Starting for user ${userId} with guestId=${session.guestId}, previousGuestId=${session.previousGuestId}`);
|
||||
logger.info(
|
||||
`[linkGuestMessages] Starting for user ${userId} with guestId=${session.guestId}, previousGuestId=${session.previousGuestId}`
|
||||
);
|
||||
|
||||
// Инициализируем массив обработанных гостевых ID, если его нет
|
||||
if (!session.processedGuestIds) {
|
||||
@@ -50,15 +52,15 @@ class SessionService {
|
||||
'SELECT guest_id FROM guest_user_mapping WHERE user_id = $1',
|
||||
[userId]
|
||||
);
|
||||
const userGuestIds = guestIdsResult.rows.map(row => row.guest_id);
|
||||
const userGuestIds = guestIdsResult.rows.map((row) => row.guest_id);
|
||||
|
||||
// Собираем все гостевые ID, которые нужно обработать
|
||||
const guestIdsToProcess = new Set();
|
||||
|
||||
|
||||
// Добавляем текущий гостевой ID
|
||||
if (session.guestId && !session.processedGuestIds.includes(session.guestId)) {
|
||||
guestIdsToProcess.add(session.guestId);
|
||||
|
||||
|
||||
// Записываем связь с пользователем в новую таблицу
|
||||
await db.query(
|
||||
'INSERT INTO guest_user_mapping (user_id, guest_id) VALUES ($1, $2) ON CONFLICT (guest_id) DO UPDATE SET user_id = $1',
|
||||
@@ -69,7 +71,7 @@ class SessionService {
|
||||
// Добавляем предыдущий гостевой ID
|
||||
if (session.previousGuestId && !session.processedGuestIds.includes(session.previousGuestId)) {
|
||||
guestIdsToProcess.add(session.previousGuestId);
|
||||
|
||||
|
||||
// Записываем связь с пользователем в новую таблицу
|
||||
await db.query(
|
||||
'INSERT INTO guest_user_mapping (user_id, guest_id) VALUES ($1, $2) ON CONFLICT (guest_id) DO UPDATE SET user_id = $1',
|
||||
@@ -88,12 +90,11 @@ class SessionService {
|
||||
for (const guestId of guestIdsToProcess) {
|
||||
await this.processGuestMessagesWrapper(userId, guestId);
|
||||
session.processedGuestIds.push(guestId);
|
||||
|
||||
|
||||
// Помечаем guestId как обработанный в базе данных
|
||||
await db.query(
|
||||
'UPDATE guest_user_mapping SET processed = true WHERE guest_id = $1',
|
||||
[guestId]
|
||||
);
|
||||
await db.query('UPDATE guest_user_mapping SET processed = true WHERE guest_id = $1', [
|
||||
guestId,
|
||||
]);
|
||||
}
|
||||
|
||||
// Сохраняем сессию
|
||||
@@ -114,7 +115,9 @@ class SessionService {
|
||||
*/
|
||||
async processGuestMessagesWrapper(userId, guestId) {
|
||||
try {
|
||||
logger.info(`[processGuestMessagesWrapper] Processing messages: userId=${userId}, guestId=${guestId}`);
|
||||
logger.info(
|
||||
`[processGuestMessagesWrapper] Processing messages: userId=${userId}, guestId=${guestId}`
|
||||
);
|
||||
return await processGuestMessages(userId, guestId);
|
||||
} catch (error) {
|
||||
logger.error(`[processGuestMessagesWrapper] Error: ${error.message}`, error);
|
||||
@@ -146,7 +149,7 @@ class SessionService {
|
||||
async destroySession(session) {
|
||||
try {
|
||||
return new Promise((resolve, reject) => {
|
||||
session.destroy(err => {
|
||||
session.destroy((err) => {
|
||||
if (err) {
|
||||
logger.error('Error destroying session:', err);
|
||||
reject(err);
|
||||
@@ -173,29 +176,26 @@ class SessionService {
|
||||
logger.warn('[SessionService] Cannot restore session without sessionId');
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
logger.info(`[SessionService] Attempting to retrieve session ${sessionId}`);
|
||||
|
||||
const result = await db.query(
|
||||
'SELECT sess FROM session WHERE sid = $1',
|
||||
[sessionId]
|
||||
);
|
||||
|
||||
|
||||
const result = await db.query('SELECT sess FROM session WHERE sid = $1', [sessionId]);
|
||||
|
||||
if (result.rows.length === 0) {
|
||||
logger.info(`[SessionService] No session found with ID ${sessionId}`);
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
const sessionData = result.rows[0].sess;
|
||||
logger.info(`[SessionService] Retrieved session data for ${sessionId}`);
|
||||
|
||||
|
||||
return sessionData;
|
||||
} catch (error) {
|
||||
logger.error(`[SessionService] Error retrieving session ${sessionId}:`, error);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Обновляет данные аутентификации в сессии
|
||||
* @param {object} session - Объект сессии
|
||||
@@ -208,23 +208,23 @@ class SessionService {
|
||||
logger.warn('[SessionService] Missing parameters for updateAuthData');
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
const { userId, authType, isAdmin, ...otherData } = authData;
|
||||
|
||||
|
||||
if (!userId || !authType) {
|
||||
logger.warn('[SessionService] Missing userId or authType in authData');
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
// Обновляем основные поля аутентификации
|
||||
session.userId = userId;
|
||||
session.authType = authType;
|
||||
session.authenticated = true;
|
||||
|
||||
|
||||
if (isAdmin !== undefined) {
|
||||
session.isAdmin = isAdmin;
|
||||
}
|
||||
|
||||
|
||||
// Обновляем дополнительные данные в зависимости от типа аутентификации
|
||||
if (authType === 'wallet' && otherData.address) {
|
||||
session.address = otherData.address.toLowerCase();
|
||||
@@ -235,16 +235,16 @@ class SessionService {
|
||||
if (otherData.telegramUsername) session.telegramUsername = otherData.telegramUsername;
|
||||
if (otherData.telegramFirstName) session.telegramFirstName = otherData.telegramFirstName;
|
||||
}
|
||||
|
||||
|
||||
// Сохраняем гостевые ID, если они предоставлены и не были ранее в сессии
|
||||
if (otherData.guestId && !session.guestId) {
|
||||
session.guestId = otherData.guestId;
|
||||
}
|
||||
|
||||
|
||||
if (otherData.previousGuestId && !session.previousGuestId) {
|
||||
session.previousGuestId = otherData.previousGuestId;
|
||||
}
|
||||
|
||||
|
||||
// Сохраняем обновленную сессию
|
||||
return await this.saveSession(session, 'updateAuthData');
|
||||
} catch (error) {
|
||||
@@ -252,7 +252,7 @@ class SessionService {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Очищает данные аутентификации в сессии
|
||||
* @param {object} session - Объект сессии
|
||||
@@ -264,10 +264,10 @@ class SessionService {
|
||||
logger.warn('[SessionService] Cannot logout null session');
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
// Сохраняем гостевые ID перед очисткой
|
||||
const guestId = session.guestId;
|
||||
|
||||
|
||||
// Удаляем данные аутентификации
|
||||
delete session.userId;
|
||||
delete session.authenticated;
|
||||
@@ -278,12 +278,12 @@ class SessionService {
|
||||
delete session.telegramId;
|
||||
delete session.telegramUsername;
|
||||
delete session.telegramFirstName;
|
||||
|
||||
|
||||
// Восстанавливаем гостевой ID для продолжения работы
|
||||
if (guestId) {
|
||||
session.guestId = guestId;
|
||||
}
|
||||
|
||||
|
||||
// Сохраняем обновленную сессию
|
||||
return await this.saveSession(session, 'logout');
|
||||
} catch (error) {
|
||||
@@ -294,4 +294,4 @@ class SessionService {
|
||||
}
|
||||
|
||||
const sessionService = new SessionService();
|
||||
module.exports = sessionService;
|
||||
module.exports = sessionService;
|
||||
|
||||
Reference in New Issue
Block a user