eletrotupi / tcc/ api/src/createApp.tsffd33a29c8ba15703f785399b5d0352f50c16d73
1.1 KB | 44 lines Raw
1
import express from 'express';
2
import cors from 'cors';
3
import bodyParser from 'body-parser';
4
import morgan from 'morgan';
5
import mainRouter from '@app/routes/main';
6
import userRouter from '@app/routes/users';
7
import authRouter from '@app/routes/auth';
8
import { errorHandler } from '@app/middleware/errorHandler';
9
import { PrismaClient } from '@prisma/client';
10
import { bootWorkers, closeAllWorkers, closeAllQueues } from '@app/lib/queue';
11

12
export function createApp() {
13
  const app = express();
14
  bootWorkers();
15

16
  // Configure CORS
17
  app.use(cors({
18
    origin: process.env.FRONTEND_URL || '*',
19
    credentials: true
20
  }));
21

22
  app.use(bodyParser.json());
23

24
  // Only use morgan in non-test environments
25
  if (process.env.NODE_ENV !== 'test') {
26
    app.use(morgan('combined'));
27
  }
28

29
  app.get('/', mainRouter);
30
  app.use("/users", userRouter);
31
  app.use("/auth", authRouter);
32

33
  app.use(errorHandler); // always last
34

35
  process.on('SIGTERM', shutdown);
36
  process.on('SIGINT', shutdown);
37

38
  return app;
39
}
40

41
const shutdown = async () => {
42
  await Promise.all([closeAllWorkers(), closeAllQueues()]);
43
  process.exit(0);
44
};