99 lines
3.5 KiB
TypeScript
99 lines
3.5 KiB
TypeScript
import path from 'path'
|
|
import express from 'express'
|
|
import cors from 'cors'
|
|
import dotenv from 'dotenv'
|
|
import session from 'express-session'
|
|
import equipmentRoutes from './routes/equipment'
|
|
import { scanEquipment } from './controllers/equipmentController'
|
|
import borrowRoutes, { returnRouter } from './routes/borrow'
|
|
import statisticsRoutes from './routes/statistics'
|
|
import authRoutes from './routes/auth'
|
|
import barcodeRoutes from './routes/barcode'
|
|
import settingsRoutes from './routes/settings'
|
|
import usersRoutes from './routes/users'
|
|
import personRoutes from './routes/persons'
|
|
import storageLocationRoutes from './routes/storageLocations'
|
|
import assetTypeRoutes from './routes/assetTypes'
|
|
import departmentRoutes from './routes/departments'
|
|
import operationLogRoutes from './routes/operationLog'
|
|
import batchImportRoutes from './routes/batchImport'
|
|
import mountRoutes from './routes/mount'
|
|
import disposalRoutes from './routes/disposal'
|
|
import maintenanceRoutes from './routes/maintenance'
|
|
import batchRoutes from './routes/batch'
|
|
import exportRoutes from './routes/export'
|
|
import searchRoutes from './routes/search'
|
|
import { keycloak, memoryStore } from './utils/keycloak'
|
|
import { protect, requireAdmin } from './middleware/auth'
|
|
|
|
dotenv.config()
|
|
|
|
const app = express()
|
|
const PORT = process.env.PORT || 3000
|
|
const SESSION_SECRET = process.env.SESSION_SECRET || 'equipment-management-secret'
|
|
|
|
// Middleware
|
|
app.use(cors({ origin: true, credentials: true }))
|
|
app.use(express.json())
|
|
app.use(express.urlencoded({ extended: true }))
|
|
app.use(
|
|
session({
|
|
secret: SESSION_SECRET,
|
|
resave: false,
|
|
saveUninitialized: false,
|
|
store: memoryStore,
|
|
cookie: {
|
|
secure: false,
|
|
maxAge: 1000 * 60 * 60 // 1 hour
|
|
}
|
|
})
|
|
)
|
|
if (process.env.AUTH_MODE !== 'local') {
|
|
app.use(keycloak.middleware({ logout: '/api/auth/logout', admin: '/keycloak' }))
|
|
}
|
|
|
|
app.use('/uploads', express.static(path.resolve(__dirname, '..', 'uploads')))
|
|
|
|
// Routes
|
|
app.get('/api/equipment/scan/:equipment_code', protect(), scanEquipment)
|
|
app.use('/api/equipment', protect(), requireAdmin(), equipmentRoutes)
|
|
app.use('/api/borrow', protect(), borrowRoutes)
|
|
app.use('/api/return', protect(), returnRouter)
|
|
app.use('/api/statistics', protect(), statisticsRoutes)
|
|
app.use('/api/barcode', protect(), barcodeRoutes)
|
|
app.use('/api/auth', authRoutes)
|
|
app.use('/api/settings', protect(), requireAdmin(), settingsRoutes)
|
|
app.use('/api/users', protect(), requireAdmin(), usersRoutes)
|
|
app.use('/api/persons', personRoutes)
|
|
app.use('/api/storage-locations', storageLocationRoutes)
|
|
app.use('/api/asset-types', assetTypeRoutes)
|
|
app.use('/api/departments', departmentRoutes)
|
|
app.use('/api/operation-logs', operationLogRoutes)
|
|
app.use('/api/batch-import', batchImportRoutes)
|
|
app.use('/api/mount', protect(), mountRoutes)
|
|
app.use('/api/disposal', protect(), disposalRoutes)
|
|
app.use('/api/maintenance', protect(), maintenanceRoutes)
|
|
app.use('/api/batch', protect(), batchRoutes)
|
|
app.use('/api/export', protect(), exportRoutes)
|
|
app.use('/api/search', protect(), searchRoutes)
|
|
|
|
// Health check
|
|
app.get('/api/health', (req, res) => {
|
|
res.json({ status: 'ok', message: 'Server is running' })
|
|
})
|
|
|
|
// Error handling middleware
|
|
app.use((err: any, req: express.Request, res: express.Response, next: express.NextFunction) => {
|
|
console.error('Error:', err)
|
|
res.status(err.status || 500).json({
|
|
code: err.status || 500,
|
|
message: err.message || 'Internal Server Error',
|
|
data: null
|
|
})
|
|
})
|
|
|
|
app.listen(PORT, () => {
|
|
console.log(`Server is running on http://localhost:${PORT}`)
|
|
})
|
|
|