new procurement

This commit is contained in:
2025-10-23 09:49:04 +03:00
parent 99127c42e2
commit a6065dd95c
22 changed files with 1588 additions and 409 deletions

View File

@@ -1,64 +1,94 @@
const express = require('express')
const dotenv = require('dotenv')
const express = require('express');
const cors = require('cors');
const dotenv = require('dotenv');
const connectDB = require('./config/db');
// Загрузить переменные окружения
dotenv.config()
// Подключение к MongoDB через mongoose
require('../../utils/mongoose')
dotenv.config();
// Импортировать маршруты
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 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 homeRoutes = require('./routes/home');
const mongoose = require('mongoose')
const app = express();
const app = express()
// Подключить MongoDB при инициализации
let dbConnected = false;
connectDB().then(() => {
dbConnected = true;
});
// 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 delay = (ms = 300) => (req, res, next) => setTimeout(next, ms);
app.use(delay());
// Health check endpoint
app.get('/health', (req, res) => {
const mongodbStatus = mongoose.connection.readyState === 1 ? 'connected' : 'disconnected'
res.json({
status: 'ok',
api: 'running',
database: mongodbStatus,
mongoUri: process.env.MONGODB_URI || 'mongodb://localhost:27017/procurement_db',
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('/experience', experienceRoutes)
app.use('/products', productsRoutes)
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('/home', homeRoutes);
// Обработка ошибок
app.use((err, req, res, next) => {
console.error('API Error:', err)
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
module.exports = app;