곽병민

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);
......