84 lines
2.6 KiB
JavaScript
84 lines
2.6 KiB
JavaScript
const express = require('express');
|
|
const cors = require('cors');
|
|
const path = require('path');
|
|
require('dotenv').config();
|
|
require('dotenv').config({ path: path.join(__dirname, '../.env') });
|
|
|
|
// Initialize database connection (auto-creates schema)
|
|
require('./database/db');
|
|
|
|
// Migration runner
|
|
const { runMigrations } = require('./database/runMigrations');
|
|
|
|
const app = express();
|
|
const PORT = process.env.PORT || 5001;
|
|
|
|
// Middleware
|
|
app.use(
|
|
cors({
|
|
origin: ['http://localhost:3000', 'http://localhost:5173', 'http://localhost:3001', 'http://localhost:5002', '*'],
|
|
credentials: true,
|
|
})
|
|
);
|
|
app.use(express.json());
|
|
|
|
// Request logging middleware
|
|
app.use((req, res, next) => {
|
|
next();
|
|
});
|
|
|
|
// Routes
|
|
const cyclesRouter = require('./routes/cycles');
|
|
const mortalityRouter = require('./routes/mortality');
|
|
const chickenCountsRouter = require('./routes/chickenCounts');
|
|
const apiKeysRouter = require('./routes/apiKeys');
|
|
const kandangsRouter = require('./routes/kandangs');
|
|
const feedSackColumnConfigRouter = require('./routes/feedSackColumnConfig');
|
|
const manualFeedSackRouter = require('./routes/manualFeedSack');
|
|
const cycleFeedInitialBalanceRouter = require('./routes/cycleFeedInitialBalance');
|
|
const auditLogsRouter = require('./routes/auditLogs');
|
|
const aiInsightsRouter = require('./routes/aiInsights');
|
|
|
|
app.use('/api/cycles', cyclesRouter);
|
|
app.use('/api/mortality', mortalityRouter);
|
|
app.use('/api/chicken-counting', chickenCountsRouter);
|
|
app.use('/api/admin/api-keys', apiKeysRouter);
|
|
app.use('/api/kandangs', kandangsRouter);
|
|
app.use('/api/feed-sack-column-config', feedSackColumnConfigRouter);
|
|
app.use('/api/manual-feed-sack', manualFeedSackRouter);
|
|
app.use('/api/cycle-feed-initial-balance', cycleFeedInitialBalanceRouter);
|
|
app.use('/api/audit-logs', auditLogsRouter);
|
|
app.use('/api/ai-insights', aiInsightsRouter);
|
|
|
|
// Health check endpoint
|
|
app.get('/health', (req, res) => {
|
|
res.json({ status: 'ok', timestamp: new Date().toISOString(), database: 'postgresql' });
|
|
});
|
|
|
|
// 404 handler
|
|
app.use((req, res) => {
|
|
res.status(404).json({ success: false, error: 'Route not found' });
|
|
});
|
|
|
|
// Error handling middleware (MUST be last)
|
|
const { errorHandler } = require('./middleware/errorHandler');
|
|
app.use(errorHandler);
|
|
|
|
// Start server with migrations
|
|
async function startServer() {
|
|
try {
|
|
// Run database migrations first
|
|
await runMigrations();
|
|
|
|
// Then start the server
|
|
app.listen(PORT, () => {});
|
|
} catch (error) {
|
|
console.error('❌ Failed to start server due to migration error');
|
|
console.error(error);
|
|
process.exit(1);
|
|
}
|
|
}
|
|
|
|
// Start the server
|
|
startServer();
|