From 5dcf015f99e3f074ce743b90614c46091d90aba4 Mon Sep 17 00:00:00 2001 From: chlehdwon Date: Wed, 6 Mar 2024 22:23:56 +0900 Subject: [PATCH 01/11] Fix: unify log convention --- src/modules/email.js | 9 ++++----- src/modules/fcm.js | 4 ++-- src/modules/stores/mongo.js | 6 +++--- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/src/modules/email.js b/src/modules/email.js index 68be50b8..4378639f 100644 --- a/src/modules/email.js +++ b/src/modules/email.js @@ -27,7 +27,7 @@ class NodemailerTransport { await this.#transporter.sendMail(mailOptions); return true; } catch (err) { - logger.error(err); + logger.error(`Failed to send email: ${err}`); return false; } } @@ -71,7 +71,7 @@ class MockNodemailerTransport { .catch((err) => { // 네트워크 오류 등으로 mock 메일 전송을 위한 agent 객체 생성에 실패했을 때 에러를 반환합니다. // sendMail 메서드가 다시 호출될 때 새로운 transporterPromise를 생성하기 위해 null로 초기화합니다. - logger.error("mock 메일 전송을 위한 agent 객체 생성에 실패했습니다."); + logger.error("Failed to create agent object for sending mock mail."); this.#transporterPromise = null; throw err; }); @@ -92,14 +92,13 @@ class MockNodemailerTransport { const transporter = await this.getTransporter(); const response = await transporter.sendMail(mailOptions); logger.info( - `mock 메일이 전송되었습니다. 미리보기 url: ${nodemailer.getTestMessageUrl( + `Mock mail sent successfully. Preview url: ${nodeEnv.getTestMessageUrl( response )}` ); return true; } catch (err) { - logger.error("메일 전송이 아래와 같은 사유로 실패했습니다: "); - logger.error(err); + logger.error(`Failed to send email: ${err}`); return false; } } diff --git a/src/modules/fcm.js b/src/modules/fcm.js index cf6a0433..a19bd004 100644 --- a/src/modules/fcm.js +++ b/src/modules/fcm.js @@ -18,7 +18,7 @@ const initializeApp = () => { }); } else { logger.error( - "Firebase 관련 credential이 존재하지 않습니다. FCM 관련 기능을 사용할 수 없습니다." + "There is no credential for Firebase. FCM functions are disabled." ); } }; @@ -111,7 +111,7 @@ const removeExpiredTokens = async (deviceTokens, fcmResponses) => { } return false; } catch (err) { - logger.info(err); + logger.error(err); return false; } }) diff --git a/src/modules/stores/mongo.js b/src/modules/stores/mongo.js index 695845fc..bf2a8c53 100755 --- a/src/modules/stores/mongo.js +++ b/src/modules/stores/mongo.js @@ -177,17 +177,17 @@ mongoose.set("strictQuery", true); const database = mongoose.connection; database.on("error", console.error.bind(console, "mongoose connection error.")); database.on("open", () => { - logger.info("데이터베이스와 연결되었습니다."); + logger.info("Connected to database"); }); database.on("error", function (err) { - logger.error("데이터베이스 연결 에러 발생: " + err); + logger.error("Database connection error occurred: " + err); mongoose.disconnect(); }); const connectDatabase = (mongoUrl) => { database.on("disconnected", function () { // 데이터베이스 연결이 끊어지면 5초 후 재연결을 시도합니다. - logger.error("데이터베이스와 연결이 끊어졌습니다!"); + logger.error("Disconnected from database!"); setTimeout(() => { mongoose.connect(mongoUrl, { useNewUrlParser: true, From 50f12f9a8d51f6e1d11445cd970a901689a430fa Mon Sep 17 00:00:00 2001 From: chlehdwon Date: Wed, 6 Mar 2024 23:07:49 +0900 Subject: [PATCH 02/11] Fix: email.js --- src/modules/email.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/email.js b/src/modules/email.js index 4378639f..024a62d7 100644 --- a/src/modules/email.js +++ b/src/modules/email.js @@ -92,7 +92,7 @@ class MockNodemailerTransport { const transporter = await this.getTransporter(); const response = await transporter.sendMail(mailOptions); logger.info( - `Mock mail sent successfully. Preview url: ${nodeEnv.getTestMessageUrl( + `Mock mail sent successfully. Preview url: ${nodemailer.getTestMessageUrl( response )}` ); From effcaa1575c923ef1644a68c639f2d5f790aef09 Mon Sep 17 00:00:00 2001 From: chlehdwon Date: Wed, 6 Mar 2024 23:08:51 +0900 Subject: [PATCH 03/11] Add: send no-show email --- src/services/reports.js | 6 +-- src/views/emailNoSettlementPage.js | 34 ------------ src/views/reportEmailPage.js | 86 ++++++++++++++++++++++++++++++ 3 files changed, 89 insertions(+), 37 deletions(-) delete mode 100644 src/views/emailNoSettlementPage.js create mode 100644 src/views/reportEmailPage.js diff --git a/src/services/reports.js b/src/services/reports.js index 900feec6..dbd30d53 100644 --- a/src/services/reports.js +++ b/src/services/reports.js @@ -6,7 +6,7 @@ const { const { reportPopulateOption } = require("../modules/populates/reports"); const { sendReportEmail } = require("../modules/email"); const logger = require("../modules/logger"); -const emailPage = require("../views/emailNoSettlementPage"); +const reportEmailPage = require("../views/reportEmailPage"); const { notifyReportToReportChannel } = require("../modules/slackNotification"); const createHandler = async (req, res) => { @@ -42,10 +42,10 @@ const createHandler = async (req, res) => { notifyReportToReportChannel(user.nickname, report); - if (report.type === "no-settlement") { + if (report.type === "no-settlement" || report.type === "no-show") { const emailRoomName = room ? room.name : ""; const emailRoomId = room ? room._id : ""; - const emailHtml = emailPage( + const emailHtml = reportEmailPage[report.type]( req.origin, reported.name, reported.nickname, diff --git a/src/views/emailNoSettlementPage.js b/src/views/emailNoSettlementPage.js deleted file mode 100644 index 5143c279..00000000 --- a/src/views/emailNoSettlementPage.js +++ /dev/null @@ -1,34 +0,0 @@ -const emailPage = require("./emailPage"); - -module.exports = (origin, name, nickname, roomName, payer, roomId) => - emailPage( - "미정산 내역 관련 안내", - `${name} (${nickname}) 님께

- 안녕하세요, ${name} (${nickname}) 님.
- KAIST 학부 총학생회 산하 특별기구 SPARCS의 Taxi 팀입니다.

- 최근 참여하신 방에서 정산이 이루어지지 않았다는 사용자의 문의가 접수되어 메일을 보내드립니다.

-
-
- 방 제목 - ${roomName} -
-
- 결제자 - ${payer} -
-
- 링크 - ${new URL(`/myroom/${roomId}`, origin).href} -
-

- 위 방에서 채팅을 확인하실 수 있으며, 결제하신 분께 해당 금액을 정산해주시기를 부탁드립니다.
- 미정산이 반복되는 경우 Taxi 서비스 이용이 제한될 수 있음을 알려드립니다.
- 문의가 필요하신 경우, 택시 서비스 내부의 "채널톡 문의하기" 혹은 메일 회신 주시면 됩니다.

- 감사합니다.
- SPARCS Taxi팀 드림. - ` - ); diff --git a/src/views/reportEmailPage.js b/src/views/reportEmailPage.js new file mode 100644 index 00000000..56f6aa3b --- /dev/null +++ b/src/views/reportEmailPage.js @@ -0,0 +1,86 @@ +const emailPage = require("./emailPage"); + +const reportEmailPage = {}; + +/* 미정산 알림 메일을 위한 템플릿 */ +reportEmailPage["no-settlement"] = ( + origin, + name, + nickname, + roomName, + payer, + roomId +) => + emailPage( + "미정산 내역 관련 안내", + `${name} (${nickname}) 님께

+ 안녕하세요, ${name} (${nickname}) 님.
+ KAIST 학부 총학생회 산하 특별기구 SPARCS의 Taxi 팀입니다.

+ 최근 참여하신 방에서 정산이 이루어지지 않았다는 사용자의 문의가 접수되어 메일을 보내드립니다.

+
+
+ 방 제목 + ${roomName} +
+
+ 결제자 + ${payer} +
+
+ 링크 + ${ + new URL(`/myroom/${roomId}`, origin).href + } +
+

+ 위 방에서 채팅을 확인하실 수 있으며, 결제하신 분께 해당 금액을 정산해주시기를 부탁드립니다.
+ 미정산이 반복되는 경우 Taxi 서비스 이용이 제한될 수 있음을 알려드립니다.
+ 문의가 필요하신 경우, 택시 서비스 내부의 "채널톡 문의하기" 혹은 메일 회신 주시면 됩니다.

+ 감사합니다.
+ SPARCS Taxi팀 드림. + ` + ); + +/* 미탑승 알림 메일을 위한 템플릿 */ +reportEmailPage["no-show"] = ( + origin, + name, + nickname, + roomName, + payer, + roomId +) => + emailPage( + "미동승 내역 관련 안내", + `${name} (${nickname}) 님께

+ 안녕하세요, ${name} (${nickname}) 님.
+ KAIST 학부 총학생회 산하 특별기구 SPARCS의 Taxi 팀입니다.

+ 최근 참여하신 방에서 별도의 연락 없이 동승하지 않았다는 사용자의 문의가 접수되어 메일을 보내드립니다.

+
+
+ 방 제목 + ${roomName} +
+
+ 결제자 + ${payer} +
+
+ 링크 + ${new URL(`/myroom/${roomId}`, origin).href} +
+

+ 미탑승이 반복되는 경우 Taxi 서비스 이용이 제한될 수 있음을 알려드립니다.
+ 문의가 필요하신 경우, 택시 서비스 내부의 "채널톡 문의하기" 혹은 메일 회신 주시면 됩니다.

+ 감사합니다.
+ SPARCS Taxi팀 드림. + ` + ); + +module.exports = reportEmailPage; From a7012f4ed20945f469791c9af391b1f87cbd92ef Mon Sep 17 00:00:00 2001 From: chlehdwon Date: Sat, 16 Mar 2024 15:00:10 +0900 Subject: [PATCH 04/11] Fix: change from svg to png --- src/views/emailPage.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/views/emailPage.js b/src/views/emailPage.js index d99dafd1..f41122a4 100644 --- a/src/views/emailPage.js +++ b/src/views/emailPage.js @@ -7,7 +7,7 @@ module.exports = (
Taxi
${ @@ -18,7 +18,7 @@ module.exports = (
${content}
SPARCS
From 274b0a97bfa6da31c1c30e36b8e0e458ba450550 Mon Sep 17 00:00:00 2001 From: chlehdwon Date: Sat, 16 Mar 2024 15:00:47 +0900 Subject: [PATCH 05/11] Refactor: change no-show email content --- src/views/reportEmailPage.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/views/reportEmailPage.js b/src/views/reportEmailPage.js index 56f6aa3b..67865381 100644 --- a/src/views/reportEmailPage.js +++ b/src/views/reportEmailPage.js @@ -36,8 +36,8 @@ reportEmailPage["no-settlement"] = ( 위 방에서 채팅을 확인하실 수 있으며, 결제하신 분께 해당 금액을 정산해주시기를 부탁드립니다.
미정산이 반복되는 경우 Taxi 서비스 이용이 제한될 수 있음을 알려드립니다.
문의가 필요하신 경우,
택시 서비스 내부의 "채널톡 문의하기" 혹은 메일 회신 주시면 됩니다.

+ new URL("/mypage?channeltalk=true", origin).href + }" target="_blank">택시 서비스 내부의 "채널톡 문의하기" 혹은 메일 보내주시기 바랍니다.

감사합니다.
SPARCS Taxi팀 드림. ` @@ -53,11 +53,11 @@ reportEmailPage["no-show"] = ( roomId ) => emailPage( - "미동승 내역 관련 안내", + "미탑승 내역 관련 안내", `${name} (${nickname}) 님께

안녕하세요, ${name} (${nickname}) 님.
KAIST 학부 총학생회 산하 특별기구 SPARCS의 Taxi 팀입니다.

- 최근 참여하신 방에서 별도의 연락 없이 동승하지 않았다는 사용자의 문의가 접수되어 메일을 보내드립니다.

+ 최근 참여하신 방에서 별도의 연락 없이 탑승하지 않았다는 사용자의 문의가 접수되어 메일을 보내드립니다.

방 제목 @@ -76,8 +76,8 @@ reportEmailPage["no-show"] = (

미탑승이 반복되는 경우 Taxi 서비스 이용이 제한될 수 있음을 알려드립니다.
문의가 필요하신 경우, 택시 서비스 내부의 "채널톡 문의하기" 혹은 메일 회신 주시면 됩니다.

+ new URL("/mypage?channeltalk=true", origin).href + }" target="_blank">택시 서비스 내부의 "채널톡 문의하기" 혹은 메일 보내주시기 바랍니다.

감사합니다.
SPARCS Taxi팀 드림. ` From 65fc3ccda0fc557b7b6d9347757ee90f27cdd573 Mon Sep 17 00:00:00 2001 From: chlehdwon Date: Sat, 16 Mar 2024 15:06:40 +0900 Subject: [PATCH 06/11] Fix: app.js log --- app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app.js b/app.js index 7f862f8a..db9773dc 100644 --- a/app.js +++ b/app.js @@ -77,7 +77,7 @@ app.use(require("./src/middlewares/errorHandler")); const serverHttp = http .createServer(app) .listen(httpPort, () => - logger.info(`Express 서버가 ${httpPort}번 포트에서 시작됨.`) + logger.info(`Express server started from port ${httpPort}`) ); // socket.io 서버 시작 From d4210e5d0e56758da9d91da12b4b0ef2f89c2c9e Mon Sep 17 00:00:00 2001 From: chlehdwon Date: Sun, 17 Mar 2024 15:38:16 +0900 Subject: [PATCH 07/11] Fix: reply statement in reportEmailPage.js --- src/views/reportEmailPage.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/views/reportEmailPage.js b/src/views/reportEmailPage.js index 67865381..1ee674f8 100644 --- a/src/views/reportEmailPage.js +++ b/src/views/reportEmailPage.js @@ -37,7 +37,7 @@ reportEmailPage["no-settlement"] = ( 미정산이 반복되는 경우 Taxi 서비스 이용이 제한될 수 있음을 알려드립니다.
문의가 필요하신 경우, 택시 서비스 내부의 "채널톡 문의하기" 혹은 메일 보내주시기 바랍니다.

+ }" target="_blank">택시 서비스 내부의 "채널톡 문의하기"를 통해 채팅을 남겨주시거나, 또는 이 메일에 회신해 주셔도 됩니다.

감사합니다.
SPARCS Taxi팀 드림. ` @@ -77,7 +77,7 @@ reportEmailPage["no-show"] = ( 미탑승이 반복되는 경우 Taxi 서비스 이용이 제한될 수 있음을 알려드립니다.
문의가 필요하신 경우, 택시 서비스 내부의 "채널톡 문의하기" 혹은 메일 보내주시기 바랍니다.

+ }" target="_blank">택시 서비스 내부의 "채널톡 문의하기"를 통해 채팅을 남겨주시거나, 또는 이 메일에 회신해 주셔도 됩니다.

감사합니다.
SPARCS Taxi팀 드림. ` From 4fdfe2c884f4312e94ee39f34e89cd107484fd72 Mon Sep 17 00:00:00 2001 From: chlehdwon Date: Tue, 19 Mar 2024 21:26:23 +0900 Subject: [PATCH 08/11] Add: cc in sendMail --- src/modules/email.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/modules/email.js b/src/modules/email.js index 9350981d..8f5ee5ce 100644 --- a/src/modules/email.js +++ b/src/modules/email.js @@ -128,6 +128,7 @@ const sendReportEmail = async (reportedEmail, report, html) => { return transporter.sendMail({ from: "taxi@sparcs.org", + cc: "taxi@sparcs.org", to: reportedEmail, subject: `[SPARCS TAXI] 신고가 접수되었습니다 (사유: ${ reportTypeMap[report.type] From 9cbbc587db826aeb091ed04de55c185fa54252cf Mon Sep 17 00:00:00 2001 From: chlehdwon Date: Tue, 19 Mar 2024 22:04:50 +0900 Subject: [PATCH 09/11] Remove: rollback cc --- src/modules/email.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/modules/email.js b/src/modules/email.js index 8f5ee5ce..9350981d 100644 --- a/src/modules/email.js +++ b/src/modules/email.js @@ -128,7 +128,6 @@ const sendReportEmail = async (reportedEmail, report, html) => { return transporter.sendMail({ from: "taxi@sparcs.org", - cc: "taxi@sparcs.org", to: reportedEmail, subject: `[SPARCS TAXI] 신고가 접수되었습니다 (사유: ${ reportTypeMap[report.type] From f38fe5ba91a7a6b4fac2260fa90a587f08e6280d Mon Sep 17 00:00:00 2001 From: static Date: Fri, 22 Mar 2024 17:25:25 +0900 Subject: [PATCH 10/11] Fix: the icon not displayed in fcm notification --- src/modules/socket.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/modules/socket.js b/src/modules/socket.js index 07806ef4..c238ce64 100644 --- a/src/modules/socket.js +++ b/src/modules/socket.js @@ -4,7 +4,6 @@ const sessionMiddleware = require("../middlewares/session"); const logger = require("./logger"); const { getLoginInfo } = require("./auths/login"); const { roomModel, userModel, chatModel } = require("./stores/mongo"); -const { getS3Url } = require("./stores/aws"); const { getTokensOfUsers, sendMessageByTokens } = require("./fcm"); const { corsWhiteList } = require("../../loadenv"); @@ -195,7 +194,7 @@ const emitChatEvent = async (io, chat) => { type, name, getMessageBody(type, nickname, content), - getS3Url(`/profile-img/${profileImageUrl}`), + profileImageUrl, `/myroom/${roomId}` ); From 591f92227d47605cf30b3ce8ea373607736f32a0 Mon Sep 17 00:00:00 2001 From: static Date: Wed, 27 Mar 2024 00:11:54 +0900 Subject: [PATCH 11/11] Remove: the default value of eventConfig in loadenv.js --- loadenv.js | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/loadenv.js b/loadenv.js index fa183b8b..438b6f01 100644 --- a/loadenv.js +++ b/loadenv.js @@ -43,16 +43,5 @@ module.exports = { slackWebhookUrl: { report: process.env.SLACK_REPORT_WEBHOOK_URL || "", // optional }, - eventConfig: (process.env.EVENT_CONFIG && - JSON.parse(process.env.EVENT_CONFIG)) || { - mode: "2024spring", - credit: { - name: "넙죽코인", - initialAmount: 0, - }, - period: { - startAt: "2024-02-23T00:00:00+09:00", - endAt: "2024-03-19T00:00:00+09:00", - }, - }, // optional + eventConfig: process.env.EVENT_CONFIG && JSON.parse(process.env.EVENT_CONFIG), // optional };