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

This commit is contained in:
2025-07-27 03:30:13 +03:00
parent 057fe6254c
commit 1835632be9
141 changed files with 32514 additions and 6661 deletions

View File

@@ -0,0 +1,184 @@
/**
* Copyright (c) 2024-2025 Тарабанов Александр Викторович
* All rights reserved.
*
* This software is proprietary and confidential.
* Unauthorized copying, modification, or distribution is prohibited.
*
* For licensing inquiries: info@hb3-accelerator.com
* Website: https://hb3-accelerator.com
* GitHub: https://github.com/HB3-ACCELERATOR
*/
const express = require('express');
const path = require('path');
const fs = require('fs');
const router = express.Router();
/**
* @route GET /api/russian-classifiers/oktmo
* @desc Получить список кодов ОКТМО (муниципальные образования)
* @access Public
*/
router.get('/oktmo', async (req, res, next) => {
try {
const filePath = path.join(__dirname, '../db/data/oktmo.json');
if (!fs.existsSync(filePath)) {
return res.status(404).json({
success: false,
message: 'Файл с кодами ОКТМО не найден'
});
}
const data = fs.readFileSync(filePath, 'utf8');
const oktmoData = JSON.parse(data);
res.json({
success: true,
data: oktmoData.oktmo_codes || [],
count: oktmoData.oktmo_codes ? oktmoData.oktmo_codes.length : 0
});
} catch (error) {
console.error('Ошибка при получении кодов ОКТМО:', error);
next(error);
}
});
/**
* @route GET /api/russian-classifiers/okved
* @desc Получить список кодов ОКВЭД (виды экономической деятельности)
* @access Public
*/
router.get('/okved', async (req, res, next) => {
try {
const filePath = path.join(__dirname, '../db/data/okved.json');
if (!fs.existsSync(filePath)) {
return res.status(404).json({
success: false,
message: 'Файл с кодами ОКВЭД не найден'
});
}
const data = fs.readFileSync(filePath, 'utf8');
const okvedData = JSON.parse(data);
// Для ОКВЭД можем добавить фильтрацию по запросу
const { search, level } = req.query;
let codes = okvedData.okved_codes || [];
// Фильтрация по поисковому запросу
if (search) {
const searchTerm = search.toLowerCase();
codes = codes.filter(code =>
code.code.toLowerCase().includes(searchTerm) ||
code.title.toLowerCase().includes(searchTerm)
);
}
// Фильтрация по уровню (количество точек в коде)
if (level) {
const targetLevel = parseInt(level);
codes = codes.filter(code => {
const codeLevel = (code.code.match(/\./g) || []).length + 1;
return codeLevel === targetLevel;
});
}
// Ограничиваем количество результатов для производительности
const limit = parseInt(req.query.limit) || 2000; // Увеличили лимит для полного списка
codes = codes.slice(0, limit);
res.json({
success: true,
data: codes,
count: codes.length,
total: okvedData.okved_codes ? okvedData.okved_codes.length : 0
});
} catch (error) {
console.error('Ошибка при получении кодов ОКВЭД:', error);
next(error);
}
});
/**
* @route GET /api/russian-classifiers/okved/:code
* @desc Получить информацию о коде ОКВЭД
* @access Public
*/
router.get('/okved/:code', async (req, res, next) => {
try {
const { code } = req.params;
const filePath = path.join(__dirname, '../db/data/okved.json');
if (!fs.existsSync(filePath)) {
return res.status(404).json({
success: false,
message: 'Файл с кодами ОКВЭД не найден'
});
}
const data = fs.readFileSync(filePath, 'utf8');
const okvedData = JSON.parse(data);
const okvedCode = okvedData.okved_codes.find(c => c.code === code);
if (!okvedCode) {
return res.status(404).json({
success: false,
message: `Код ОКВЭД ${code} не найден`
});
}
res.json({
success: true,
data: okvedCode
});
} catch (error) {
console.error('Ошибка при получении информации о коде ОКВЭД:', error);
next(error);
}
});
/**
* @route GET /api/russian-classifiers/all
* @desc Получить все российские классификаторы одним запросом
* @access Public
*/
router.get('/all', async (req, res, next) => {
try {
const oktmoPath = path.join(__dirname, '../db/data/oktmo.json');
const okvedPath = path.join(__dirname, '../db/data/okved.json');
const result = {};
// ОКТМО
if (fs.existsSync(oktmoPath)) {
const oktmoData = JSON.parse(fs.readFileSync(oktmoPath, 'utf8'));
result.oktmo = oktmoData.oktmo_codes || [];
}
// ОКВЭД (полный список)
if (fs.existsSync(okvedPath)) {
const okvedData = JSON.parse(fs.readFileSync(okvedPath, 'utf8'));
// Отдаем ВСЕ коды ОКВЭД - пользователь хочет полный список
result.okved = okvedData.okved_codes || [];
}
res.json({
success: true,
data: result
});
} catch (error) {
console.error('Ошибка при получении всех российских классификаторов:', error);
next(error);
}
});
module.exports = router;