ваше сообщение коммита
This commit is contained in:
184
backend/routes/russian-classifiers.js
Normal file
184
backend/routes/russian-classifiers.js
Normal 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;
|
||||
Reference in New Issue
Block a user