-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathindex.ts
93 lines (84 loc) · 3.21 KB
/
index.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
import path from 'path'
import express, { Application, Request, Response } from 'express'
import http from 'http'
import bodyParser from 'body-parser'
// import localtunnel from "localtunnel"
import cors from 'cors'
import compression from 'compression'
import dotenv from 'dotenv'
import swaggerUi from 'swagger-ui-express'
import 'express-async-errors'
import { Server } from 'socket.io'
import specs from './src/utils/swagger'
import userRoute from './src/routes/userRoute'
import loginRoute from './src/routes/loginRoute'
import productRoute from './src/routes/productRoute'
import wishlistRoute from './src/routes/wishlistRoute'
import cartRoute from './src/routes/cartRoute'
import notificationRoute from './src/routes/notificationRoute'
import checkoutRoute from './src/routes/checkoutRoute'
import orderRoute from './src/routes/orderRoute'
import chatRoute from './src/routes/chatRoute'
import MoMoRoute from './src/routes/MoMoRoute'
import sequelizeConnection from './src/database/config/db.config' // Assuming you have a sequelize instance exported
import User from './src/database/models/userModel'
import Product from './src/database/models/productModel'
import Review from './src/database/models/reviewsModel'
import { PORT } from './src/config'
import passport from './src/config/passport'
import { ErrorHandler, notFoundHandler } from './src/utils/errorHandler'
import registerSocketEvents from './src/utils/socketEvents'
import socketAuthMiddleware from './src/middlewares/socketMiddleware'
import productExpiryCron from './src/controllers/productExpiryCronJob'
import registerChatNamespace from './src/utils/chatNamespace'
import stripeRoute from './src/routes/stripeRoute'
import paymentRoute from './src/routes/paymentStripeRoute'
import statsRoute from './src/routes/statsRoute'
import { passwordExpiryCron } from './src/utils/passwordUpdateEvent'
dotenv.config()
const app: Application = express()
app.use(passport.initialize())
// Serve Swagger UI
app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(specs))
app.use(cors({ credentials: true }))
app.use(compression())
app.use(bodyParser.json())
app.use('/stripe-webhook', express.raw({type: 'application/json'}), stripeRoute)
app.use(express.static('public'))
// Routes
app.get('/', (req: Request, res: Response) => {
res.status(200).json({ message: 'Welcome to my E-Commerce API' })
})
app.use('/stripe-return', stripeRoute);
app.use('/users', userRoute)
app.use('/users', loginRoute)
app.use('/collections', productRoute)
app.use('/wishlist', wishlistRoute)
app.use('/cart', cartRoute)
app.use('/orders', orderRoute)
app.use('/notifications', notificationRoute)
app.use('/checkout', checkoutRoute)
app.use('/chat', chatRoute)
app.use('/payment', MoMoRoute)
app.use('/payment', paymentRoute)
app.use('/stats', statsRoute)
app.use(notFoundHandler)
app.use(ErrorHandler)
Product.associate()
Review.associate({ Product, User })
const server = http.createServer(app)
server.listen(PORT)
// databse connection
sequelizeConnection.authenticate()
const io = new Server(server, {
cors: {
origin: '*',
methods: ['GET', 'POST'],
},
})
io.use(socketAuthMiddleware)
registerSocketEvents(io)
registerChatNamespace(io)
productExpiryCron()
passwordExpiryCron()
export { app, server, sequelizeConnection }