Files
dashboard/backend/server.js
T
Alberto-Audrix 32a36cceff
CI / lint-and-test (push) Canceled after 0s
first commit
2026-07-28 08:55:05 +07:00

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();