// 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()); // FIREBASE const serviceAccount = require(path.join(__dirname, "app/config/serviceAccountKey.json")); if (!admin.apps.length) { admin.initializeApp({ credential: admin.credential.cert(serviceAccount), 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"); });