Skip to content

Commit

Permalink
Merge branch 'dev' into #159-add-typescript-support
Browse files Browse the repository at this point in the history
  • Loading branch information
kmc7468 committed Apr 23, 2024
2 parents 2a32d96 + 64c0baf commit 9cfa9dc
Show file tree
Hide file tree
Showing 9 changed files with 103 additions and 62 deletions.
2 changes: 1 addition & 1 deletion src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ app.use(errorHandler);
const serverHttp = http
.createServer(app)
.listen(httpPort, () =>
logger.info(`Express 서버가 ${httpPort}번 포트에서 시작됨.`)
logger.info(`Express server started from port ${httpPort}`)
);

// socket.io 서버 시작
Expand Down
9 changes: 4 additions & 5 deletions src/modules/email.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ class NodemailerTransport {
await this.#transporter.sendMail(mailOptions);
return true;
} catch (err) {
logger.error(err);
logger.error(`Failed to send email: ${err}`);
return false;
}
}
Expand Down Expand Up @@ -75,7 +75,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;
});
Expand All @@ -96,14 +96,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: ${nodemailer.getTestMessageUrl(
response
)}`
);
return true;
} catch (err) {
logger.error("메일 전송이 아래와 같은 사유로 실패했습니다: ");
logger.error(err);
logger.error(`Failed to send email: ${err}`);
return false;
}
}
Expand Down
4 changes: 2 additions & 2 deletions src/modules/fcm.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ export const initializeApp = () => {
});
} else {
logger.error(
"Firebase 관련 credential이 존재하지 않습니다. FCM 관련 기능을 사용할 수 없습니다."
"There is no credential for Firebase. FCM functions are disabled."
);
}
};
Expand Down Expand Up @@ -116,7 +116,7 @@ const removeExpiredTokens = async (
}
return false;
} catch (err) {
logger.info(err);
logger.error(err);
return false;
}
})
Expand Down
3 changes: 1 addition & 2 deletions src/modules/socket.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ const sessionMiddleware = require("@/middlewares/session").default;
const logger = require("@/modules/logger").default;
const { getLoginInfo } = require("@/modules/auths/login");
const { roomModel, userModel, chatModel } = require("@/modules/stores/mongo");
const { getS3Url } = require("@/modules/stores/aws");
const { getTokensOfUsers, sendMessageByTokens } = require("@/modules/fcm");

const { corsWhiteList } = require("@/loadenv");
Expand Down Expand Up @@ -195,7 +194,7 @@ const emitChatEvent = async (io, chat) => {
type,
name,
getMessageBody(type, nickname, content),
getS3Url(`/profile-img/${profileImageUrl}`),
profileImageUrl,
`/myroom/${roomId}`
);

Expand Down
6 changes: 3 additions & 3 deletions src/modules/stores/mongo.ts
Original file line number Diff line number Diff line change
Expand Up @@ -217,17 +217,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();
});

export const connectDatabase = (mongoUrl: string) => {
database.on("disconnected", function () {
// 데이터베이스 연결이 끊어지면 5초 후 재연결을 시도합니다.
logger.error("데이터베이스와 연결이 끊어졌습니다!");
logger.error("Disconnected from database!");
setTimeout(() => {
mongoose.connect(
mongoUrl /*{
Expand Down
8 changes: 4 additions & 4 deletions src/services/reports.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
const { userModel, reportModel, roomModel } = require("@/modules/stores/mongo");
const { reportPopulateOption } = require("@/modules/populates/reports");
const { sendReportEmail } = require("@/modules/stores/aws");
const { sendReportEmail } = require("@/modules/email");
const logger = require("@/modules/logger").default;
const emailPage = require("@/views/emailNoSettlementPage").default;
const reportEmailPage = require("@/views/reportEmailPage");
const { notifyReportToReportChannel } = require("@/modules/slackNotification");

const createHandler = async (req, res) => {
Expand Down Expand Up @@ -38,10 +38,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,
Expand Down
43 changes: 0 additions & 43 deletions src/views/emailNoSettlementPage.ts

This file was deleted.

4 changes: 2 additions & 2 deletions src/views/emailPage.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ const emailPage = (
<div style="width: max(min(100%, 800px), 320px); margin: 0 auto; padding 0;">
<div style="height: 102px; background: #6E3678; margin: 0 0 48px; padding: 0;">
<img style="height: 54px; margin: 24px 32px; padding: 0;" src="${getS3Url(
"/assets/email-taxi-logo-white.svg"
"/assets/email-taxi-logo-white.png"
)}" alt="Taxi" />
</div>
${
Expand All @@ -18,7 +18,7 @@ const emailPage = (
<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>
<div style="border-top: 2px solid #999999; text-align: center; margin: 120px 0 0; padding: 24px 0 0;">
<img style="height: 54px; margin: 0; padding: 0;" src="${getS3Url(
"/assets/email-sparcs-logo-black.svg"
"/assets/email-sparcs-logo-black.png"
)}" alt="SPARCS" />
<a href="https://www.sparcs.org" target="_blank">
<div style="margin: 0; padding: 0;">
Expand Down
86 changes: 86 additions & 0 deletions src/views/reportEmailPage.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
const emailPage = require("./emailPage").default;

const reportEmailPage = {};

/* 미정산 알림 메일을 위한 템플릿 */
reportEmailPage["no-settlement"] = (
origin,
name,
nickname,
roomName,
payer,
roomId
) =>
emailPage(
"미정산 내역 관련 안내",
`<b><font color="#6E3678">${name} (${nickname})</font></b> 님께<br /><br />
안녕하세요, ${name} (${nickname}) 님.<br />
KAIST 학부 총학생회 산하 특별기구 SPARCS의 Taxi 팀입니다.<br /><br />
최근 참여하신 방에서 정산이 이루어지지 않았다는 사용자의 문의가 접수되어 메일을 보내드립니다.<br /><br />
<div style="background: #EEEEEE; border-radius: 20px; margin: padding: 16px 24px; padding: 16px 24px; ">
<div style="margin: 0; padding: 0;">
<span style="width: 64px; display: inline-block;"><b>방 제목</b></span>
${roomName}
</div>
<div style="margin: 0; padding: 0;">
<span style="width: 64px; display: inline-block;"><b>결제자</b></span>
${payer}
</div>
<div style="margin: 0; padding: 0;">
<span style="width: 64px; display: inline-block;"><b>링크</b></span>
<a href="${new URL(`/myroom/${roomId}`, origin).href}" target="_blank">${
new URL(`/myroom/${roomId}`, origin).href
}</a>
</div>
</div><br />
위 방에서 채팅을 확인하실 수 있으며, <b>결제하신 분께 해당 금액을 정산</b>해주시기를 부탁드립니다.<br />
<b>미정산이 반복되는 경우 Taxi 서비스 이용이 제한</b>될 수 있음을 알려드립니다.<br />
문의가 필요하신 경우, <a href="${
new URL("/mypage?channeltalk=true", origin).href
}" target="_blank">택시 서비스 내부</a>의 &quot;채널톡 문의하기&quot;를 통해 채팅을 남겨주시거나, 또는 이 메일에 회신해 주셔도 됩니다.<br /><br />
감사합니다.<br />
SPARCS Taxi팀 드림.
`
);

/* 미탑승 알림 메일을 위한 템플릿 */
reportEmailPage["no-show"] = (
origin,
name,
nickname,
roomName,
payer,
roomId
) =>
emailPage(
"미탑승 내역 관련 안내",
`<b><font color="#6E3678">${name} (${nickname})</font></b> 님께<br /><br />
안녕하세요, ${name} (${nickname}) 님.<br />
KAIST 학부 총학생회 산하 특별기구 SPARCS의 Taxi 팀입니다.<br /><br />
최근 참여하신 방에서 별도의 연락 없이 탑승하지 않았다는 사용자의 문의가 접수되어 메일을 보내드립니다.<br /><br />
<div style="background: #EEEEEE; border-radius: 20px; margin: padding: 16px 24px; padding: 16px 24px; ">
<div style="margin: 0; padding: 0;">
<span style="width: 64px; display: inline-block;"><b>방 제목</b></span>
${roomName}
</div>
<div style="margin: 0; padding: 0;">
<span style="width: 64px; display: inline-block;"><b>결제자</b></span>
${payer}
</div>
<div style="margin: 0; padding: 0;">
<span style="width: 64px; display: inline-block;"><b>링크</b></span>
<a href="${
new URL(`/myroom/${roomId}`, origin).href
}" target="_blank">${new URL(`/myroom/${roomId}`, origin).href}</a>
</div>
</div><br />
<b>미탑승이 반복되는 경우 Taxi 서비스 이용이 제한</b>될 수 있음을 알려드립니다.<br />
문의가 필요하신 경우, <a href="${
new URL("/mypage?channeltalk=true", origin).href
}" target="_blank">택시 서비스 내부</a>의 &quot;채널톡 문의하기&quot;를 통해 채팅을 남겨주시거나, 또는 이 메일에 회신해 주셔도 됩니다.<br /><br />
감사합니다.<br />
SPARCS Taxi팀 드림.
`
);

module.exports = reportEmailPage;

0 comments on commit 9cfa9dc

Please sign in to comment.