ваше сообщение коммита

This commit is contained in:
2025-11-26 21:59:51 +03:00
parent 6d158c3952
commit 25c6ccc5d0
8 changed files with 221 additions and 23 deletions

View File

@@ -88,6 +88,24 @@ router.get('/okved', async (req, res, next) => {
});
}
// Сортировка кодов ОКВЭД по коду (правильная числовая сортировка для каждой части)
codes.sort((a, b) => {
// Разбиваем коды на части для правильной сортировки
const partsA = a.code.split('.').map(p => parseInt(p, 10));
const partsB = b.code.split('.').map(p => parseInt(p, 10));
// Сравниваем части по порядку численно
for (let i = 0; i < Math.max(partsA.length, partsB.length); i++) {
const partA = partsA[i] !== undefined ? partsA[i] : 0;
const partB = partsB[i] !== undefined ? partsB[i] : 0;
if (partA !== partB) {
return partA - partB;
}
}
return 0;
});
// Ограничиваем количество результатов для производительности
const limit = parseInt(req.query.limit) || 2000; // Увеличили лимит для полного списка
codes = codes.slice(0, limit);

View File

@@ -91,7 +91,7 @@ async function runMigrations() {
}
// Извлекаем только UP SQL
const sqlToExecute = fileContent.substring(upSqlStartIndex, upSqlEndIndex).trim();
let sqlToExecute = fileContent.substring(upSqlStartIndex, upSqlEndIndex).trim();
if (!sqlToExecute) {
logger.warn(`Migration file ${file} has no executable UP SQL content. Skipping.`);
@@ -99,6 +99,38 @@ async function runMigrations() {
}
logger.info(`Executing UP migration from ${file}...`);
// Выделяем CREATE EXTENSION команды, которые должны выполняться вне транзакции
const extensionRegex = /CREATE\s+EXTENSION\s+IF\s+NOT\s+EXISTS\s+\w+;?/gi;
const extensionCommands = [];
sqlToExecute = sqlToExecute.replace(extensionRegex, (match) => {
extensionCommands.push(match.replace(/;?\s*$/, ''));
return ''; // Удаляем из основного SQL
});
// Выполняем CREATE EXTENSION команды вне транзакции
for (const extCmd of extensionCommands) {
try {
await pool.query(extCmd);
logger.info(`Extension command executed: ${extCmd}`);
} catch (error) {
// Игнорируем ошибку, если расширение уже установлено
if (!error.message.includes('already exists')) {
logger.warn(`Warning executing extension command: ${error.message}`);
}
}
}
// Очищаем оставшийся SQL от пустых строк
sqlToExecute = sqlToExecute.trim();
// Если после удаления CREATE EXTENSION остался только пустой SQL, пропускаем транзакцию
if (!sqlToExecute) {
await pool.query('INSERT INTO migrations (name) VALUES ($1)', [file]);
logger.info(`Migration ${file} executed successfully (extension only)`);
continue;
}
await pool.query('BEGIN');
try {
// Создаем функцию для получения ключа шифрования