62 lines
1.5 KiB
JavaScript
62 lines
1.5 KiB
JavaScript
|
|
import 'dotenv/config';
|
||
|
|
import express from 'express';
|
||
|
|
import cors from 'cors';
|
||
|
|
import session from 'express-session';
|
||
|
|
import ConnectPgSimple from 'connect-pg-simple';
|
||
|
|
import pool from './db/pool.js';
|
||
|
|
import { errorHandler } from './middleware/errors.js';
|
||
|
|
|
||
|
|
// Import routes
|
||
|
|
import assetsRouter from './routes/assets.js';
|
||
|
|
import projectsRouter from './routes/projects.js';
|
||
|
|
import binsRouter from './routes/bins.js';
|
||
|
|
import jobsRouter from './routes/jobs.js';
|
||
|
|
import captureRouter from './routes/capture.js';
|
||
|
|
|
||
|
|
const app = express();
|
||
|
|
const PORT = process.env.PORT || 3000;
|
||
|
|
|
||
|
|
// Middleware
|
||
|
|
app.use(cors());
|
||
|
|
app.use(express.json());
|
||
|
|
|
||
|
|
// Session store
|
||
|
|
const PgSession = ConnectPgSimple(session);
|
||
|
|
|
||
|
|
app.use(
|
||
|
|
session({
|
||
|
|
store: new PgSession({
|
||
|
|
pool,
|
||
|
|
tableName: 'sessions',
|
||
|
|
}),
|
||
|
|
secret: process.env.SESSION_SECRET || 'your-secret-key',
|
||
|
|
resave: false,
|
||
|
|
saveUninitialized: false,
|
||
|
|
cookie: {
|
||
|
|
secure: process.env.NODE_ENV === 'production',
|
||
|
|
httpOnly: true,
|
||
|
|
maxAge: 1000 * 60 * 60 * 24, // 24 hours
|
||
|
|
},
|
||
|
|
})
|
||
|
|
);
|
||
|
|
|
||
|
|
// Health check
|
||
|
|
app.get('/health', (req, res) => {
|
||
|
|
res.json({ status: 'ok' });
|
||
|
|
});
|
||
|
|
|
||
|
|
// API Routes
|
||
|
|
app.use('/api/v1/assets', assetsRouter);
|
||
|
|
app.use('/api/v1/projects', projectsRouter);
|
||
|
|
app.use('/api/v1/bins', binsRouter);
|
||
|
|
app.use('/api/v1/jobs', jobsRouter);
|
||
|
|
app.use('/api/v1/capture', captureRouter);
|
||
|
|
|
||
|
|
// Error handler
|
||
|
|
app.use(errorHandler);
|
||
|
|
|
||
|
|
// Start server
|
||
|
|
app.listen(PORT, () => {
|
||
|
|
console.log(`MAM API listening on port ${PORT}`);
|
||
|
|
});
|