Add features (Re-recommendation function, Resolving Errors, Handling Exceptions)
Showing
1 changed file
with
297 additions
and
119 deletions
... | @@ -12,175 +12,353 @@ var app = express(); | ... | @@ -12,175 +12,353 @@ var app = express(); |
12 | app.use(bodyParser.json()); | 12 | app.use(bodyParser.json()); |
13 | const config = require('./config') | 13 | const config = require('./config') |
14 | const mongoose = require("mongoose"); | 14 | const mongoose = require("mongoose"); |
15 | -const { range } = require("express/lib/request"); | 15 | +const {range} = require("express/lib/request"); |
16 | -const connect = mongoose.connect(config.url, | 16 | +const connect = mongoose |
17 | - { | 17 | + .connect(config.url, { |
18 | useNewUrlParser: true, | 18 | useNewUrlParser: true, |
19 | - useUnifiedTopology: true, | 19 | + useUnifiedTopology: true |
20 | }) | 20 | }) |
21 | .then(() => console.log("DB : Succesfully Connected")) | 21 | .then(() => console.log("DB : Succesfully Connected")) |
22 | .catch((err) => console.log(err.message)); | 22 | .catch((err) => console.log(err.message)); |
23 | var express = require('express'); | 23 | var express = require('express'); |
24 | -const { Subinfo } = require('./models/model'); | 24 | +const {Subinfo} = require('./DB_collect/models/model'); |
25 | 25 | ||
26 | ID_data_array = [] | 26 | ID_data_array = [] |
27 | 27 | ||
28 | app.post('/hook', function (req, res) { | 28 | app.post('/hook', function (req, res) { |
29 | 29 | ||
30 | - var eventObj = req.body.events[0]; | 30 | + var eventObj = req |
31 | + .body | ||
32 | + .events[0]; | ||
31 | var source = eventObj.source; | 33 | var source = eventObj.source; |
32 | var message = eventObj.message; | 34 | var message = eventObj.message; |
33 | 35 | ||
34 | var user_ID = eventObj.source['userId'] | 36 | var user_ID = eventObj.source['userId'] |
35 | var data = eventObj.message['text'] | 37 | var data = eventObj.message['text'] |
36 | - if (ID_data_array.length == 0) { | 38 | + |
37 | - ID_data_array.push([user_ID]) | 39 | + var found = false; |
38 | - ID_data_array[0].push(data) | 40 | + if (data == '추천') { |
39 | - } | 41 | + |
40 | - else { | ||
41 | - var find = 0 | ||
42 | for (var i in ID_data_array) { | 42 | for (var i in ID_data_array) { |
43 | if (ID_data_array[i][0] == user_ID) { | 43 | if (ID_data_array[i][0] == user_ID) { |
44 | - find = 1 | 44 | + if (ID_data_array[i].length == 5) { |
45 | - if (ID_data_array[i].length < 5) { | ||
46 | - ID_data_array[i].push(data) | ||
47 | - } | ||
48 | - else { | ||
49 | - ID_data_array[i] = [user_ID]; | ||
50 | - ID_data_array[i].push(data); | ||
51 | - } | ||
52 | - } | ||
53 | - } | ||
54 | - if (find == 0) { | ||
55 | - ID_data_array.push([user_ID]); | ||
56 | - ID_data_array[ID_data_array.length - 1].push(data); | ||
57 | - } | ||
58 | - } | ||
59 | 45 | ||
60 | - // request log | 46 | + var campusinfo = ID_data_array[i][1] |
61 | - console.log('======================', new Date(), '======================'); | 47 | + var collegeinfo = ID_data_array[i][2] |
62 | - console.log('[request]', req.body); | 48 | + var departmentinfo = ID_data_array[i][3] |
63 | - console.log('[request source] ', eventObj.source); | 49 | + var gradeinfo = ID_data_array[i][4] |
64 | - console.log('[request message]', eventObj.message); | ||
65 | 50 | ||
66 | - console.log(ID_data_array) | 51 | + var name = [] |
67 | - for (var i in ID_data_array) { | 52 | + var time = [] |
68 | - console.log(ID_data_array[i]) | 53 | + var prof = [] |
69 | - } | 54 | + var credit = [] |
70 | 55 | ||
71 | - for (var i in ID_data_array) { | 56 | + Subinfo |
72 | - if (ID_data_array[i][0] == user_ID) { | 57 | + .find( |
73 | - if (ID_data_array[i].length == 5) { | 58 | + {campus: `${campusinfo}`, college: `${collegeinfo}`, department: `${departmentinfo}`, grade: `${gradeinfo}`} |
74 | - | 59 | + ) |
75 | - var campusinfo = ID_data_array[i][1] | 60 | + .then((sub) => { |
76 | - var collegeinfo = ID_data_array[i][2] | 61 | + if (sub) { |
77 | - var departmentinfo = ID_data_array[i][3] | 62 | + for (var i in sub) { |
78 | - var gradeinfo = ID_data_array[i][4] | 63 | + if (sub[i]['subject'].length == 0) { |
79 | - | 64 | + continue |
80 | - var name = [] | 65 | + } |
81 | - var time = [] | ||
82 | - var prof = [] | ||
83 | - var credit = [] | ||
84 | - | ||
85 | - Subinfo.find({ campus: `${campusinfo}`, college: `${collegeinfo}`, department: `${departmentinfo}`, grade: `${gradeinfo}` }).then((sub) => { | ||
86 | - if (sub) { | ||
87 | - console.log(sub) | ||
88 | - for (var i in sub) { | ||
89 | - if (sub[i]['subject'].length == 0) { | ||
90 | - continue | ||
91 | - } | ||
92 | 66 | ||
93 | - if (sub[i]['choice'] == '필수') { | 67 | + if (sub[i]['choice'] == '필수') { |
94 | - name.push(sub[i]['name']) | 68 | + name.push(sub[i]['name']) |
95 | - credit.push(sub[i]['credit']) | 69 | + credit.push(sub[i]['credit']) |
96 | 70 | ||
97 | - var random_num = (Math.floor(Math.random() * (sub[i]['subject'].length))) | 71 | + var random_num = (Math.floor(Math.random() * (sub[i]['subject'].length))) |
98 | 72 | ||
99 | - if (time.length > 0) { | 73 | + if (time.length > 0) { |
100 | - while (true) { | 74 | + while (true) { |
101 | - try { | 75 | + try { |
102 | - var tmp = 0 | 76 | + var tmp = 0 |
103 | - var random_num = (Math.floor(Math.random() * (sub[i]['subject'].length))) | 77 | + var random_num = (Math.floor(Math.random() * (sub[i]['subject'].length))) |
104 | 78 | ||
105 | - for (var j in time) { | 79 | + for (var j in time) { |
106 | - if (time[j].slice(0, 1) == sub[i]['subject'][random_num]['time'].slice(0, 1)) { | 80 | + if (time[j].slice(0, 1) == sub[i]['subject'][random_num]['time'].slice(0, 1)) { |
107 | - var tmp_time1 = Number(`${time[j].slice(2, 4) + '.' + time[j].slice(5, 7)}`) | 81 | + var tmp_time1 = Number(`${time[j].slice(2, 4) + '.' + time[j].slice(5, 7)}`) |
108 | - var tmp_time2 = Number(`${time[j].slice(8, 10) + '.' + time[j].slice(11, 13)}`) | 82 | + var tmp_time2 = Number(`${time[j].slice(8, 10) + '.' + time[j].slice(11, 13)}`) |
109 | - var tmp_time3 = Number(`${sub[i]['subject'][random_num]['time'].slice(2, 4) + '.' + sub[i]['subject'][random_num]['time'].slice(5, 7)}`) | 83 | + var tmp_time3 = Number( |
84 | + `${sub[i]['subject'][random_num]['time'].slice(2, 4) + '.' + sub[i]['subject'][random_num]['time'].slice( | ||
85 | + 5, | ||
86 | + 7 | ||
87 | + )}` | ||
88 | + ) | ||
110 | 89 | ||
111 | - if (tmp_time3 >= tmp_time1 & tmp_time3 <= tmp_time2) { | 90 | + if (tmp_time3 >= tmp_time1 & tmp_time3 <= tmp_time2) { |
112 | - tmp = 1 | 91 | + tmp = 1 |
92 | + break | ||
93 | + } | ||
94 | + } | ||
95 | + } | ||
96 | + if (tmp == 0) { | ||
113 | break | 97 | break |
114 | } | 98 | } |
99 | + } catch (err) { | ||
100 | + console.error(err); | ||
115 | } | 101 | } |
116 | } | 102 | } |
117 | - if (tmp == 0) { | ||
118 | - break | ||
119 | - } | ||
120 | - } | ||
121 | - catch (err) { | ||
122 | - console.error(err); | ||
123 | } | 103 | } |
104 | + time.push(sub[i]['subject'][random_num]['time']) | ||
105 | + prof.push(sub[i]['subject'][random_num]['prof']) | ||
124 | } | 106 | } |
125 | } | 107 | } |
126 | - time.push(sub[i]['subject'][random_num]['time']) | 108 | + } else { |
127 | - prof.push(sub[i]['subject'][random_num]['prof']) | 109 | + console.log(err) |
110 | + } | ||
111 | + var message_array = [] | ||
112 | + | ||
113 | + var result_split = [] | ||
114 | + for (var i in name) { | ||
115 | + result_split[i] = '\n'; | ||
116 | + var splitname = time[i].split('<br>') | ||
117 | + for (var j in splitname) { | ||
118 | + if (j != splitname.length - 1) { | ||
119 | + result_split[i] += (splitname[j] + '\n'); | ||
120 | + } else { | ||
121 | + result_split[i] += splitname[j]; | ||
122 | + } | ||
123 | + } | ||
124 | + var message_json = { | ||
125 | + 'type': 'text', | ||
126 | + 'text': `${ '과목명: ' + name[i] + '\n강의 시간:' + result_split[i] + '\n교수님: ' + prof[i] + '' + | ||
127 | + '\n학점: ' + credit[i]}` | ||
128 | + } | ||
129 | + message_array.push(message_json) | ||
130 | + } | ||
131 | + if (message_array.length == 0) { | ||
132 | + message_array = [ | ||
133 | + { | ||
134 | + 'type': 'text', | ||
135 | + 'text': '입력과정에서 오류가 있습니다. \'시작\'을 입력해주세요.' | ||
136 | + } | ||
137 | + ] | ||
138 | + } else { | ||
139 | + message_array[message_array.length - 1] = { | ||
140 | + 'type': 'text', | ||
141 | + 'text': `${ '과목명: ' + name[name.length - 1] + '\n강의 시간: ' + result_split[result_split.length - 1] + | ||
142 | + '\n교수님: ' + prof[prof.length - 1] + '\n학점: ' + credit[credit.length - 1] + '\n' + | ||
143 | + '\n만약 다른 추천을 원하면 \'추천\'을 입력해주세요.\n처음 입력으로 돌아가고 싶으시면 \'시작\'을 입력해주세요'}` | ||
144 | + } | ||
145 | + } | ||
146 | + | ||
147 | + request.post({ | ||
148 | + url: TARGET_URL, | ||
149 | + headers: { | ||
150 | + 'Authorization': `Bearer ${TOKEN}` | ||
151 | + }, | ||
152 | + | ||
153 | + json: { | ||
154 | + "replyToken": eventObj.replyToken, | ||
155 | + "messages": message_array | ||
156 | + } | ||
157 | + }, (error, response, body) => { | ||
158 | + console.log(body) | ||
159 | + }); | ||
160 | + }) | ||
161 | + } | ||
162 | + break | ||
163 | + } | ||
164 | + } | ||
165 | + } else { | ||
166 | + if (data == '다시') { | ||
167 | + for (var i in ID_data_array) { | ||
168 | + if (ID_data_array[i][0] == user_ID) { | ||
169 | + ID_data_array[i] = [user_ID]; | ||
170 | + } | ||
171 | + } | ||
172 | + } else { | ||
173 | + if (data != '시작') { | ||
174 | + if (ID_data_array.length == 0) { | ||
175 | + ID_data_array.push([user_ID]) | ||
176 | + ID_data_array[0].push(data) | ||
177 | + } else { | ||
178 | + var find = 0 | ||
179 | + for (var i in ID_data_array) { | ||
180 | + if (ID_data_array[i][0] == user_ID) { | ||
181 | + find = 1 | ||
182 | + if (ID_data_array[i].length < 5) { | ||
183 | + ID_data_array[i].push(data) | ||
184 | + } else { | ||
185 | + ID_data_array[i] = [user_ID]; | ||
186 | + ID_data_array[i].push(data); | ||
128 | } | 187 | } |
129 | } | 188 | } |
130 | } | 189 | } |
131 | - else { | 190 | + if (find == 0) { |
132 | - console.log(err) | 191 | + ID_data_array.push([user_ID]); |
192 | + ID_data_array[ID_data_array.length - 1].push(data); | ||
133 | } | 193 | } |
194 | + } | ||
195 | + | ||
196 | + // request log | ||
197 | + console.log('======================', new Date(), '======================'); | ||
198 | + console.log('[request]', req.body); | ||
199 | + console.log('[request source] ', eventObj.source); | ||
200 | + console.log('[request message]', eventObj.message); | ||
201 | + | ||
202 | + for (var i in ID_data_array) { | ||
203 | + console.log(ID_data_array[i]) | ||
204 | + } | ||
134 | 205 | ||
135 | - var message_array = [] | 206 | + for (var i in ID_data_array) { |
207 | + if (ID_data_array[i][0] == user_ID) { | ||
208 | + if (ID_data_array[i].length == 5) { | ||
209 | + | ||
210 | + var campusinfo = ID_data_array[i][1] | ||
211 | + var collegeinfo = ID_data_array[i][2] | ||
212 | + var departmentinfo = ID_data_array[i][3] | ||
213 | + var gradeinfo = ID_data_array[i][4] | ||
214 | + | ||
215 | + var name = [] | ||
216 | + var time = [] | ||
217 | + var prof = [] | ||
218 | + var credit = [] | ||
219 | + | ||
220 | + Subinfo | ||
221 | + .find( | ||
222 | + {campus: `${campusinfo}`, college: `${collegeinfo}`, department: `${departmentinfo}`, grade: `${gradeinfo}`} | ||
223 | + ) | ||
224 | + .then((sub) => { | ||
225 | + if (sub) { | ||
226 | + for (var i in sub) { | ||
227 | + if (sub[i]['subject'].length == 0) { | ||
228 | + continue | ||
229 | + } | ||
136 | 230 | ||
137 | - for (var i in name) { | 231 | + if (sub[i]['choice'] == '필수') { |
138 | - var message_json = { | 232 | + name.push(sub[i]['name']) |
139 | - 'type': 'text', | 233 | + credit.push(sub[i]['credit']) |
140 | - 'text': `${'과목명: ' + name[i] + '\n' + '강의 시간: ' + time[i] + '\n' + '교수님: ' + prof[i] + '\n' + '학점: ' + credit[i]}` | 234 | + |
235 | + var random_num = (Math.floor(Math.random() * (sub[i]['subject'].length))) | ||
236 | + | ||
237 | + if (time.length > 0) { | ||
238 | + while (true) { | ||
239 | + try { | ||
240 | + var tmp = 0 | ||
241 | + var random_num = (Math.floor(Math.random() * (sub[i]['subject'].length))) | ||
242 | + | ||
243 | + for (var j in time) { | ||
244 | + if (time[j].slice(0, 1) == sub[i]['subject'][random_num]['time'].slice(0, 1)) { | ||
245 | + var tmp_time1 = Number(`${time[j].slice(2, 4) + '.' + time[j].slice(5, 7)}`) | ||
246 | + var tmp_time2 = Number(`${time[j].slice(8, 10) + '.' + time[j].slice(11, 13)}`) | ||
247 | + var tmp_time3 = Number( | ||
248 | + `${sub[i]['subject'][random_num]['time'].slice(2, 4) + '.' + sub[i]['subject'][random_num]['time'].slice( | ||
249 | + 5, | ||
250 | + 7 | ||
251 | + )}` | ||
252 | + ) | ||
253 | + | ||
254 | + if (tmp_time3 >= tmp_time1 & tmp_time3 <= tmp_time2) { | ||
255 | + tmp = 1 | ||
256 | + break | ||
257 | + } | ||
258 | + } | ||
259 | + } | ||
260 | + if (tmp == 0) { | ||
261 | + break | ||
262 | + } | ||
263 | + } catch (err) { | ||
264 | + console.error(err); | ||
265 | + } | ||
266 | + } | ||
267 | + } | ||
268 | + time.push(sub[i]['subject'][random_num]['time']) | ||
269 | + prof.push(sub[i]['subject'][random_num]['prof']) | ||
270 | + } | ||
271 | + } | ||
272 | + } else { | ||
273 | + console.log(err) | ||
274 | + } | ||
275 | + var message_array = [] | ||
276 | + | ||
277 | + var result_split = [] | ||
278 | + for (var i in name) { | ||
279 | + result_split[i] = '\n'; | ||
280 | + var splitname = time[i].split('<br>') | ||
281 | + for (var j in splitname) { | ||
282 | + if (j != splitname.length - 1) { | ||
283 | + result_split[i] += (splitname[j] + '\n'); | ||
284 | + } else { | ||
285 | + result_split[i] += splitname[j]; | ||
286 | + } | ||
287 | + } | ||
288 | + var message_json = { | ||
289 | + 'type': 'text', | ||
290 | + 'text': `${ '과목명: ' + name[i] + '\n강의 시간:' + result_split[i] + '\n교수님: ' + prof[i] + '' + | ||
291 | + '\n학점: ' + credit[i]}` | ||
292 | + } | ||
293 | + message_array.push(message_json) | ||
294 | + } | ||
295 | + if (message_array.length == 0) { | ||
296 | + message_array = [ | ||
297 | + { | ||
298 | + 'type': 'text', | ||
299 | + 'text': '입력과정에서 오류가 있습니다. \'시작\'을 입력해주세요.' | ||
300 | + } | ||
301 | + ] | ||
302 | + } else { | ||
303 | + message_array[message_array.length - 1] = { | ||
304 | + 'type': 'text', | ||
305 | + 'text': `${ '과목명: ' + name[name.length - 1] + '\n강의 시간: ' + result_split[result_split.length - 1] + | ||
306 | + '\n교수님: ' + prof[prof.length - 1] + '\n학점: ' + credit[credit.length - 1] + '\n' + | ||
307 | + '\n만약 다른 추천을 원하면 \'추천\'을 입력해주세요.\n처음 입력으로 돌아가고 싶으시면 \'시작\'을 입력해주세요'}` | ||
308 | + } | ||
309 | + } | ||
310 | + | ||
311 | + request.post({ | ||
312 | + url: TARGET_URL, | ||
313 | + headers: { | ||
314 | + 'Authorization': `Bearer ${TOKEN}` | ||
315 | + }, | ||
316 | + | ||
317 | + json: { | ||
318 | + "replyToken": eventObj.replyToken, | ||
319 | + "messages": message_array | ||
320 | + } | ||
321 | + }, (error, response, body) => { | ||
322 | + console.log(body) | ||
323 | + }); | ||
324 | + }) | ||
141 | } | 325 | } |
142 | - message_array.push(message_json) | 326 | + break |
143 | - } | ||
144 | - if (message_array.length == 0) { | ||
145 | - message_array = [{ | ||
146 | - 'type': 'text', | ||
147 | - 'text': '입력과정에서 오류가 있습니다. \'시작\'을 입력해주세요.' | ||
148 | - }] | ||
149 | } | 327 | } |
328 | + } | ||
329 | + res.sendStatus(200); | ||
150 | 330 | ||
151 | - request.post( | ||
152 | - { | ||
153 | - url: TARGET_URL, | ||
154 | - headers: { | ||
155 | - 'Authorization': `Bearer ${TOKEN}` | ||
156 | - }, | ||
157 | - | ||
158 | - json: { | ||
159 | - "replyToken": eventObj.replyToken, | ||
160 | - "messages": message_array | ||
161 | - }, | ||
162 | - | ||
163 | - }, (error, response, body) => { | ||
164 | - console.log(body) | ||
165 | - }); | ||
166 | - }) | ||
167 | } | 331 | } |
168 | - break | ||
169 | } | 332 | } |
333 | + | ||
170 | } | 334 | } |
171 | - res.sendStatus(200); | 335 | + |
172 | }); | 336 | }); |
173 | 337 | ||
174 | try { | 338 | try { |
175 | const option = { | 339 | const option = { |
176 | - ca: fs.readFileSync('/etc/letsencrypt/live/' + domain + '/fullchain.pem'), | 340 | + ca: fs.readFileSync( |
177 | - key: fs.readFileSync(path.resolve(process.cwd(), '/etc/letsencrypt/live/' + domain + '/privkey.pem'), 'utf8').toString(), | 341 | + '/etc/letsencrypt/live/' + domain + '/fullchain.pem' |
178 | - cert: fs.readFileSync(path.resolve(process.cwd(), '/etc/letsencrypt/live/' + domain + '/cert.pem'), 'utf8').toString(), | 342 | + ), |
343 | + key: fs | ||
344 | + .readFileSync( | ||
345 | + path.resolve(process.cwd(), '/etc/letsencrypt/live/' + domain + '/privkey.pem'), | ||
346 | + 'utf8' | ||
347 | + ) | ||
348 | + .toString(), | ||
349 | + cert: fs | ||
350 | + .readFileSync( | ||
351 | + path.resolve(process.cwd(), '/etc/letsencrypt/live/' + domain + '/cert.pem'), | ||
352 | + 'utf8' | ||
353 | + ) | ||
354 | + .toString() | ||
179 | }; | 355 | }; |
180 | 356 | ||
181 | - HTTPS.createServer(option, app).listen(sslport, () => { | 357 | + HTTPS |
182 | - console.log(`[HTTPS] Server is started on port ${sslport}`); | 358 | + .createServer(option, app) |
183 | - }); | 359 | + .listen(sslport, () => { |
360 | + console.log(`[HTTPS] Server is started on port ${sslport}`); | ||
361 | + }); | ||
184 | } catch (error) { | 362 | } catch (error) { |
185 | console.log('[HTTPS] HTTPS 오류가 발생하였습니다. HTTPS 서버는 실행되지 않습니다.'); | 363 | console.log('[HTTPS] HTTPS 오류가 발생하였습니다. HTTPS 서버는 실행되지 않습니다.'); |
186 | console.log(error); | 364 | console.log(error); | ... | ... |
-
Please register or login to post a comment