osusu-backend / server.js
Airpyk98's picture
feat: upgrade order backend to Naira multi-product, add scoped views
7027d20
Raw
History Blame Contribute Delete
2.53 kB
const express = require('express');
const http = require('http');
const socketIo = require('socket.io');
const cors = require('cors');
require('dotenv').config();
const app = express();
const server = http.createServer(app);
const io = socketIo(server, {
cors: {
origin: true,
methods: ["GET", "POST"],
credentials: true
}
});
// Middleware
app.use(cors({
origin: function (origin, callback) {
if (!origin) return callback(null, true);
return callback(null, origin);
},
credentials: true
}));
app.use(express.json());
// Routes
const authRoutes = require('./routes/auth');
const userRoutes = require('./routes/users');
const teamRoutes = require('./routes/teams');
const customerRoutes = require('./routes/customers');
const orderRoutes = require('./routes/orders');
const productRoutes = require('./routes/products');
app.use('/api/auth', authRoutes);
app.use('/api/users', userRoutes);
app.use('/api/teams', teamRoutes);
app.use('/api/customers', customerRoutes);
app.use('/api/orders', orderRoutes);
app.use('/api/products', productRoutes);
// Socket.io connection handler
const socketConfig = require('./config/socket');
io.on('connection', (socket) => {
socketConfig.handleSocketConnection(socket, io);
});
// Database sync and Start server
const { sequelize } = require('./config/database');
const { Product } = require('./models');
const PORT = process.env.PORT || 5000;
sequelize.sync({ force: false }).then(async () => {
console.log('Database synced successfully.');
try {
// Seed default Naira products if database has no products
const count = await Product.count();
if (count === 0) {
await Product.bulkCreate([
{ name: 'Premium Velvet Purple Fabric Roll', priceNaira: 45000.00, stockCount: 150, zohoProductId: 'ZOHO-PROD-001' },
{ name: 'Susu Premium Woven Cotton (Gold)', priceNaira: 32000.00, stockCount: 200, zohoProductId: 'ZOHO-PROD-002' },
{ name: 'Osusu Luxury Silk Ribbon (Royal Blue)', priceNaira: 18500.00, stockCount: 100, zohoProductId: 'ZOHO-PROD-003' },
{ name: 'Standard Susu Polyester Mesh (Black)', priceNaira: 12000.00, stockCount: 500, zohoProductId: 'ZOHO-PROD-004' }
]);
console.log('Seeded default Susu products in Naira successfully.');
}
} catch (seederErr) {
console.error('Product seeder error:', seederErr);
}
server.listen(PORT, () => {
console.log(`Server is running on port ${PORT}`);
});
}).catch(err => {
console.error('Failed to sync database:', err);
});