Files
multy-stub/server/routers/procurement/index.js
2025-11-04 22:39:29 +03:00

113 lines
3.9 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
const express = require('express');
const cors = require('cors');
const dotenv = require('dotenv');
const fs = require('fs');
// Импортировать mongoose из общего модуля (подключение происходит в server/utils/mongoose.ts)
const mongoose = require('../../utils/mongoose');
// Загрузить переменные окружения
dotenv.config();
// Включить логирование при разработке: установите DEV=true в .env или при запуске
// export DEV=true && npm start (для Linux/Mac)
// set DEV=true && npm start (для Windows)
// По умолчанию логи отключены. Все console.log функции отключаются если DEV !== 'true'
if (process.env.DEV === 'true') {
console.log(' DEBUG MODE ENABLED - All logs are visible');
}
// Импортировать маршруты - прямые пути без path.join и __dirname
const authRoutes = require('./routes/auth');
const companiesRoutes = require('./routes/companies');
const messagesRoutes = require('./routes/messages');
const searchRoutes = require('./routes/search');
const buyRoutes = require('./routes/buy');
const experienceRoutes = require('./routes/experience');
const productsRoutes = require('./routes/products');
const reviewsRoutes = require('./routes/reviews');
const buyProductsRoutes = require('./routes/buyProducts');
const requestsRoutes = require('./routes/requests');
const homeRoutes = require('./routes/home');
const activityRoutes = require('./routes/activity');
const app = express();
// Проверить подключение к MongoDB (подключение происходит в server/utils/mongoose.ts)
const dbConnected = mongoose.connection.readyState === 1;
// Middleware
app.use(cors());
app.use(express.json({ charset: 'utf-8' }));
app.use(express.urlencoded({ extended: true, charset: 'utf-8' }));
// Set UTF-8 encoding for all responses
app.use((req, res, next) => {
res.setHeader('Content-Type', 'application/json; charset=utf-8');
next();
});
// CORS headers
app.use((req, res, next) => {
res.setHeader('Access-Control-Allow-Origin', '*');
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization');
if (req.method === 'OPTIONS') {
res.sendStatus(200);
} else {
next();
}
});
// Задержка для имитации сети (опционально)
const delay = (ms = 300) => (req, res, next) => setTimeout(next, ms);
app.use(delay());
// Статика для загруженных файлов
const uploadsRoot = 'server/remote-assets/uploads';
if (!fs.existsSync(uploadsRoot)) {
fs.mkdirSync(uploadsRoot, { recursive: true });
}
app.use('/uploads', express.static(uploadsRoot));
// Health check endpoint
app.get('/health', (req, res) => {
res.json({
status: 'ok',
api: 'running',
database: dbConnected ? 'mongodb' : 'mock',
timestamp: new Date().toISOString()
});
});
// Маршруты
app.use('/auth', authRoutes);
app.use('/companies', companiesRoutes);
app.use('/messages', messagesRoutes);
app.use('/search', searchRoutes);
app.use('/buy', buyRoutes);
app.use('/buy-products', buyProductsRoutes);
app.use('/experience', experienceRoutes);
app.use('/products', productsRoutes);
app.use('/reviews', reviewsRoutes);
app.use('/requests', requestsRoutes);
app.use('/home', homeRoutes);
app.use('/activities', activityRoutes);
// Обработка ошибок
app.use((err, req, res, next) => {
console.error('API Error:', err);
res.status(err.status || 500).json({
error: err.message || 'Internal server error'
});
});
// 404 handler
app.use((req, res) => {
res.status(404).json({
error: 'Not found'
});
});
// Экспортировать для использования в brojs
module.exports = app;