eletrotupi / tcc/ api/src/createApp.tsfe963260110d5407f9fb610d6fbd75381609e3ee
1.2 KB | 46 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 moodRouter from '@app/routes/moods';
9
import { errorHandler } from '@app/middleware/errorHandler';
10
import { PrismaClient } from '@prisma/client';
11
import { bootWorkers, closeAllWorkers, closeAllQueues } from '@app/lib/queue';
12

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

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

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

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

30
  app.get('/', mainRouter);
31
  app.use("/users", userRouter);
32
  app.use("/auth", authRouter);
33
  app.use("/moods", moodRouter);
34

35
  app.use(errorHandler); // always last
36

37
  process.on('SIGTERM', shutdown);
38
  process.on('SIGINT', shutdown);
39

40
  return app;
41
}
42

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