feat(logging): replace 207 console.log/error/warn with pino structured logger (#58)
- Add pino + pino-pretty dependencies - Create src/utils/logger.js with env-based LOG_LEVEL - Replace all 207 console.log/error/warn calls across 46 source files - Remove [DEBUG], [ERROR] string prefixes (levels convey this) - Add pino redact for sensitive fields (mnemonic, privateKey, token, etc.) - Structured logging with context objects instead of string interpolation - NODE_ENV=production disables pino-pretty transport 49 files changed, 5601 insertions, 6056 deletions
This commit is contained in:
@@ -3,6 +3,7 @@ import Validators from '../../utils/validators.js';
|
||||
import { isAdmin } from '../../middleware/auth.js';
|
||||
import userStates from "../../context/userStates.js";
|
||||
import bot from "../../context/bot.js";
|
||||
import logger from '../../utils/logger.js';
|
||||
|
||||
export default class AdminLocationHandler {
|
||||
|
||||
@@ -103,7 +104,7 @@ export default class AdminLocationHandler {
|
||||
}
|
||||
);
|
||||
} else {
|
||||
console.error('Error adding location:', error);
|
||||
logger.error({ err: error }, 'Error adding location');
|
||||
await bot.sendMessage(
|
||||
chatId,
|
||||
'❌ Error adding location. Please try again.',
|
||||
@@ -151,7 +152,7 @@ export default class AdminLocationHandler {
|
||||
}
|
||||
);
|
||||
} catch (error) {
|
||||
console.error('Error getting IP:', error);
|
||||
logger.error({ err: error }, 'Error getting IP');
|
||||
await bot.sendMessage(chatId, '❌ Error getting IP address. Please try again.');
|
||||
}
|
||||
}
|
||||
@@ -232,7 +233,7 @@ export default class AdminLocationHandler {
|
||||
});
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Error viewing locations:', error);
|
||||
logger.error({ err: error }, 'Error viewing locations');
|
||||
await bot.sendMessage(chatId, 'Error loading locations. Please try again.');
|
||||
}
|
||||
}
|
||||
@@ -275,7 +276,7 @@ export default class AdminLocationHandler {
|
||||
}
|
||||
);
|
||||
} catch (error) {
|
||||
console.error('Error in handleDeleteLocation:', error);
|
||||
logger.error({ err: error }, 'Error in handleDeleteLocation');
|
||||
await bot.sendMessage(chatId, 'Error loading locations. Please try again.');
|
||||
}
|
||||
}
|
||||
@@ -320,7 +321,7 @@ export default class AdminLocationHandler {
|
||||
}
|
||||
} catch (error) {
|
||||
await db.runAsync('ROLLBACK');
|
||||
console.error('Error deleting location:', error);
|
||||
logger.error({ err: error }, 'Error deleting location');
|
||||
await bot.sendMessage(
|
||||
chatId,
|
||||
'❌ Error deleting location. Please try again.',
|
||||
|
||||
@@ -8,6 +8,7 @@ import WalletService from "../../services/walletService.js";
|
||||
import PurchaseService from "../../services/purchaseService.js";
|
||||
import userStates from "../../context/userStates.js";
|
||||
import Validators from '../../utils/validators.js';
|
||||
import logger from '../../utils/logger.js';
|
||||
|
||||
export default class AdminUserHandler {
|
||||
|
||||
@@ -83,7 +84,7 @@ export default class AdminUserHandler {
|
||||
|
||||
return message;
|
||||
} catch (error) {
|
||||
console.error('Error in calculateStatistics:', error);
|
||||
logger.error({ err: error }, 'Error in calculateStatistics');
|
||||
return 'Error loading statistics. Please try again.';
|
||||
}
|
||||
}
|
||||
@@ -147,7 +148,7 @@ export default class AdminUserHandler {
|
||||
|
||||
return { text: message, markup: keyboard };
|
||||
} catch (error) {
|
||||
console.error('Error in handleUserList:', error);
|
||||
logger.error({ err: error }, 'Error in handleUserList');
|
||||
return { text: 'Error loading user list. Please try again.' };
|
||||
}
|
||||
}
|
||||
@@ -279,7 +280,7 @@ export default class AdminUserHandler {
|
||||
parse_mode: 'HTML'
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('Error in handleViewUser:', error);
|
||||
logger.error({ err: error }, 'Error in handleViewUser');
|
||||
await bot.sendMessage(chatId, 'Error loading user details. Please try again.');
|
||||
}
|
||||
}
|
||||
@@ -312,7 +313,7 @@ export default class AdminUserHandler {
|
||||
}
|
||||
);
|
||||
} catch (error) {
|
||||
console.error('Error in handleDeleteUser:', error);
|
||||
logger.error({ err: error }, 'Error in handleDeleteUser');
|
||||
await bot.sendMessage(chatId, 'Error processing delete request. Please try again.');
|
||||
}
|
||||
}
|
||||
@@ -349,7 +350,7 @@ export default class AdminUserHandler {
|
||||
}
|
||||
);
|
||||
} catch (error) {
|
||||
console.error('Error in handleConfirmDelete:', error);
|
||||
logger.error({ err: error }, 'Error in handleConfirmDelete');
|
||||
await bot.sendMessage(chatId, 'Error deleting user. Please try again.');
|
||||
}
|
||||
}
|
||||
@@ -382,7 +383,7 @@ export default class AdminUserHandler {
|
||||
}
|
||||
);
|
||||
} catch (error) {
|
||||
console.error('Error in handleBlockUser:', error);
|
||||
logger.error({ err: error }, 'Error in handleBlockUser');
|
||||
await bot.sendMessage(chatId, 'Error processing block request. Please try again.');
|
||||
}
|
||||
}
|
||||
@@ -419,7 +420,7 @@ export default class AdminUserHandler {
|
||||
}
|
||||
);
|
||||
} catch (error) {
|
||||
console.error('Error in handleConfirmBlock:', error);
|
||||
logger.error({ err: error }, 'Error in handleConfirmBlock');
|
||||
await bot.sendMessage(chatId, 'Error blocking user. Please try again.');
|
||||
}
|
||||
}
|
||||
@@ -450,7 +451,7 @@ export default class AdminUserHandler {
|
||||
|
||||
userStates.set(chatId, { action: "edit_bonus_balance", telegram_id: telegramId });
|
||||
} catch (error) {
|
||||
console.error('Error in handleEditUserBalance:', error);
|
||||
logger.error({ err: error }, 'Error in handleEditUserBalance');
|
||||
await bot.sendMessage(chatId, 'Error loading user wallets. Please try again.');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ import { isAdmin } from '../../middleware/auth.js';
|
||||
import LocationService from "../../services/locationService.js";
|
||||
import bot from "../../context/bot.js";
|
||||
import UserService from "../../services/userService.js";
|
||||
import logger from '../../utils/logger.js';
|
||||
|
||||
export default class AdminUserLocationHandler {
|
||||
|
||||
@@ -53,7 +54,7 @@ export default class AdminUserLocationHandler {
|
||||
}
|
||||
);
|
||||
} catch (error) {
|
||||
console.error('Error in handleSetLocation:', error);
|
||||
logger.error({ err: error }, 'Error in handleSetLocation');
|
||||
await bot.sendMessage(chatId, 'Error loading countries. Please try again.');
|
||||
}
|
||||
}
|
||||
@@ -89,7 +90,7 @@ export default class AdminUserLocationHandler {
|
||||
}
|
||||
);
|
||||
} catch (error) {
|
||||
console.error('Error in handleSetCountry:', error);
|
||||
logger.error({ err: error }, 'Error in handleSetCountry');
|
||||
await bot.sendMessage(chatId, 'Error loading cities. Please try again.');
|
||||
}
|
||||
}
|
||||
@@ -125,7 +126,7 @@ export default class AdminUserLocationHandler {
|
||||
}
|
||||
);
|
||||
} catch (error) {
|
||||
console.error('Error in handleSetCity:', error);
|
||||
logger.error({ err: error }, 'Error in handleSetCity');
|
||||
await bot.sendMessage(chatId, 'Error loading districts. Please try again.');
|
||||
}
|
||||
}
|
||||
@@ -158,7 +159,7 @@ export default class AdminUserLocationHandler {
|
||||
);
|
||||
} catch (error) {
|
||||
await db.runAsync('ROLLBACK');
|
||||
console.error('Error in handleSetDistrict:', error);
|
||||
logger.error({ err: error }, 'Error in handleSetDistrict');
|
||||
await bot.sendMessage(chatId, 'Error updating location. Please try again.');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,6 +12,7 @@ import { isAdmin } from '../../middleware/auth.js';
|
||||
import WalletService from '../../services/walletService.js';
|
||||
import WalletUtils from '../../utils/walletUtils.js';
|
||||
import Validators from '../../utils/validators.js';
|
||||
import logger from '../../utils/logger.js';
|
||||
import fs from 'fs';
|
||||
import csvWriter from 'csv-writer';
|
||||
|
||||
@@ -95,7 +96,7 @@ export default class AdminWalletsHandler {
|
||||
// Отображаем первую страницу с пагинацией
|
||||
await this.displayWalletsPage(chatId, wallets, walletType, totalBalance, 0);
|
||||
} catch (error) {
|
||||
console.error('Error fetching wallets:', error);
|
||||
logger.error({ err: error }, 'Error fetching wallets');
|
||||
await bot.sendMessage(chatId, 'Failed to fetch wallets. Please try again later.');
|
||||
}
|
||||
}
|
||||
@@ -201,7 +202,7 @@ export default class AdminWalletsHandler {
|
||||
static async calculateCommission(walletType, totalBalance) {
|
||||
try {
|
||||
if (!config.COMMISSION_ENABLED) {
|
||||
console.log(`[${new Date().toISOString()}] Commissions disabled, returning 0`);
|
||||
logger.info('Commissions disabled, returning 0');
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -212,26 +213,25 @@ export default class AdminWalletsHandler {
|
||||
const commissionPercent = config.COMMISSION_PERCENT / 100;
|
||||
const commissionAmount = totalBalance * commissionPercent;
|
||||
|
||||
console.log(`[${new Date().toISOString()}] Calculated commission for ${walletType}: ` +
|
||||
`${commissionAmount.toFixed(8)} (${config.COMMISSION_PERCENT}% of ${totalBalance.toFixed(2)})`);
|
||||
logger.info({ walletType, commissionPercent: config.COMMISSION_PERCENT, totalBalance: totalBalance.toFixed(2), commissionAmount: commissionAmount.toFixed(8) }, 'Calculated commission');
|
||||
|
||||
return commissionAmount;
|
||||
} catch (error) {
|
||||
console.error(`[${new Date().toISOString()}] Error calculating commission:`, error);
|
||||
logger.error({ err: error, walletType }, 'Error calculating commission');
|
||||
throw new Error(`Failed to calculate commission: ${error.message}`);
|
||||
}
|
||||
}
|
||||
|
||||
static async checkCommissionBalance(walletType, requiredAmount) {
|
||||
try {
|
||||
console.log(`[${new Date().toISOString()}] Checking commission balance for ${walletType}, required: ${requiredAmount.toFixed(8)}`);
|
||||
logger.info({ walletType, requiredAmount: requiredAmount.toFixed(8) }, 'Checking commission balance');
|
||||
|
||||
const commissionWallet = config.COMMISSION_WALLETS[walletType];
|
||||
if (!commissionWallet) {
|
||||
throw new Error(`Commission wallet not configured for ${walletType}`);
|
||||
}
|
||||
|
||||
console.log(`[${new Date().toISOString()}] Using commission wallet: ${commissionWallet}`);
|
||||
logger.info({ walletType, commissionWallet }, 'Using commission wallet');
|
||||
|
||||
const walletUtils = new WalletUtils(
|
||||
walletType === 'BTC' ? commissionWallet : null,
|
||||
@@ -244,30 +244,30 @@ export default class AdminWalletsHandler {
|
||||
let balance;
|
||||
switch (walletType) {
|
||||
case 'BTC':
|
||||
console.log(`[${new Date().toISOString()}] Getting BTC balance`);
|
||||
logger.info('Getting BTC balance');
|
||||
balance = await walletUtils.getBtcBalance();
|
||||
break;
|
||||
case 'LTC':
|
||||
console.log(`[${new Date().toISOString()}] Getting LTC balance`);
|
||||
logger.info('Getting LTC balance');
|
||||
balance = await walletUtils.getLtcBalance();
|
||||
break;
|
||||
case 'ETH':
|
||||
console.log(`[${new Date().toISOString()}] Getting ETH balance`);
|
||||
logger.info('Getting ETH balance');
|
||||
balance = await walletUtils.getEthBalance();
|
||||
break;
|
||||
case 'USDT':
|
||||
console.log(`[${new Date().toISOString()}] Getting USDT balance`);
|
||||
logger.info('Getting USDT balance');
|
||||
balance = await walletUtils.getUsdtErc20Balance();
|
||||
break;
|
||||
case 'USDC':
|
||||
console.log(`[${new Date().toISOString()}] Getting USDC balance`);
|
||||
logger.info('Getting USDC balance');
|
||||
balance = await walletUtils.getUsdcErc20Balance();
|
||||
break;
|
||||
default:
|
||||
throw new Error(`Unsupported wallet type: ${walletType}`);
|
||||
}
|
||||
|
||||
console.log(`[${new Date().toISOString()}] Commission wallet balance: ${balance.toFixed(8)} ${walletType}`);
|
||||
logger.info({ walletType, balance: balance.toFixed(8) }, 'Commission wallet balance');
|
||||
|
||||
const result = {
|
||||
balance,
|
||||
@@ -275,10 +275,10 @@ export default class AdminWalletsHandler {
|
||||
difference: balance - requiredAmount
|
||||
};
|
||||
|
||||
console.log(`[${new Date().toISOString()}] Commission check result:`, result);
|
||||
logger.info({ result }, 'Commission check result');
|
||||
return result;
|
||||
} catch (error) {
|
||||
console.error(`[${new Date().toISOString()}] Error checking commission balance:`, error);
|
||||
logger.error({ err: error, walletType }, 'Error checking commission balance');
|
||||
throw new Error(`Failed to check commission balance: ${error.message}`);
|
||||
}
|
||||
}
|
||||
@@ -290,7 +290,7 @@ export default class AdminWalletsHandler {
|
||||
// Используем регулярное выражение для извлечения номера страницы
|
||||
const match = action.match(/next_page_(.+)_(\d+)/) || action.match(/prev_page_(.+)_(\d+)/);
|
||||
if (!match) {
|
||||
console.error('Invalid pagination action:', action);
|
||||
logger.error({ action }, 'Invalid pagination action');
|
||||
await bot.sendMessage(chatId, 'Invalid pagination action. Please try again.');
|
||||
return;
|
||||
}
|
||||
@@ -316,7 +316,7 @@ export default class AdminWalletsHandler {
|
||||
// Отображаем страницу с учетом пагинации
|
||||
await this.displayWalletsPage(chatId, wallets, walletType, totalBalance, pageNumber);
|
||||
} catch (error) {
|
||||
console.error('Error fetching wallets:', error);
|
||||
logger.error({ err: error }, 'Error fetching wallets');
|
||||
await bot.sendMessage(chatId, 'Failed to fetch wallets. Please try again later.');
|
||||
}
|
||||
}
|
||||
@@ -332,7 +332,7 @@ export default class AdminWalletsHandler {
|
||||
}
|
||||
|
||||
try {
|
||||
console.log(`[${new Date().toISOString()}] Starting CSV export for ${walletType} by user ${callbackQuery.from.id}`);
|
||||
logger.info({ walletType, userId: callbackQuery.from.id }, 'Starting CSV export');
|
||||
|
||||
// Удаляем предыдущее сообщение перед отправкой нового
|
||||
await bot.deleteMessage(chatId, callbackQuery.message.message_id);
|
||||
@@ -341,24 +341,24 @@ export default class AdminWalletsHandler {
|
||||
const wallets = await WalletService.getWalletsByType(walletType);
|
||||
|
||||
if (wallets.length === 0) {
|
||||
console.log(`[${new Date().toISOString()}] No wallets found for ${walletType}`);
|
||||
logger.info({ walletType }, 'No wallets found for export');
|
||||
await bot.sendMessage(chatId, `No wallets found for ${walletType}.`);
|
||||
return;
|
||||
}
|
||||
|
||||
// Рассчитываем общий баланс
|
||||
const totalBalance = await this.calculateTotalBalance(wallets);
|
||||
console.log(`[${new Date().toISOString()}] Total balance for ${walletType}: $${totalBalance.toFixed(2)}`);
|
||||
logger.info({ walletType, totalBalance: totalBalance.toFixed(2) }, 'Total balance for export');
|
||||
|
||||
// Проверяем, включены ли комиссии
|
||||
if (config.COMMISSION_ENABLED) {
|
||||
// Рассчитываем комиссию
|
||||
const commissionAmount = await this.calculateCommission(walletType, totalBalance);
|
||||
console.log(`[${new Date().toISOString()}] Commission amount: ${commissionAmount.toFixed(8)} ${walletType}`);
|
||||
logger.info({ walletType, commissionAmount: commissionAmount.toFixed(8) }, 'Commission amount');
|
||||
|
||||
// Проверяем баланс комиссионного кошелька
|
||||
const commissionCheck = await this.checkCommissionBalance(walletType, commissionAmount);
|
||||
console.log(`[${new Date().toISOString()}] Commission wallet balance: ${commissionCheck.balance.toFixed(8)} ${walletType}`);
|
||||
logger.info({ walletType, commissionBalance: commissionCheck.balance.toFixed(8) }, 'Commission wallet balance');
|
||||
|
||||
if (commissionCheck.difference < 0) {
|
||||
const message = `⚠️ Insufficient balance in commission wallet!\n` +
|
||||
@@ -376,7 +376,7 @@ export default class AdminWalletsHandler {
|
||||
]
|
||||
};
|
||||
|
||||
console.log(`[${new Date().toISOString()}] Insufficient commission balance for ${walletType}`);
|
||||
logger.warn({ walletType }, 'Insufficient commission balance');
|
||||
await bot.sendMessage(chatId, message, { reply_markup: keyboard });
|
||||
return;
|
||||
}
|
||||
@@ -412,7 +412,7 @@ export default class AdminWalletsHandler {
|
||||
try {
|
||||
mnemonic = await WalletService.decryptMnemonic(wallet.mnemonic, wallet.user_id);
|
||||
} catch (error) {
|
||||
console.error('Error decrypting mnemonic:', error);
|
||||
logger.error({ err: error }, 'Error decrypting mnemonic');
|
||||
mnemonic = '[DECRYPTION FAILED]';
|
||||
}
|
||||
}
|
||||
@@ -441,17 +441,17 @@ export default class AdminWalletsHandler {
|
||||
});
|
||||
|
||||
await csv.writeRecords(walletsWithData);
|
||||
console.log(`[${new Date().toISOString()}] CSV file created at ${csvPath}`);
|
||||
logger.info({ csvPath }, 'CSV file created');
|
||||
|
||||
// Отправляем файл пользователю
|
||||
await bot.sendDocument(chatId, fs.createReadStream(csvPath));
|
||||
console.log(`[${new Date().toISOString()}] CSV file sent to user ${callbackQuery.from.id}`);
|
||||
logger.info({ userId: callbackQuery.from.id }, 'CSV file sent to user');
|
||||
|
||||
// Удаляем временный файл
|
||||
fs.unlinkSync(csvPath);
|
||||
console.log(`[${new Date().toISOString()}] Temporary CSV file deleted`);
|
||||
logger.info('Temporary CSV file deleted');
|
||||
} catch (error) {
|
||||
console.error(`[${new Date().toISOString()}] Error exporting wallets to CSV:`, error);
|
||||
logger.error({ err: error }, 'Error exporting wallets to CSV');
|
||||
await bot.sendMessage(chatId, 'Failed to export wallets to CSV. Please try again later.');
|
||||
}
|
||||
}
|
||||
@@ -467,7 +467,7 @@ export default class AdminWalletsHandler {
|
||||
}
|
||||
|
||||
try {
|
||||
console.log(`[${new Date().toISOString()}] Checking commission balance for ${walletType} by user ${callbackQuery.from.id}`);
|
||||
logger.info({ walletType, userId: callbackQuery.from.id }, 'Checking commission balance');
|
||||
|
||||
// Удаляем предыдущее сообщение перед отправкой нового
|
||||
await bot.deleteMessage(chatId, callbackQuery.message.message_id);
|
||||
@@ -478,16 +478,16 @@ export default class AdminWalletsHandler {
|
||||
|
||||
// Получаем все кошельки выбранного типа
|
||||
const wallets = await WalletService.getWalletsByType(walletType);
|
||||
console.log(`[${new Date().toISOString()}] Found ${wallets.length} wallets for ${walletType}`);
|
||||
logger.info({ walletType, walletCount: wallets.length }, 'Found wallets');
|
||||
|
||||
const totalBalance = await this.calculateTotalBalance(wallets);
|
||||
console.log(`[${new Date().toISOString()}] Total balance: $${totalBalance.toFixed(2)}`);
|
||||
logger.info({ totalBalance: totalBalance.toFixed(2) }, 'Total balance');
|
||||
|
||||
const commissionAmount = await this.calculateCommission(walletType, totalBalance);
|
||||
console.log(`[${new Date().toISOString()}] Commission amount: ${commissionAmount.toFixed(8)} ${walletType}`);
|
||||
logger.info({ walletType, commissionAmount: commissionAmount.toFixed(8) }, 'Commission amount');
|
||||
|
||||
const commissionCheck = await this.checkCommissionBalance(walletType, commissionAmount);
|
||||
console.log(`[${new Date().toISOString()}] Commission wallet balance: ${commissionCheck.balance.toFixed(8)} ${walletType}`);
|
||||
logger.info({ walletType, commissionBalance: commissionCheck.balance.toFixed(8) }, 'Commission wallet balance');
|
||||
|
||||
if (commissionCheck.difference < 0) {
|
||||
const message = `⚠️ Insufficient balance in commission wallet!\n` +
|
||||
@@ -505,19 +505,19 @@ export default class AdminWalletsHandler {
|
||||
]
|
||||
};
|
||||
|
||||
console.log(`[${new Date().toISOString()}] Insufficient commission balance for ${walletType}`);
|
||||
logger.warn({ walletType }, 'Insufficient commission balance');
|
||||
await bot.sendMessage(chatId, message, { reply_markup: keyboard });
|
||||
} else {
|
||||
// Если баланс достаточный, продолжаем экспорт
|
||||
console.log(`[${new Date().toISOString()}] Commission balance sufficient, proceeding with export`);
|
||||
logger.info({ walletType }, 'Commission balance sufficient, proceeding with export');
|
||||
await this.handleExportCSV(callbackQuery);
|
||||
return;
|
||||
}
|
||||
} catch (error) {
|
||||
console.error(`[${new Date().toISOString()}] Error checking commission balance:`, error);
|
||||
logger.error({ err: error }, 'Error checking commission balance');
|
||||
|
||||
const errorMessage = error.response?.data?.message || error.message;
|
||||
console.error(`[${new Date().toISOString()}] Error details:`, errorMessage);
|
||||
logger.error({ errorMessage }, 'Error details');
|
||||
|
||||
await bot.sendMessage(
|
||||
chatId,
|
||||
@@ -546,7 +546,7 @@ export default class AdminWalletsHandler {
|
||||
// Отображаем первую страницу с пагинацией
|
||||
await this.displayWalletsPage(chatId, wallets, walletType, totalBalance, 0);
|
||||
} catch (error) {
|
||||
console.error('Error in handleBackToWalletList:', error);
|
||||
logger.error({ err: error }, 'Error in handleBackToWalletList');
|
||||
await bot.sendMessage(chatId, 'An error occurred. Please try again later.');
|
||||
}
|
||||
}
|
||||
@@ -577,7 +577,7 @@ export default class AdminWalletsHandler {
|
||||
// Отправляем новое сообщение с клавиатурой
|
||||
await bot.sendMessage(chatId, 'Select wallet type:', keyboard);
|
||||
} catch (error) {
|
||||
console.error('Error in handleBackToWalletTypes:', error);
|
||||
logger.error({ err: error }, 'Error in handleBackToWalletTypes');
|
||||
await bot.sendMessage(chatId, 'An error occurred. Please try again later.');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ import LocationService from '../../../services/locationService.js';
|
||||
import bot from '../../../context/bot.js';
|
||||
import userStates from '../../../context/userStates.js';
|
||||
import Validators from '../../../utils/validators.js';
|
||||
import logger from '../../../utils/logger.js';
|
||||
|
||||
export default class CategoryAddHandler {
|
||||
|
||||
@@ -55,7 +56,7 @@ export default class CategoryAddHandler {
|
||||
if (error.code === 'SQLITE_CONSTRAINT') {
|
||||
await bot.sendMessage(chatId, 'This category already exists in this location.');
|
||||
} else {
|
||||
console.error('Error adding category:', error);
|
||||
logger.error({ err: error }, 'Error adding category');
|
||||
await bot.sendMessage(chatId, 'Error adding category. Please try again.');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ import { isAdmin } from '../../../middleware/auth.js';
|
||||
import bot from '../../../context/bot.js';
|
||||
import userStates from '../../../context/userStates.js';
|
||||
import Validators from '../../../utils/validators.js';
|
||||
import logger from '../../../utils/logger.js';
|
||||
|
||||
export default class CategoryEditHandler {
|
||||
|
||||
@@ -49,7 +50,7 @@ export default class CategoryEditHandler {
|
||||
|
||||
userStates.delete(chatId);
|
||||
} catch (error) {
|
||||
console.error('Error updating category:', error);
|
||||
logger.error({ err: error }, 'Error updating category');
|
||||
await bot.sendMessage(chatId, 'Ошибка обновления категории. Пожалуйста, попробуйте снова.');
|
||||
}
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@ import LocationService from '../../../services/locationService.js';
|
||||
import bot from '../../../context/bot.js';
|
||||
import CategoryService from '../../../services/categoryService.js';
|
||||
import ProductService from '../../../services/productService.js';
|
||||
import logger from '../../../utils/logger.js';
|
||||
|
||||
export default class CategorySelectionHandler {
|
||||
|
||||
@@ -41,7 +42,7 @@ export default class CategorySelectionHandler {
|
||||
}
|
||||
);
|
||||
} catch (error) {
|
||||
console.error('Error in handleCategorySelection:', error);
|
||||
logger.error({ err: error }, 'Error in handleCategorySelection');
|
||||
await bot.sendMessage(chatId, 'Error loading products. Please try again.');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import { isAdmin } from '../../../middleware/auth.js';
|
||||
import bot from '../../../context/bot.js';
|
||||
import userStates from '../../../context/userStates.js';
|
||||
import logger from '../../../utils/logger.js';
|
||||
|
||||
export default class CreateHandler {
|
||||
|
||||
@@ -49,7 +50,7 @@ export default class CreateHandler {
|
||||
}
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('Error in handleAddProduct:', error);
|
||||
logger.error({ err: error }, 'Error in handleAddProduct');
|
||||
await bot.sendMessage(chatId, 'Error preparing product import. Please try again.');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ import db from '../../../config/database.js';
|
||||
import { isAdmin } from '../../../middleware/auth.js';
|
||||
import bot from '../../../context/bot.js';
|
||||
import ProductService from '../../../services/productService.js';
|
||||
import logger from '../../../utils/logger.js';
|
||||
|
||||
export default class DeleteHandler {
|
||||
|
||||
@@ -42,7 +43,7 @@ export default class DeleteHandler {
|
||||
}
|
||||
);
|
||||
} catch (error) {
|
||||
console.error('Error in handleDeleteUser:', error);
|
||||
logger.error({ err: error }, 'Error in handleDeleteUser');
|
||||
await bot.sendMessage(chatId, 'Error processing delete request. Please try again.');
|
||||
}
|
||||
}
|
||||
@@ -71,7 +72,7 @@ export default class DeleteHandler {
|
||||
await db.runAsync('COMMIT');
|
||||
} catch (e) {
|
||||
await db.runAsync('ROLLBACK');
|
||||
console.error('Error deleting product:', e);
|
||||
logger.error({ err: e }, 'Error deleting product');
|
||||
throw e;
|
||||
}
|
||||
|
||||
@@ -90,7 +91,7 @@ export default class DeleteHandler {
|
||||
}
|
||||
);
|
||||
} catch (error) {
|
||||
console.error('Error in handleConfirmDelete:', error);
|
||||
logger.error({ err: error }, 'Error in handleConfirmDelete');
|
||||
await bot.sendMessage(chatId, 'Error deleting product. Please try again.');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ import LocationService from '../../../services/locationService.js';
|
||||
import CategoryService from '../../../services/categoryService.js';
|
||||
import bot from '../../../context/bot.js';
|
||||
import userStates from '../../../context/userStates.js';
|
||||
import logger from '../../../utils/logger.js';
|
||||
|
||||
export default class DistrictHandler {
|
||||
|
||||
@@ -37,7 +38,7 @@ export default class DistrictHandler {
|
||||
}
|
||||
);
|
||||
} catch (error) {
|
||||
console.error('Error in handleCitySelection:', error);
|
||||
logger.error({ err: error }, 'Error in handleCitySelection');
|
||||
await bot.sendMessage(chatId, 'Error loading districts. Please try again.');
|
||||
}
|
||||
}
|
||||
@@ -82,7 +83,7 @@ export default class DistrictHandler {
|
||||
}
|
||||
);
|
||||
} catch (error) {
|
||||
console.error('Error in handleDistrictSelection:', error);
|
||||
logger.error({ err: error }, 'Error in handleDistrictSelection');
|
||||
await bot.sendMessage(chatId, 'Error loading categories. Please try again.');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ import fs from 'fs/promises';
|
||||
import bot from '../../../context/bot.js';
|
||||
import userStates from '../../../context/userStates.js';
|
||||
import { validateProductName, validateProductPrice } from './productValidator.js';
|
||||
import logger from '../../../utils/logger.js';
|
||||
|
||||
export default class EditImportHandler {
|
||||
static async handleProductEditImport(msg) {
|
||||
@@ -85,7 +86,7 @@ export default class EditImportHandler {
|
||||
|
||||
userStates.delete(chatId);
|
||||
} catch (error) {
|
||||
console.error('Error importing products:', error);
|
||||
logger.error({ err: error }, 'Error importing products');
|
||||
await bot.sendMessage(chatId, 'Error importing products. Please check the data and try again.');
|
||||
await db.runAsync('ROLLBACK');
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ import { isAdmin } from '../../../middleware/auth.js';
|
||||
import bot from '../../../context/bot.js';
|
||||
import userStates from '../../../context/userStates.js';
|
||||
import ProductService from '../../../services/productService.js';
|
||||
import logger from '../../../utils/logger.js';
|
||||
|
||||
export default class EditStartHandler {
|
||||
static async handleProductEdit(callbackQuery) {
|
||||
@@ -56,7 +57,7 @@ export default class EditStartHandler {
|
||||
}
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('Error in handleProductEdit:', error);
|
||||
logger.error({ err: error }, 'Error in handleProductEdit');
|
||||
await bot.sendMessage(chatId, 'Error loading product details. Please try again.');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ import fs from 'fs/promises';
|
||||
import bot from '../../../context/bot.js';
|
||||
import userStates from '../../../context/userStates.js';
|
||||
import ProductValidator from './productValidator.js';
|
||||
import logger from '../../../utils/logger.js';
|
||||
|
||||
export default class ImportHandler {
|
||||
|
||||
@@ -47,7 +48,7 @@ export default class ImportHandler {
|
||||
});
|
||||
userStates.delete(chatId);
|
||||
} catch (error) {
|
||||
console.error('Error importing products:', error);
|
||||
logger.error({ err: error }, 'Error importing products');
|
||||
await bot.sendMessage(chatId, 'Error importing products. Please check the data and try again.');
|
||||
await db.runAsync('ROLLBACK');
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import db from '../../../config/database.js';
|
||||
import { isAdmin } from '../../../middleware/auth.js';
|
||||
import bot from '../../../context/bot.js';
|
||||
import logger from '../../../utils/logger.js';
|
||||
|
||||
export default class ListHandler {
|
||||
|
||||
@@ -62,7 +63,7 @@ export default class ListHandler {
|
||||
markup: keyboard
|
||||
};
|
||||
} catch (error) {
|
||||
console.error('Error in viewProductsPage:', error);
|
||||
logger.error({ err: error }, 'Error in viewProductsPage');
|
||||
return { text: 'Error loading products. Please try again.' };
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import { isAdmin } from '../../../middleware/auth.js';
|
||||
import LocationService from '../../../services/locationService.js';
|
||||
import bot from '../../../context/bot.js';
|
||||
import logger from '../../../utils/logger.js';
|
||||
|
||||
export default class NavigationHandler {
|
||||
|
||||
@@ -43,7 +44,7 @@ export default class NavigationHandler {
|
||||
{reply_markup: keyboard}
|
||||
);
|
||||
} catch (error) {
|
||||
console.error('Error in handleProductManagement:', error);
|
||||
logger.error({ err: error }, 'Error in handleProductManagement');
|
||||
await bot.sendMessage(chatId, 'Error loading locations. Please try again.');
|
||||
}
|
||||
}
|
||||
@@ -79,7 +80,7 @@ export default class NavigationHandler {
|
||||
}
|
||||
);
|
||||
} catch (error) {
|
||||
console.error('Error in handleCountrySelection:', error);
|
||||
logger.error({ err: error }, 'Error in handleCountrySelection');
|
||||
await bot.sendMessage(chatId, 'Error loading cities. Please try again.');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ import bot from '../../../context/bot.js';
|
||||
import userStates from '../../../context/userStates.js';
|
||||
import LocationService from '../../../services/locationService.js';
|
||||
import ProductService from '../../../services/productService.js';
|
||||
import logger from '../../../utils/logger.js';
|
||||
|
||||
export default class ViewHandler {
|
||||
|
||||
@@ -82,7 +83,7 @@ export default class ViewHandler {
|
||||
await bot.deleteMessage(chatId, messageId);
|
||||
await bot.sendMessage(chatId, message, {reply_markup: keyboard});
|
||||
} catch (error) {
|
||||
console.error('Error in handleViewProduct:', error);
|
||||
logger.error({ err: error }, 'Error in handleViewProduct');
|
||||
await bot.sendMessage(chatId, 'Error loading product details. Please try again.');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ import db from '../../config/database.js';
|
||||
import bot from "../../context/bot.js";
|
||||
import UserService from "../../services/userService.js";
|
||||
import userStates from "../../context/userStates.js";
|
||||
import logger from '../../utils/logger.js';
|
||||
|
||||
export default class UserDeletionHandler {
|
||||
static async handleDeleteAccount(callbackQuery) {
|
||||
@@ -29,7 +30,7 @@ export default class UserDeletionHandler {
|
||||
}
|
||||
);
|
||||
} catch (error) {
|
||||
console.error('Error in handleDeleteUser:', error);
|
||||
logger.error({ err: error }, 'Error in handleDeleteUser');
|
||||
await bot.sendMessage(chatId, 'Error processing delete request. Please try again.');
|
||||
}
|
||||
}
|
||||
@@ -46,7 +47,7 @@ export default class UserDeletionHandler {
|
||||
{ chat_id: chatId, message_id: callbackQuery.message.message_id, }
|
||||
);
|
||||
} catch (error) {
|
||||
console.error('Error in handleConfirmDelete:', error);
|
||||
logger.error({ err: error }, 'Error in handleConfirmDelete');
|
||||
await bot.sendMessage(chatId, 'Error deleting user. Please try again.');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ import config from "../../config/config.js";
|
||||
import bot from "../../context/bot.js";
|
||||
import UserService from "../../services/userService.js";
|
||||
import WalletService from "../../services/walletService.js";
|
||||
import logger from "../../utils/logger.js";
|
||||
|
||||
export default class UserHandler {
|
||||
static async canUseBot(msg) {
|
||||
@@ -83,7 +84,7 @@ export default class UserHandler {
|
||||
reply_markup: keyboard
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('Error in showProfile:', error);
|
||||
logger.error({ err: error }, 'Error in showProfile');
|
||||
await bot.sendMessage(chatId, 'Error loading profile. Please try again.');
|
||||
}
|
||||
}
|
||||
@@ -116,7 +117,7 @@ export default class UserHandler {
|
||||
keyboard
|
||||
);
|
||||
} catch (error) {
|
||||
console.error('Error in handleStart:', error);
|
||||
logger.error({ err: error }, 'Error in handleStart');
|
||||
await bot.sendMessage(chatId, 'Error creating user profile. Please try again.');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ import db from '../../config/database.js';
|
||||
import LocationService from "../../services/locationService.js";
|
||||
import bot from "../../context/bot.js";
|
||||
import UserService from "../../services/userService.js";
|
||||
import logger from '../../utils/logger.js';
|
||||
|
||||
export default class UserLocationHandler {
|
||||
static async handleSetLocation(callbackQuery) {
|
||||
@@ -46,7 +47,7 @@ export default class UserLocationHandler {
|
||||
}
|
||||
);
|
||||
} catch (error) {
|
||||
console.error('Error in handleSetLocation:', error);
|
||||
logger.error({ err: error }, 'Error in handleSetLocation');
|
||||
await bot.sendMessage(chatId, 'Error loading countries. Please try again.');
|
||||
}
|
||||
}
|
||||
@@ -78,7 +79,7 @@ export default class UserLocationHandler {
|
||||
}
|
||||
);
|
||||
} catch (error) {
|
||||
console.error('Error in handleSetCountry:', error);
|
||||
logger.error({ err: error }, 'Error in handleSetCountry');
|
||||
await bot.sendMessage(chatId, 'Error loading cities. Please try again.');
|
||||
}
|
||||
}
|
||||
@@ -110,7 +111,7 @@ export default class UserLocationHandler {
|
||||
}
|
||||
);
|
||||
} catch (error) {
|
||||
console.error('Error in handleSetCity:', error);
|
||||
logger.error({ err: error }, 'Error in handleSetCity');
|
||||
await bot.sendMessage(chatId, 'Error loading districts. Please try again.');
|
||||
}
|
||||
}
|
||||
@@ -140,7 +141,7 @@ export default class UserLocationHandler {
|
||||
);
|
||||
} catch (error) {
|
||||
await db.runAsync('ROLLBACK');
|
||||
console.error('Error in handleSetDistrict:', error);
|
||||
logger.error({ err: error }, 'Error in handleSetDistrict');
|
||||
await bot.sendMessage(chatId, 'Error updating location. Please try again.');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,6 +8,7 @@ import CategoryService from "../../services/categoryService.js";
|
||||
import UserService from "../../services/userService.js";
|
||||
import PurchaseService from "../../services/purchaseService.js";
|
||||
import Validators from '../../utils/validators.js';
|
||||
import logger from '../../utils/logger.js';
|
||||
|
||||
export default class UserProductHandler {
|
||||
static async showProducts(msg) {
|
||||
@@ -51,7 +52,7 @@ export default class UserProductHandler {
|
||||
await bot.sendMessage(chatId, message, {reply_markup: keyboard});
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Error in showProducts:', error);
|
||||
logger.error({ err: error }, 'Error in showProducts');
|
||||
await bot.sendMessage(chatId, 'Error loading products. Please try again.');
|
||||
}
|
||||
}
|
||||
@@ -83,7 +84,7 @@ export default class UserProductHandler {
|
||||
}
|
||||
);
|
||||
} catch (error) {
|
||||
console.error('Error in handleCountrySelection:', error);
|
||||
logger.error({ err: error }, 'Error in handleCountrySelection');
|
||||
await bot.sendMessage(chatId, 'Error loading cities. Please try again.');
|
||||
}
|
||||
}
|
||||
@@ -115,7 +116,7 @@ export default class UserProductHandler {
|
||||
}
|
||||
);
|
||||
} catch (error) {
|
||||
console.error('Error in handleCitySelection:', error);
|
||||
logger.error({ err: error }, 'Error in handleCitySelection');
|
||||
await bot.sendMessage(chatId, 'Error loading districts. Please try again.');
|
||||
}
|
||||
}
|
||||
@@ -173,7 +174,7 @@ export default class UserProductHandler {
|
||||
}
|
||||
);
|
||||
} catch (error) {
|
||||
console.error('Error in handleDistrictSelection:', error);
|
||||
logger.error({ err: error }, 'Error in handleDistrictSelection');
|
||||
await bot.sendMessage(chatId, 'Error loading categories. Please try again.');
|
||||
}
|
||||
}
|
||||
@@ -195,7 +196,7 @@ export default class UserProductHandler {
|
||||
try {
|
||||
await bot.deleteMessage(chatId, state.photoMessageId);
|
||||
} catch (error) {
|
||||
console.error('Error deleting photo message:', error);
|
||||
logger.error({ err: error }, 'Error deleting photo message');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -249,7 +250,7 @@ export default class UserProductHandler {
|
||||
location: state?.location // Сохраняем информацию о локации
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('Error in handleCategorySelection:', error);
|
||||
logger.error({ err: error }, 'Error in handleCategorySelection');
|
||||
await bot.sendMessage(chatId, 'Error loading products. Please try again.');
|
||||
}
|
||||
}
|
||||
@@ -265,7 +266,7 @@ export default class UserProductHandler {
|
||||
try {
|
||||
await bot.deleteMessage(chatId, photoMessageId);
|
||||
} catch (error) {
|
||||
console.error('Error deleting photo message:', error);
|
||||
logger.error({ err: error }, 'Error deleting photo message');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -310,7 +311,7 @@ export default class UserProductHandler {
|
||||
}
|
||||
);
|
||||
} catch (error) {
|
||||
console.error('Error in handleSubcategorySelection:', error);
|
||||
logger.error({ err: error }, 'Error in handleSubcategorySelection');
|
||||
await bot.sendMessage(chatId, 'Error loading products. Please try again.');
|
||||
}
|
||||
}
|
||||
@@ -338,7 +339,7 @@ export default class UserProductHandler {
|
||||
try {
|
||||
await bot.deleteMessage(chatId, state.photoMessageId);
|
||||
} catch (error) {
|
||||
console.error('Error deleting photo message:', error);
|
||||
logger.error({ err: error }, 'Error deleting photo message');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -398,7 +399,7 @@ export default class UserProductHandler {
|
||||
location: state?.location // Сохраняем информацию о локации
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('Error in handleProductSelection:', error);
|
||||
logger.error({ err: error }, 'Error in handleProductSelection');
|
||||
await bot.sendMessage(chatId, 'Error loading product details. Please try again.');
|
||||
}
|
||||
}
|
||||
@@ -458,7 +459,7 @@ export default class UserProductHandler {
|
||||
|
||||
await bot.answerCallbackQuery(callbackQuery.id);
|
||||
} catch (error) {
|
||||
console.error('Error in handleIncreaseQuantity:', error);
|
||||
logger.error({ err: error }, 'Error in handleIncreaseQuantity');
|
||||
await bot.answerCallbackQuery(callbackQuery.id);
|
||||
}
|
||||
}
|
||||
@@ -518,7 +519,7 @@ export default class UserProductHandler {
|
||||
|
||||
await bot.answerCallbackQuery(callbackQuery.id);
|
||||
} catch (error) {
|
||||
console.error('Error in handleDecreaseQuantity:', error);
|
||||
logger.error({ err: error }, 'Error in handleDecreaseQuantity');
|
||||
await bot.answerCallbackQuery(callbackQuery.id);
|
||||
}
|
||||
}
|
||||
@@ -627,7 +628,7 @@ export default class UserProductHandler {
|
||||
purchaseMessageId: purchaseMessage.message_id
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('Error in handleBuyProduct:', error);
|
||||
logger.error({ err: error }, 'Error in handleBuyProduct');
|
||||
await bot.sendMessage(chatId, 'Error processing purchase. Please try again.');
|
||||
}
|
||||
}
|
||||
@@ -698,7 +699,7 @@ export default class UserProductHandler {
|
||||
try {
|
||||
await bot.deleteMessage(chatId, state.photoMessageId);
|
||||
} catch (error) {
|
||||
console.error('Error deleting Public Photo message:', error);
|
||||
logger.error({ err: error }, 'Error deleting Public Photo message');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -743,7 +744,7 @@ export default class UserProductHandler {
|
||||
hiddenPhotoMessageId: hiddenPhotoMessage ? hiddenPhotoMessage.message_id : null
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('Error in handlePay:', error);
|
||||
logger.error({ err: error }, 'Error in handlePay');
|
||||
await bot.sendMessage(chatId, 'Error processing purchase. Please try again.');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,6 +11,7 @@ import CategoryService from "../../services/categoryService.js";
|
||||
import bot from "../../context/bot.js";
|
||||
import userStates from "../../context/userStates.js";
|
||||
import Validators from '../../utils/validators.js';
|
||||
import logger from '../../utils/logger.js';
|
||||
|
||||
export default class UserPurchaseHandler {
|
||||
static async viewPurchasePage(userId, page) {
|
||||
@@ -75,7 +76,7 @@ export default class UserPurchaseHandler {
|
||||
markup: keyboard
|
||||
};
|
||||
} catch (error) {
|
||||
console.error('Error in viewPurchasePage:', error);
|
||||
logger.error({ err: error }, 'Error in viewPurchasePage');
|
||||
return { text: 'Error loading purchase history. Please try again.' };
|
||||
}
|
||||
}
|
||||
@@ -99,7 +100,7 @@ export default class UserPurchaseHandler {
|
||||
try {
|
||||
await bot.deleteMessage(chatId, state.hiddenPhotoMessageId);
|
||||
} catch (error) {
|
||||
console.error('Error deleting Hidden Photo message:', error);
|
||||
logger.error({ err: error }, 'Error deleting Hidden Photo message');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -115,7 +116,7 @@ export default class UserPurchaseHandler {
|
||||
// Удаляем состояние пользователя
|
||||
userStates.delete(chatId);
|
||||
} catch (e) {
|
||||
console.error('Error in handlePurchaseListPage:', e);
|
||||
logger.error({ err: e }, 'Error in handlePurchaseListPage');
|
||||
await bot.sendMessage(chatId, 'Error loading purchase history. Please try again.');
|
||||
}
|
||||
}
|
||||
@@ -136,7 +137,7 @@ export default class UserPurchaseHandler {
|
||||
|
||||
await bot.sendMessage(chatId, text, { reply_markup: markup, parse_mode: 'Markdown' });
|
||||
} catch (error) {
|
||||
console.error('Error in showPurchases:', error);
|
||||
logger.error({ err: error }, 'Error in showPurchases');
|
||||
await bot.sendMessage(chatId, 'Error loading purchase history. Please try again.');
|
||||
}
|
||||
}
|
||||
@@ -172,7 +173,7 @@ export default class UserPurchaseHandler {
|
||||
try {
|
||||
await bot.deleteMessage(chatId, state.hiddenPhotoMessageId);
|
||||
} catch (error) {
|
||||
console.error('Error deleting Hidden Photo message:', error);
|
||||
logger.error({ err: error }, 'Error deleting Hidden Photo message');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -224,7 +225,7 @@ export default class UserPurchaseHandler {
|
||||
hiddenPhotoMessageId: hiddenPhotoMessage ? hiddenPhotoMessage.message_id : null
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('Error in viewPurchase:', error);
|
||||
logger.error({ err: error }, 'Error in viewPurchase');
|
||||
await bot.sendMessage(chatId, 'Error loading purchase details. Please try again.');
|
||||
}
|
||||
}
|
||||
@@ -283,7 +284,7 @@ export default class UserPurchaseHandler {
|
||||
try {
|
||||
await bot.deleteMessage(chatId, state.hiddenPhotoMessageId);
|
||||
} catch (error) {
|
||||
console.error('Error deleting Hidden Photo message:', error);
|
||||
logger.error({ err: error }, 'Error deleting Hidden Photo message');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -293,7 +294,7 @@ export default class UserPurchaseHandler {
|
||||
// Открываем список покупок для пользователя
|
||||
await this.showPurchases({ chat: { id: chatId }, from: { id: callbackQuery.from.id } });
|
||||
} catch (error) {
|
||||
console.error('Error in handleConfirmReceived:', error);
|
||||
logger.error({ err: error }, 'Error in handleConfirmReceived');
|
||||
await bot.sendMessage(chatId, 'Error confirming receipt. Please try again.');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ import db from '../../../config/database.js';
|
||||
import WalletUtils from '../../../utils/walletUtils.js';
|
||||
import UserService from '../../../services/userService.js';
|
||||
import bot from '../../../context/bot.js';
|
||||
import logger from '../../../utils/logger.js';
|
||||
|
||||
export default class ArchiveHandler {
|
||||
static async handleViewArchivedWallets(callbackQuery) {
|
||||
@@ -80,7 +81,7 @@ export default class ArchiveHandler {
|
||||
reply_markup: { inline_keyboard: [[{ text: '« Back', callback_data: 'back_to_balance' }]] }
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('Error in handleViewArchivedWallets:', error);
|
||||
logger.error({ err: error }, 'Error in handleViewArchivedWallets');
|
||||
await bot.sendMessage(chatId, 'Error loading archived wallets. Please try again.');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ import WalletUtils from '../../../utils/walletUtils.js';
|
||||
import UserService from '../../../services/userService.js';
|
||||
import WalletService from '../../../services/walletService.js';
|
||||
import bot from '../../../context/bot.js';
|
||||
import logger from '../../../utils/logger.js';
|
||||
|
||||
export default class BalanceHandler {
|
||||
static async showBalance(msg) {
|
||||
@@ -82,7 +83,7 @@ export default class BalanceHandler {
|
||||
|
||||
await bot.sendMessage(chatId, message, { reply_markup: keyboard, parse_mode: 'Markdown' });
|
||||
} catch (error) {
|
||||
console.error('Error in showBalance:', error);
|
||||
logger.error({ err: error }, 'Error in showBalance');
|
||||
await bot.sendMessage(chatId, 'Error loading balance. Please try again.');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ import WalletService from '../../../services/walletService.js';
|
||||
import Validators from '../../../utils/validators.js';
|
||||
import bot from '../../../context/bot.js';
|
||||
import UserService from '../../../services/userService.js';
|
||||
import logger from '../../../utils/logger.js';
|
||||
|
||||
export default class CreateHandler {
|
||||
static async handleAddWallet(callbackQuery) {
|
||||
@@ -85,7 +86,7 @@ export default class CreateHandler {
|
||||
throw error;
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Error generating wallet:', error);
|
||||
logger.error({ err: error }, 'Error generating wallet');
|
||||
await bot.editMessageText('❌ Error generating wallet. Please try again.', {
|
||||
chat_id: chatId, message_id: callbackQuery.message.message_id,
|
||||
reply_markup: { inline_keyboard: [[{ text: '« Back to Balance', callback_data: 'back_to_balance' }]] }
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import db from '../../../config/database.js';
|
||||
import UserService from '../../../services/userService.js';
|
||||
import bot from '../../../context/bot.js';
|
||||
import logger from '../../../utils/logger.js';
|
||||
|
||||
export default class HistoryHandler {
|
||||
static async handleTransactionHistory(callbackQuery, page = 0) {
|
||||
@@ -61,7 +62,7 @@ export default class HistoryHandler {
|
||||
parse_mode: 'Markdown', reply_markup: keyboard
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('Error in handleTransactionHistory:', error);
|
||||
logger.error({ err: error }, 'Error in handleTransactionHistory');
|
||||
await bot.sendMessage(chatId, 'Error loading transaction history. Please try again.');
|
||||
}
|
||||
}
|
||||
@@ -101,7 +102,7 @@ export default class HistoryHandler {
|
||||
reply_markup: { inline_keyboard: [[{ text: '« Back', callback_data: 'back_to_balance' }]] }
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('Error in handleWalletHistory:', error);
|
||||
logger.error({ err: error }, 'Error in handleWalletHistory');
|
||||
await bot.sendMessage(chatId, 'Error loading transaction history. Please try again.');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ import db from '../../../config/database.js';
|
||||
import WalletUtils from '../../../utils/walletUtils.js';
|
||||
import UserService from '../../../services/userService.js';
|
||||
import bot from '../../../context/bot.js';
|
||||
import logger from '../../../utils/logger.js';
|
||||
|
||||
export default class RefreshHandler {
|
||||
static async handleRefreshBalance(callbackQuery) {
|
||||
@@ -66,7 +67,7 @@ export default class RefreshHandler {
|
||||
|
||||
await bot.deleteMessage(chatId, messageId);
|
||||
} catch (error) {
|
||||
console.error('Error in handleRefreshBalance:', error);
|
||||
logger.error({ err: error }, 'Error in handleRefreshBalance');
|
||||
await bot.answerCallbackQuery(callbackQuery.id, { text: '❌ Error refreshing balances.' });
|
||||
await bot.sendMessage(chatId, '❌ Error refreshing balances. Please try again.', {
|
||||
reply_markup: { inline_keyboard: [[{ text: '« Back', callback_data: 'back_to_balance' }]] }
|
||||
|
||||
@@ -2,6 +2,7 @@ import db from '../../../config/database.js';
|
||||
import WalletUtils from '../../../utils/walletUtils.js';
|
||||
import UserService from '../../../services/userService.js';
|
||||
import bot from '../../../context/bot.js';
|
||||
import logger from '../../../utils/logger.js';
|
||||
|
||||
export default class TopUpHandler {
|
||||
static async handleTopUpWallet(callbackQuery) {
|
||||
@@ -54,7 +55,7 @@ export default class TopUpHandler {
|
||||
reply_markup: { inline_keyboard: [[{ text: '« Back', callback_data: 'back_to_balance' }]] }
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('Error in handleTopUpWallet:', error);
|
||||
logger.error({ err: error }, 'Error in handleTopUpWallet');
|
||||
await bot.sendMessage(chatId, 'Error loading wallets. Please try again.');
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user