-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathserver.js
More file actions
138 lines (123 loc) · 4.21 KB
/
server.js
File metadata and controls
138 lines (123 loc) · 4.21 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
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
const express = require('express');
const mongoose = require('mongoose');
const cors = require('cors');
require('dotenv').config({ path: 'variables.env' });
const app = express();
const PORT = process.env.PORT || 5000;
const User = require('./models/User');
const challengeRoute = require('./routes/challengeRoute');
const survivalRoute = require('./routes/survivalRoute');
app.use(cors());
app.use(express.json());
app.use('/', express.static(__dirname + '/'));
app.use('/', challengeRoute);
app.use('/', survivalRoute);
mongoose.connect(process.env.MONGODB_URL, { useNewUrlParser: true }, err => {
if (err) {
console.error(err);
} else {
console.log('Connected to database successfully');
}
});
app.get('/', (req, res) => res.sendFile(__dirname + '/dist/index.html'));
app.get('/rss', (req, res) => res.sendFile(__dirname + '/rss.xml'));
app.get('/sitemap', (req, res) => res.sendFile(__dirname + '/sitemap.xml'));
app.get('/robots.txt', (req, res) => res.sendFile(__dirname + '/robots.txt'));
// 현재 버전
app.post('/classic', (req, res) => {
const user = new User();
for (const [ key, value ] of Object.entries(req.body)) {
user[key] = value;
}
if (user.score <= 0) {
res.send('fail');
} else {
User.find({}, '_id score').sort({ score: -1, createdAt: 1 })
.then(users => {
const len = users.length;
if (len < 500) {
user.save();
} else {
const lastUser = users[len-1];
const { _id, score } = lastUser;
if (user.score <= score) {
console.log(`500위 점수 ${score}점 이하라서 저장되지 않습니다.`)
return;
}
Promise.all([
user.save(),
new Promise(resolve => resolve(User.deleteOne({ _id }))),
])
.then(() => console.log(`_id ${_id}, score ${score} document 삭제됨`));
}
})
.then(() => res.send('success'))
.then(() => console.log(`name: ${user.name}, score: ${user.score}, stage: ${user.stage}`))
.catch(console.error);
}
});
// 이전 버전
app.post('/v100/save/classic', (req, res) => {
const user = new User();
for (const [ key, value ] of Object.entries(req.body)) {
user[key] = value;
}
if (user.score <= 0) {
res.send('fail');
} else {
User.find({}, '_id score').sort({ score: -1, createdAt: 1 })
.then(users => {
const len = users.length;
if (len < 500) {
user.save();
} else {
const lastUser = users[len-1];
const { _id, score } = lastUser;
if (user.score <= score) {
console.log(`500위 점수 ${score}점 이하라서 저장되지 않습니다.`)
return;
}
Promise.all([
user.save(),
new Promise(resolve => resolve(User.deleteOne({ _id }))),
])
.then(() => console.log(`_id ${_id}, score ${score} document 삭제됨`));
}
})
.then(() => res.send('success'))
.then(() => console.log(`name: ${user.name}, score: ${user.score}, stage: ${user.stage}`))
.catch(console.error);
}
});
// 현재 버전
app.get('/classic', (req, res) => {
User.find({}, '-_id name score stage')
.sort({ score: -1, createdAt: 1 }).exec()
.then(users => res.json(users))
.catch(console.error);
});
// 이전 버전
app.get('/v100/leaderboard/classic', (req, res) => {
User.find({}, '-_id name score stage')
.sort({ score: -1, createdAt: 1 }).exec()
.then(users => res.json(users))
.catch(console.error);
});
app.post('/log/classic', (req, res) => {
const { name, stage, tempScore, score } = req.body;
console.log(`${name}님이 ${stage}스테이지를 ${tempScore}점으로 클리어! 현재 총점: ${score}점`);
res.send('received');
});
app.post('/log/challenge/fail', (req, res) => {
const { name, modeId } = req.body;
console.log(`${name}님이 도전모드 ${modeId}을(를) 실패함!`);
res.send('received');
});
app.post('/log/challenge', (req, res) => {
const { name, tempScore, modeId } = req.body;
console.log(`${name}님이 도전모드 ${modeId}을(를) ${tempScore}점으로 클리어!`);
res.send('received');
});
app.listen(PORT, () => {
console.log(`listening on ${PORT}`);
});