feat: Inbox #876

Merged
OrdisPrime merged 11 commits from inbox into main 2025-01-31 05:15:36 -08:00
Showing only changes of commit 1326fb9092 - Show all commits

View File

@ -32,7 +32,7 @@ export const createNewEventMessages = async (req: Request) => {
const account = await getAccountForRequest(req); const account = await getAccountForRequest(req);
const latestEventMessageDate = account.LatestEventMessageDate; const latestEventMessageDate = account.LatestEventMessageDate;
//TODO: is baroo there? send message //TODO: is baroo there? create these kind of messages too (periodical messages)
const newEventMessages = messages.Messages.filter(m => new Date(m.eventMessageDate) > latestEventMessageDate); const newEventMessages = messages.Messages.filter(m => new Date(m.eventMessageDate) > latestEventMessageDate);
if (newEventMessages.length === 0) { if (newEventMessages.length === 0) {
@ -40,30 +40,25 @@ export const createNewEventMessages = async (req: Request) => {
return; return;
} }
const newEventMessagesSorted = newEventMessages.sort(
(a, b) => new Date(a.eventMessageDate).getTime() - new Date(b.eventMessageDate).getTime()
);
const savedEventMessages = await createMessage(account._id.toString(), newEventMessages); const savedEventMessages = await createMessage(account._id.toString(), newEventMessages);
logger.debug("created event messages", savedEventMessages); logger.debug("created event messages", savedEventMessages);
const latestEventMessage = savedEventMessages.reduce((prev, current) => const latestEventMessage = newEventMessages.reduce((prev, current) =>
prev.date > current.date ? prev : current prev.eventMessageDate > current.eventMessageDate ? prev : current
); );
coderabbitai[bot] commented 2025-01-31 05:15:16 -08:00 (Migrated from github.com)
Review

🛠️ Refactor suggestion

Remove console.log statement.

Production code should use the logger instead of console.log.

-    console.log("latestEventMessage", latestEventMessage);
+    logger.debug("Latest event message:", latestEventMessage);
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

    logger.debug("Latest event message:", latestEventMessage);
_:hammer_and_wrench: Refactor suggestion_ **Remove console.log statement.** Production code should use the logger instead of console.log. ```diff - console.log("latestEventMessage", latestEventMessage); + logger.debug("Latest event message:", latestEventMessage); ``` <!-- suggestion_start --> <details> <summary>📝 Committable suggestion</summary> > ‼️ **IMPORTANT** > Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements. `````suggestion logger.debug("Latest event message:", latestEventMessage); ````` </details> <!-- suggestion_end --> <!-- This is an auto-generated comment by CodeRabbit -->
account.LatestEventMessageDate = latestEventMessage.date; console.log("latestEventMessage", latestEventMessage);
account.LatestEventMessageDate = new Date(latestEventMessage.eventMessageDate);
await account.save(); await account.save();
coderabbitai[bot] commented 2025-01-31 04:36:22 -08:00 (Migrated from github.com)
Review

🛠️ Refactor suggestion

Consider potential race conditions in updating the latest event message date.

Multiple concurrent requests could lead to a race condition when updating LatestEventMessageDate. Consider using a transaction to ensure atomicity.

 export const createNewEventMessages = async (req: Request) => {
-    const account = await getAccountForRequest(req);
-    const latestEventMessageDate = account.LatestEventMessageDate;
+    const session = await mongoose.startSession();
+    try {
+        await session.withTransaction(async () => {
+            const account = await getAccountForRequest(req);
+            const latestEventMessageDate = account.LatestEventMessageDate;

-    //TODO: is baroo there? create these kind of messages too (periodical messages)
-    const newEventMessages = messages.Messages.filter(m => new Date(m.eventMessageDate) > latestEventMessageDate);
+            const newEventMessages = messages.Messages.filter(m => new Date(m.eventMessageDate) > latestEventMessageDate);

-    if (newEventMessages.length === 0) {
-        logger.debug(`No new event messages. Latest event message date: ${latestEventMessageDate.toISOString()}`);
-        return;
-    }
+            if (newEventMessages.length === 0) {
+                logger.debug(`No new event messages. Latest event message date: ${latestEventMessageDate.toISOString()}`);
+                return;
+            }

-    const savedEventMessages = await createMessage(account._id.toString(), newEventMessages);
-    logger.debug("created event messages", savedEventMessages);
+            const savedEventMessages = await createMessage(account._id.toString(), newEventMessages);
+            logger.debug("created event messages", savedEventMessages);

-    const latestEventMessage = newEventMessages.reduce((prev, current) =>
-        prev.eventMessageDate > current.eventMessageDate ? prev : current
-    );
+            const latestEventMessage = newEventMessages.reduce((prev, current) =>
+                prev.eventMessageDate > current.eventMessageDate ? prev : current
+            );

-    console.log("latestEventMessage", latestEventMessage);
-    account.LatestEventMessageDate = new Date(latestEventMessage.eventMessageDate);
-    await account.save();
+            account.LatestEventMessageDate = new Date(latestEventMessage.eventMessageDate);
+            await account.save({ session });
+        });
+    } finally {
+        await session.endSession();
+    }
 };

Committable suggestion skipped: line range outside the PR's diff.

_:hammer_and_wrench: Refactor suggestion_ **Consider potential race conditions in updating the latest event message date.** Multiple concurrent requests could lead to a race condition when updating `LatestEventMessageDate`. Consider using a transaction to ensure atomicity. ```diff export const createNewEventMessages = async (req: Request) => { - const account = await getAccountForRequest(req); - const latestEventMessageDate = account.LatestEventMessageDate; + const session = await mongoose.startSession(); + try { + await session.withTransaction(async () => { + const account = await getAccountForRequest(req); + const latestEventMessageDate = account.LatestEventMessageDate; - //TODO: is baroo there? create these kind of messages too (periodical messages) - const newEventMessages = messages.Messages.filter(m => new Date(m.eventMessageDate) > latestEventMessageDate); + const newEventMessages = messages.Messages.filter(m => new Date(m.eventMessageDate) > latestEventMessageDate); - if (newEventMessages.length === 0) { - logger.debug(`No new event messages. Latest event message date: ${latestEventMessageDate.toISOString()}`); - return; - } + if (newEventMessages.length === 0) { + logger.debug(`No new event messages. Latest event message date: ${latestEventMessageDate.toISOString()}`); + return; + } - const savedEventMessages = await createMessage(account._id.toString(), newEventMessages); - logger.debug("created event messages", savedEventMessages); + const savedEventMessages = await createMessage(account._id.toString(), newEventMessages); + logger.debug("created event messages", savedEventMessages); - const latestEventMessage = newEventMessages.reduce((prev, current) => - prev.eventMessageDate > current.eventMessageDate ? prev : current - ); + const latestEventMessage = newEventMessages.reduce((prev, current) => + prev.eventMessageDate > current.eventMessageDate ? prev : current + ); - console.log("latestEventMessage", latestEventMessage); - account.LatestEventMessageDate = new Date(latestEventMessage.eventMessageDate); - await account.save(); + account.LatestEventMessageDate = new Date(latestEventMessage.eventMessageDate); + await account.save({ session }); + }); + } finally { + await session.endSession(); + } }; ``` > Committable suggestion skipped: line range outside the PR's diff. <!-- This is an auto-generated comment by CodeRabbit -->
}; };
export const createMessage = async (accountId: string, message: IMessageCreationTemplate[]) => { export const createMessage = async (accountId: string, messages: IMessageCreationTemplate[]) => {
//TODO: createmany const ownerIdMessages = messages.map(m => ({
const savedMessages = []; ...m,
for (const msg of message) {
const savedMessage = await Inbox.create({
...msg,
ownerId: accountId ownerId: accountId
}); }));
savedMessages.push(savedMessage);
} const savedMessages = await Inbox.insertMany(ownerIdMessages);
return savedMessages; return savedMessages;
}; };