Skip to content

Commit 9cfa9dc

Browse files
committed
Merge branch 'dev' into #159-add-typescript-support
2 parents 2a32d96 + 64c0baf commit 9cfa9dc

File tree

9 files changed

+103
-62
lines changed

9 files changed

+103
-62
lines changed

src/index.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ app.use(errorHandler);
9393
const serverHttp = http
9494
.createServer(app)
9595
.listen(httpPort, () =>
96-
logger.info(`Express 서버가 ${httpPort}번 포트에서 시작됨.`)
96+
logger.info(`Express server started from port ${httpPort}`)
9797
);
9898

9999
// socket.io 서버 시작

src/modules/email.js

+4-5
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ class NodemailerTransport {
3131
await this.#transporter.sendMail(mailOptions);
3232
return true;
3333
} catch (err) {
34-
logger.error(err);
34+
logger.error(`Failed to send email: ${err}`);
3535
return false;
3636
}
3737
}
@@ -75,7 +75,7 @@ class MockNodemailerTransport {
7575
.catch((err) => {
7676
// 네트워크 오류 등으로 mock 메일 전송을 위한 agent 객체 생성에 실패했을 때 에러를 반환합니다.
7777
// sendMail 메서드가 다시 호출될 때 새로운 transporterPromise를 생성하기 위해 null로 초기화합니다.
78-
logger.error("mock 메일 전송을 위한 agent 객체 생성에 실패했습니다.");
78+
logger.error("Failed to create agent object for sending mock mail.");
7979
this.#transporterPromise = null;
8080
throw err;
8181
});
@@ -96,14 +96,13 @@ class MockNodemailerTransport {
9696
const transporter = await this.getTransporter();
9797
const response = await transporter.sendMail(mailOptions);
9898
logger.info(
99-
`mock 메일이 전송되었습니다. 미리보기 url: ${nodemailer.getTestMessageUrl(
99+
`Mock mail sent successfully. Preview url: ${nodemailer.getTestMessageUrl(
100100
response
101101
)}`
102102
);
103103
return true;
104104
} catch (err) {
105-
logger.error("메일 전송이 아래와 같은 사유로 실패했습니다: ");
106-
logger.error(err);
105+
logger.error(`Failed to send email: ${err}`);
107106
return false;
108107
}
109108
}

src/modules/fcm.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ export const initializeApp = () => {
1919
});
2020
} else {
2121
logger.error(
22-
"Firebase 관련 credential이 존재하지 않습니다. FCM 관련 기능을 사용할 수 없습니다."
22+
"There is no credential for Firebase. FCM functions are disabled."
2323
);
2424
}
2525
};
@@ -116,7 +116,7 @@ const removeExpiredTokens = async (
116116
}
117117
return false;
118118
} catch (err) {
119-
logger.info(err);
119+
logger.error(err);
120120
return false;
121121
}
122122
})

src/modules/socket.js

+1-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ const sessionMiddleware = require("@/middlewares/session").default;
44
const logger = require("@/modules/logger").default;
55
const { getLoginInfo } = require("@/modules/auths/login");
66
const { roomModel, userModel, chatModel } = require("@/modules/stores/mongo");
7-
const { getS3Url } = require("@/modules/stores/aws");
87
const { getTokensOfUsers, sendMessageByTokens } = require("@/modules/fcm");
98

109
const { corsWhiteList } = require("@/loadenv");
@@ -195,7 +194,7 @@ const emitChatEvent = async (io, chat) => {
195194
type,
196195
name,
197196
getMessageBody(type, nickname, content),
198-
getS3Url(`/profile-img/${profileImageUrl}`),
197+
profileImageUrl,
199198
`/myroom/${roomId}`
200199
);
201200

src/modules/stores/mongo.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -217,17 +217,17 @@ mongoose.set("strictQuery", true);
217217
const database = mongoose.connection;
218218
database.on("error", console.error.bind(console, "mongoose connection error."));
219219
database.on("open", () => {
220-
logger.info("데이터베이스와 연결되었습니다.");
220+
logger.info("Connected to database");
221221
});
222222
database.on("error", function (err) {
223-
logger.error("데이터베이스 연결 에러 발생: " + err);
223+
logger.error("Database connection error occurred: " + err);
224224
mongoose.disconnect();
225225
});
226226

227227
export const connectDatabase = (mongoUrl: string) => {
228228
database.on("disconnected", function () {
229229
// 데이터베이스 연결이 끊어지면 5초 후 재연결을 시도합니다.
230-
logger.error("데이터베이스와 연결이 끊어졌습니다!");
230+
logger.error("Disconnected from database!");
231231
setTimeout(() => {
232232
mongoose.connect(
233233
mongoUrl /*{

src/services/reports.js

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
const { userModel, reportModel, roomModel } = require("@/modules/stores/mongo");
22
const { reportPopulateOption } = require("@/modules/populates/reports");
3-
const { sendReportEmail } = require("@/modules/stores/aws");
3+
const { sendReportEmail } = require("@/modules/email");
44
const logger = require("@/modules/logger").default;
5-
const emailPage = require("@/views/emailNoSettlementPage").default;
5+
const reportEmailPage = require("@/views/reportEmailPage");
66
const { notifyReportToReportChannel } = require("@/modules/slackNotification");
77

88
const createHandler = async (req, res) => {
@@ -38,10 +38,10 @@ const createHandler = async (req, res) => {
3838

3939
notifyReportToReportChannel(user.nickname, report);
4040

41-
if (report.type === "no-settlement") {
41+
if (report.type === "no-settlement" || report.type === "no-show") {
4242
const emailRoomName = room ? room.name : "";
4343
const emailRoomId = room ? room._id : "";
44-
const emailHtml = emailPage(
44+
const emailHtml = reportEmailPage[report.type](
4545
req.origin,
4646
reported.name,
4747
reported.nickname,

src/views/emailNoSettlementPage.ts

-43
This file was deleted.

src/views/emailPage.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ const emailPage = (
77
<div style="width: max(min(100%, 800px), 320px); margin: 0 auto; padding 0;">
88
<div style="height: 102px; background: #6E3678; margin: 0 0 48px; padding: 0;">
99
<img style="height: 54px; margin: 24px 32px; padding: 0;" src="${getS3Url(
10-
"/assets/email-taxi-logo-white.svg"
10+
"/assets/email-taxi-logo-white.png"
1111
)}" alt="Taxi" />
1212
</div>
1313
${
@@ -18,7 +18,7 @@ const emailPage = (
1818
<div style="font-family: system-ui; line-height: 160%; letter-spacing: 0px; font-size: 16px; font-weight: regular; color: #000000; margin: 0; padding: 0;">${content}</div>
1919
<div style="border-top: 2px solid #999999; text-align: center; margin: 120px 0 0; padding: 24px 0 0;">
2020
<img style="height: 54px; margin: 0; padding: 0;" src="${getS3Url(
21-
"/assets/email-sparcs-logo-black.svg"
21+
"/assets/email-sparcs-logo-black.png"
2222
)}" alt="SPARCS" />
2323
<a href="https://www.sparcs.org" target="_blank">
2424
<div style="margin: 0; padding: 0;">

src/views/reportEmailPage.js

+86
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
const emailPage = require("./emailPage").default;
2+
3+
const reportEmailPage = {};
4+
5+
/* 미정산 알림 메일을 위한 템플릿 */
6+
reportEmailPage["no-settlement"] = (
7+
origin,
8+
name,
9+
nickname,
10+
roomName,
11+
payer,
12+
roomId
13+
) =>
14+
emailPage(
15+
"미정산 내역 관련 안내",
16+
`<b><font color="#6E3678">${name} (${nickname})</font></b> 님께<br /><br />
17+
안녕하세요, ${name} (${nickname}) 님.<br />
18+
KAIST 학부 총학생회 산하 특별기구 SPARCS의 Taxi 팀입니다.<br /><br />
19+
최근 참여하신 방에서 정산이 이루어지지 않았다는 사용자의 문의가 접수되어 메일을 보내드립니다.<br /><br />
20+
<div style="background: #EEEEEE; border-radius: 20px; margin: padding: 16px 24px; padding: 16px 24px; ">
21+
<div style="margin: 0; padding: 0;">
22+
<span style="width: 64px; display: inline-block;"><b>방 제목</b></span>
23+
${roomName}
24+
</div>
25+
<div style="margin: 0; padding: 0;">
26+
<span style="width: 64px; display: inline-block;"><b>결제자</b></span>
27+
${payer}
28+
</div>
29+
<div style="margin: 0; padding: 0;">
30+
<span style="width: 64px; display: inline-block;"><b>링크</b></span>
31+
<a href="${new URL(`/myroom/${roomId}`, origin).href}" target="_blank">${
32+
new URL(`/myroom/${roomId}`, origin).href
33+
}</a>
34+
</div>
35+
</div><br />
36+
위 방에서 채팅을 확인하실 수 있으며, <b>결제하신 분께 해당 금액을 정산</b>해주시기를 부탁드립니다.<br />
37+
<b>미정산이 반복되는 경우 Taxi 서비스 이용이 제한</b>될 수 있음을 알려드립니다.<br />
38+
문의가 필요하신 경우, <a href="${
39+
new URL("/mypage?channeltalk=true", origin).href
40+
}" target="_blank">택시 서비스 내부</a>의 &quot;채널톡 문의하기&quot;를 통해 채팅을 남겨주시거나, 또는 이 메일에 회신해 주셔도 됩니다.<br /><br />
41+
감사합니다.<br />
42+
SPARCS Taxi팀 드림.
43+
`
44+
);
45+
46+
/* 미탑승 알림 메일을 위한 템플릿 */
47+
reportEmailPage["no-show"] = (
48+
origin,
49+
name,
50+
nickname,
51+
roomName,
52+
payer,
53+
roomId
54+
) =>
55+
emailPage(
56+
"미탑승 내역 관련 안내",
57+
`<b><font color="#6E3678">${name} (${nickname})</font></b> 님께<br /><br />
58+
안녕하세요, ${name} (${nickname}) 님.<br />
59+
KAIST 학부 총학생회 산하 특별기구 SPARCS의 Taxi 팀입니다.<br /><br />
60+
최근 참여하신 방에서 별도의 연락 없이 탑승하지 않았다는 사용자의 문의가 접수되어 메일을 보내드립니다.<br /><br />
61+
<div style="background: #EEEEEE; border-radius: 20px; margin: padding: 16px 24px; padding: 16px 24px; ">
62+
<div style="margin: 0; padding: 0;">
63+
<span style="width: 64px; display: inline-block;"><b>방 제목</b></span>
64+
${roomName}
65+
</div>
66+
<div style="margin: 0; padding: 0;">
67+
<span style="width: 64px; display: inline-block;"><b>결제자</b></span>
68+
${payer}
69+
</div>
70+
<div style="margin: 0; padding: 0;">
71+
<span style="width: 64px; display: inline-block;"><b>링크</b></span>
72+
<a href="${
73+
new URL(`/myroom/${roomId}`, origin).href
74+
}" target="_blank">${new URL(`/myroom/${roomId}`, origin).href}</a>
75+
</div>
76+
</div><br />
77+
<b>미탑승이 반복되는 경우 Taxi 서비스 이용이 제한</b>될 수 있음을 알려드립니다.<br />
78+
문의가 필요하신 경우, <a href="${
79+
new URL("/mypage?channeltalk=true", origin).href
80+
}" target="_blank">택시 서비스 내부</a>의 &quot;채널톡 문의하기&quot;를 통해 채팅을 남겨주시거나, 또는 이 메일에 회신해 주셔도 됩니다.<br /><br />
81+
감사합니다.<br />
82+
SPARCS Taxi팀 드림.
83+
`
84+
);
85+
86+
module.exports = reportEmailPage;

0 commit comments

Comments
 (0)