-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathapp.js
More file actions
119 lines (102 loc) · 3.58 KB
/
app.js
File metadata and controls
119 lines (102 loc) · 3.58 KB
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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
var createError = require("http-errors");
var express = require("express");
var path = require("path");
var cookieParser = require("cookie-parser");
var logger = require("morgan");
const cors = require("cors");
const axios = require("axios");
var errorHandler = require("./common/error/ErrorHandler");
var indexRouter = require("./routes/index");
const trendRouter = require("./routes/trend");
var stocksRouter = require("./routes/stocks");
const clusterRouter = require("./routes/cluster");
const stocksDetailRouter = require("./routes/stocksDetail");
const corporateRouter = require("./routes/corporates");
const realtimePriceRouter = require("./routes/realtimePrice");
const cartRouter = require("./routes/cart");
const backtestRouter = require("./routes/backtest");
const sectorRouter = require("./routes/sector");
const usersRouter = require("./routes/user");
const associateRouter = require("./routes/associate");
const swaggerUi = require("swagger-ui-express");
const swaggerJsdoc = require("swagger-jsdoc");
const { request } = require("http");
require("dotenv").config();
require("./service/koreainvestmentAPI/kisSocket");
require("./service/koreainvestmentAPI/tradingSession");
const cron = require("node-cron");
const { runBatchJob } = require("./batch/batchJob");
const { updatePrices } = require("./service/koreainvestmentAPI/tradingSession");
//batch
cron.schedule("0 0 1 3,6,9,12 *", async () => {
// 3개월마다 실행 (매년 3월, 6월, 9월, 12월의 1일 00:00:00에 실행)
console.log("Running batch job every 3 months");
await runBatchJob();
await updatePrices();
});
const { saveMentionsForAllCorporates } = require("./service/trendMention");
saveMentionsForAllCorporates();
const { CLIENT_URL } = process.env;
const whitelist = ["http://localhost:3000", CLIENT_URL];
const corsOptions = {
origin: function (origin, callback) {
if (!origin || whitelist.indexOf(origin) !== -1) {
callback(null, true);
} else {
callback(new Error(`Not Allowed Origin!`));
}
},
};
var app = express();
app.use(cors(corsOptions));
app.use(logger("dev"));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, "public")));
const options = {
definition: {
openapi: "3.0.0",
info: {
title: "몽키랭키 API",
version: "1.0.0",
description: "오공의 몽키랭키 API 문서입니다.",
},
servers: [
{
url: "http://localhost:5000/",
},
],
},
apis: ["./models/*.js", "./routes/*.js"],
};
const specs = swaggerJsdoc(options);
app.use("/api", indexRouter);
app.use("/api/stocks", stocksRouter);
app.use("/api/stocksDetail", stocksDetailRouter);
app.use("/api/cluster", clusterRouter);
app.use("/api/corporates", corporateRouter);
app.use("/api/realtimePrice", realtimePriceRouter);
app.use("/api/trend", trendRouter);
app.use("/api/cart", cartRouter);
app.use("/api/backtest", backtestRouter);
app.use("/api/sector", sectorRouter);
app.use("/api/users", usersRouter);
app.use("/api/associate", associateRouter);
app.use(errorHandler);
app.use("/api-docs", swaggerUi.serve, swaggerUi.setup(specs));
// catch 404 and forward to error handler
app.use(function (req, res, next) {
next(createError(404));
});
// error handler
app.use(function (err, req, res, next) {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get("env") === "development" ? err : {};
// send the error message as JSON
res.status(err.status || 500).json({
error: err.message,
});
});
module.exports = app;