Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Main branch update from Dev branch #507

Merged
merged 16 commits into from
Mar 26, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion app.js
Original file line number Diff line number Diff line change
Expand Up @@ -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 서버 시작
Expand Down
13 changes: 1 addition & 12 deletions loadenv.js
Original file line number Diff line number Diff line change
Expand Up @@ -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
};
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.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ const initializeApp = () => {
});
} else {
logger.error(
"Firebase 관련 credential이 존재하지 않습니다. FCM 관련 기능을 사용할 수 없습니다."
"There is no credential for Firebase. FCM functions are disabled."
);
}
};
Expand Down Expand Up @@ -111,7 +111,7 @@ const removeExpiredTokens = async (deviceTokens, fcmResponses) => {
}
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");
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");
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.js
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
6 changes: 3 additions & 3 deletions src/services/reports.js
Original file line number Diff line number Diff line change
Expand Up @@ -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) => {
Expand Down Expand Up @@ -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,
Expand Down
34 changes: 0 additions & 34 deletions src/views/emailNoSettlementPage.js

This file was deleted.

4 changes: 2 additions & 2 deletions src/views/emailPage.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ module.exports = (
<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 @@ module.exports = (
<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");

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;
Loading