OwlCyberSecurity - MANAGER
Edit File: app.js
import express from 'express'; const app = express(); // ✅ Initialize app BEFORE using it import AdminJS from 'adminjs'; import AdminJSExpress from '@adminjs/express'; import * as AdminJSSequelize from '@adminjs/sequelize'; import { ComponentLoader } from 'adminjs'; import cors from 'cors'; import path from 'path'; import { fileURLToPath } from 'url'; // Custom API Routes import assetRoutes from './routes/asset.routes.js'; import categoryRoutes from './routes/category.routes.js'; import subCategoryRoutes from './routes/subcategory.routes.js'; import departmentRoutes from './routes/department.routes.js'; import locationRoutes from './routes/location.routes.js'; import employeeRoutes from './routes/employee.routes.js'; import supplierRoutes from './routes/supplier.routes.js'; // DB and Models import sequelize from './sequelize.js'; import { Asset, AssetCategory, AssetSubCategory, Department, Employee, Supplier, Office, VirtualAssetRegistration } from './models/index.js'; // CORS Configuration 🔧 const allowedOrigins = [ 'http://37.60.246.20:3000', 'http://testone.onebox.pk:3000', 'http://testone.onebox.pk' ]; app.use(cors({ origin: function (origin, callback) { console.log('🔍 Incoming request from Origin:', origin); if (!origin || allowedOrigins.includes(origin)) { callback(null, true); } else { callback(new Error('Not allowed by CORS')); } }, credentials: true })); app.use(express.json()); // AdminJS setup AdminJS.registerAdapter({ Resource: AdminJSSequelize.Resource, Database: AdminJSSequelize.Database, }); const adminJs = new AdminJS({ databases: [sequelize], rootPath: '/admin', branding: { companyName: 'Asset Management System', theme: { colors: { primary100: '#4f46e5', primary80: '#6366f1', primary60: '#818cf8', primary40: '#a5b4fc', primary20: '#c7d2fe', }, }, }, locale: { language: 'en', translations: { labels: { QuickAssetRegistration: 'Quick Registration', Asset: 'Assets', AssetCategory: 'Categories', AssetSubCategory: 'Subcategories', Office: 'Offices', Department: 'Departments', Employee: 'Employees', Supplier: 'Suppliers', }, }, }, resources: [ { resource: Asset, options: { properties: { categoryId: { reference: 'asset_categories' }, subCategoryId: { reference: 'asset_subcategories' }, officeId: { reference: 'offices' }, departmentId: { reference: 'departments' }, employeeId: { reference: 'employees' }, supplierId: { reference: 'suppliers' }, }, }, }, { resource: AssetCategory, }, { resource: AssetSubCategory, options: { properties: { categoryId: { reference: 'asset_categories' }, }, }, }, { resource: Office, }, { resource: Department, options: { properties: { officeId: { reference: 'offices' }, }, }, }, { resource: Employee, options: { properties: { departmentId: { reference: 'departments' }, }, }, }, { resource: Supplier, options: { properties: { categoryId: { reference: 'asset_categories' }, }, }, }, ], }); const adminRouter = AdminJSExpress.buildRouter(adminJs); app.use(adminJs.options.rootPath, adminRouter); // API Routes app.use('/api/assets', assetRoutes); app.use('/api/categories', categoryRoutes); app.use('/api/subcategories', subCategoryRoutes); app.use('/api/departments', departmentRoutes); app.use('/api/locations', locationRoutes); app.use('/api/employees', employeeRoutes); app.use('/api/suppliers', supplierRoutes); // Start Server const PORT = process.env.PORT || 3001; sequelize.authenticate() .then(() => { console.log('✅ Database connected...'); return sequelize.sync(); // { force: true } if resetting }) .then(() => { app.listen(PORT, () => { console.log(`🚀 Server running at http://testone.onebox.pk:${PORT}`); console.log(`🛠️ AdminJS at http://testone.onebox.pk:${PORT}${adminJs.options.rootPath}`); }); }) .catch((err) => { console.error('❌ Database connection error:', err); }); export default app;