128 lines
4.7 KiB
JavaScript
128 lines
4.7 KiB
JavaScript
const fs = require('fs').promises;
|
|
const cors = require('cors');
|
|
const helmet = require('helmet');
|
|
const express = require('express');
|
|
const morgan = require('morgan');
|
|
const path = require('path');
|
|
const session = require('express-session');
|
|
require('dotenv').config({ path: path.join(__dirname, './config.env') });
|
|
require('dotenv').config({ path: __dirname + '/moders/config.env' });
|
|
const logger = require('./logger');
|
|
const moderAuthRouter = require('./moders/routes/moderAuth');
|
|
const moderContentRouter = require('./moders/routes/content');
|
|
const authRouter = require('./routes/auth');
|
|
const cardRouter = require('./routes/card');
|
|
const logsRouter = require('./routes/logs');
|
|
const settingsRouter = require('./routes/settings');
|
|
const modersRouter = require('./routes/moders');
|
|
const healthRouter = require('./routes/health');
|
|
const monitoringRouter = require('./routes/monitoring');
|
|
const setupWebSocket = require('./services/websocket');
|
|
const cardController = require('./controllers/cardController');
|
|
const app = express();
|
|
const server = require('http').createServer(app);
|
|
|
|
// Конфигурации
|
|
const corsConfig = require('./config/cors');
|
|
const sessionConfig = require('./config/session');
|
|
|
|
// Middleware
|
|
app.use(helmet()); // Добавление helmet для защиты
|
|
app.use(cors(corsConfig));
|
|
app.use(morgan('dev'));
|
|
app.use(express.json());
|
|
app.use(session(sessionConfig(session)));
|
|
// Роуты
|
|
app.use('/api/auth', authRouter);
|
|
// Статические файлы
|
|
app.use(express.static(path.join(__dirname, '..','admin-frontend', 'build')));
|
|
app.use('/uploads', express.static(__dirname + '/uploads'));
|
|
|
|
// Роуты
|
|
app.use('/api/card', cardRouter);
|
|
app.use('/api/logs', logsRouter);
|
|
app.use('/api/settings', settingsRouter);
|
|
app.use('/api/moders', modersRouter);
|
|
app.use('/api/health', healthRouter);
|
|
app.use('/api/monitoring', monitoringRouter);
|
|
app.use('/moders', moderAuthRouter);
|
|
app.use('/moders/content', moderContentRouter);
|
|
app.use((req, res, next) => {
|
|
console.log(`[${new Date().toISOString()}] ${req.method} ${req.url}`);
|
|
next();
|
|
});
|
|
// Initialize card logs
|
|
(async () => {
|
|
try {
|
|
await cardController.initCardLogs();
|
|
logger.info('Card logs initialized successfully');
|
|
} catch (err) {
|
|
logger.error('Failed to initialize card logs:', err);
|
|
}
|
|
})();
|
|
|
|
// WebSocket
|
|
setupWebSocket(server);
|
|
|
|
// Catch-all route to serve React's index.html
|
|
app.get(/.*/, (req, res, next) => {
|
|
if (req.path.startsWith('/api/') || req.path.startsWith('/moders')) {
|
|
return next();
|
|
}
|
|
res.sendFile(path.join(__dirname, '..','admin-frontend', 'build', 'index.html'));
|
|
});
|
|
|
|
// Обработчик ошибок (должен быть последним!)
|
|
app.use(require('./middleware/errorHandler'));
|
|
app.get('/api/status', async (req, res) => {
|
|
try {
|
|
res.json({ status: 'online' }); // или другая логика проверки
|
|
} catch (err) {
|
|
res.status(500).json({ status: 'error', message: err.message });
|
|
}
|
|
});
|
|
|
|
app.get('/api/config', async (req, res) => {
|
|
try {
|
|
const backendConfigPath = path.join(__dirname, '../backend/config.json');
|
|
const content = await fs.readFile(backendConfigPath, 'utf8');
|
|
const backendConfig = JSON.parse(content);
|
|
const config = {
|
|
payslipsPath: backendConfig.payslipsPath
|
|
};
|
|
res.json(config);
|
|
} catch (err) {
|
|
logger.error('Ошибка чтения backend/config.json:', err);
|
|
res.status(500).json({ error: 'Ошибка загрузки конфигурации' });
|
|
}
|
|
});
|
|
// Добавьте рядом с существующим GET обработчиком
|
|
app.post('/api/config', async (req, res) => {
|
|
try {
|
|
const backendConfigPath = path.join(__dirname, '../backend/config.json');
|
|
const content = await fs.readFile(backendConfigPath, 'utf8');
|
|
const currentConfig = JSON.parse(content);
|
|
|
|
// Обновляем только разрешенные поля
|
|
if (req.body.payslipsPath) {
|
|
currentConfig.payslipsPath = req.body.payslipsPath;
|
|
}
|
|
|
|
// Сохраняем обновленный конфиг
|
|
await fs.writeFile(backendConfigPath, JSON.stringify(currentConfig, null, 4));
|
|
|
|
res.json({
|
|
success: true,
|
|
message: 'Конфигурация успешно обновлена'
|
|
});
|
|
} catch (err) {
|
|
logger.error('Ошибка сохранения конфигурации:', err);
|
|
res.status(500).json({
|
|
error: 'Ошибка сохранения конфигурации',
|
|
details: err.message
|
|
});
|
|
}
|
|
});
|
|
server.listen(process.env.PORT || 3005, () => {
|
|
logger.info(`Server running on ${process.env.ADMIN_URL}`);
|
|
}); |