import express from 'express' import bodyParser from 'body-parser' import { env } from './env' import { RegisterRoutes } from './routes' import * as swaggerJson from './swagger.json' import * as swaggerUI from 'swagger-ui-express' import cors from 'cors' import { ValidateError } from 'tsoa' import { exressHandleError } from './utils' import { dbinitialize } from './db/data-source' const pkg = require('../package.json') let app = express() app.use(cors()) app.use(bodyParser.json({ limit: '100mb' })) app.use(bodyParser.urlencoded({ limit: '100mb', extended: true })) express.request.__locals = {} as any app.use('/front', express.static('./front/dist')) app.get('/', (req, res) => { res.json({ v: pkg.version, name: pkg.name, }) }) RegisterRoutes(app) app.use( ['/openapi', '/docs', '/swagger'], swaggerUI.serve, swaggerUI.setup(swaggerJson) ) app.get('/health', async (req, res) => { res.send('ok') }) app.use((err: unknown, req: any, res: any, next: any) => { if (err instanceof ValidateError) { console.warn(`Caught Validation Error for ${req.path}:`, err.fields) return res.status(422).json({ message: 'Validation Failed', details: err?.fields, }) } else exressHandleError(err, req, res, next) }) const PORT = env.PORT || 3000 console.log(`starting server on ${PORT}`) ;(async function () { await dbinitialize() app.listen(PORT, () => { console.log(`Server started on ${PORT}`) }) })()