csa-backend-test/index.js

104 lines
2.9 KiB
JavaScript

// LIBRARY IMPORT
const express = require("express");
const cors = require("cors");
const bodyParser = require("body-parser");
const compression = require("compression");
const cookieParser = require("cookie-parser");
const multer = require("multer");
const morgan = require("morgan");
const path = require("path");
const admin = require("firebase-admin");
const http = require("http");
const socketIo = require("socket.io");
// SERVICES
const { initializeCronJobs } = require("./app/services/cronjob.services.js");
const { startScheduledNotificationCron } = require("./app/services/scheduled-notification-processor.services.js");
const logger = require("./app/services/logger.services.js");
const SocketService = require("./app/services/socket.services.js");
// INITIALIZE CRON JOBS
initializeCronJobs();
startScheduledNotificationCron();
// APP CONFIG
const app = express();
const server = http.createServer(app);
const upload = multer({
limits: { fileSize: 100 * 1024 * 1024 }
});
const port = process.env.PORT || 3000;
app.use(morgan('combined'));
app.use(cors({ origin: true, credentials: true }));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ limit: '100mb', extended: true }));
app.use(cookieParser());
app.use(compression());
app.use(upload.any());
if (!admin.apps.length) {
admin.initializeApp({
credential: admin.credential.applicationDefault(),
storageBucket: "cifowallet.firebasestorage.app",
});
}
// SOCKET.IO SETUP
const io = socketIo(server, {
cors: {
origin: ["http://localhost:3000", "http://localhost:3001", "*"],
methods: ["GET", "POST"],
credentials: true
},
transports: ['websocket', 'polling']
});
// INITIALIZE SOCKET SERVICE
const socketService = new SocketService(io);
// ROUTES
const adminRoutes = require("./app/routes/admin.route.js");
const appRoutes = require("./app/routes/app.route.js");
const cmsRoutes = require("./app/routes/cms.route.js");
const bucketRoutes = require("./app/routes/bucket.route.js");
const userRoutes = require("./app/routes/users.route.js");
const cctvRoutes = require("./app/routes/cctv.route.js");
const campaignRoutes = require("./app/routes/campaign.route.js");
const activityRoutes = require("./app/routes/activity.route.js");
const crashRoutes = require("./app/routes/crash.route.js");
const aiNotificationRoutes = require("./app/routes/ai-notification.route.js");
const menuRoutes = require("./app/routes/menu.route.js");
const messagesRoutes = require("./app/routes/messages.route.js");
// ENDPOINTS
const endpoints = [
adminRoutes,
appRoutes,
cmsRoutes,
bucketRoutes,
userRoutes,
cctvRoutes,
campaignRoutes,
activityRoutes,
crashRoutes,
aiNotificationRoutes,
menuRoutes,
messagesRoutes
];
app.use(endpoints);
server.listen(port, () => {
logger.info(`App is listening on port ${port}`);
logger.info("Started at " + new Date().toLocaleString() + "");
logger.info("Socket.IO server is running");
});