69 lines
2.8 KiB
JavaScript
69 lines
2.8 KiB
JavaScript
const express = require('express');
|
|
const cors = require('cors');
|
|
const path = require('path');
|
|
const fs = require('fs');
|
|
require('dotenv').config();
|
|
|
|
const db = require('./config/db');
|
|
|
|
const authRoutes = require('./routes/auth');
|
|
const memberRoutes = require('./routes/members');
|
|
const guestRoutes = require('./routes/guests');
|
|
const recommendationRoutes = require('./routes/recommendations');
|
|
const honorRoutes = require('./routes/honors');
|
|
const eventRoutes = require('./routes/events');
|
|
const statsRoutes = require('./routes/stats');
|
|
const adminRoutes = require('./routes/admin');
|
|
const invitationRoutes = require('./routes/invitation');
|
|
const absenceRoutes = require('./routes/absences');
|
|
const galleryRoutes = require('./routes/gallery');
|
|
const pushRoutes = require('./routes/push');
|
|
const notificationRoutes = require('./routes/notifications');
|
|
const presentationRoutes = require('./routes/presentation');
|
|
const memberSlidesRoutes = require('./routes/memberSlides');
|
|
const exportRoutes = require('./routes/export');
|
|
const activityLogRoutes = require('./routes/activityLog');
|
|
const presentationEditorRoutes = require('./routes/presentationEditor');
|
|
const { startPushCron } = require('./services/pushNotifications');
|
|
|
|
const app = express();
|
|
|
|
const uploadsDir = path.join(__dirname, 'uploads');
|
|
if (!fs.existsSync(uploadsDir)) fs.mkdirSync(uploadsDir, { recursive: true });
|
|
|
|
const galleryDir = path.join(__dirname, 'gallery');
|
|
if (!fs.existsSync(galleryDir)) fs.mkdirSync(galleryDir, { recursive: true });
|
|
|
|
app.use(cors());
|
|
app.use(express.json({ limit: '100mb' }));
|
|
app.use('/uploads', express.static(uploadsDir));
|
|
app.use('/gallery', express.static(galleryDir));
|
|
|
|
app.use('/api/auth', authRoutes);
|
|
app.use('/api/members', memberRoutes);
|
|
app.use('/api/guests', guestRoutes);
|
|
app.use('/api/recommendations', recommendationRoutes);
|
|
app.use('/api/honors', honorRoutes);
|
|
app.use('/api/events', eventRoutes);
|
|
app.use('/api/stats', statsRoutes);
|
|
app.use('/api/admin', adminRoutes);
|
|
app.use('/api/admin/presentation-editor', presentationEditorRoutes);
|
|
app.use('/api/public/invitation', invitationRoutes);
|
|
app.use('/invitation', invitationRoutes);
|
|
app.use('/api/absences', absenceRoutes);
|
|
app.use('/api/gallery', galleryRoutes);
|
|
app.use('/api/push', pushRoutes);
|
|
app.use('/api/notifications', notificationRoutes);
|
|
app.use('/api/presentation', presentationRoutes);
|
|
app.use('/api/member-slides', memberSlidesRoutes);
|
|
app.use('/api/export', exportRoutes);
|
|
app.use('/api/activity-logs', activityLogRoutes);
|
|
app.use('/member-slides', express.static(path.join(__dirname, 'member_slides')));
|
|
|
|
app.get('/api/health', (req, res) => res.json({ status: 'ok' }));
|
|
|
|
startPushCron();
|
|
|
|
const PORT = process.env.PORT || 3000;
|
|
app.listen(PORT, () => console.log(`Backend running on port ${PORT}`));
|