feat: Inbox #876
@ -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
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
account.LatestEventMessageDate = latestEventMessage.date;
|
console.log("latestEventMessage", latestEventMessage);
|
||||||
|
account.LatestEventMessageDate = new Date(latestEventMessage.eventMessageDate);
|
||||||
await account.save();
|
await account.save();
|
||||||
![]() 🛠️ Refactor suggestion Consider potential race conditions in updating the latest event message date. Multiple concurrent requests could lead to a race condition when updating
_: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) {
|
ownerId: accountId
|
||||||
const savedMessage = await Inbox.create({
|
}));
|
||||||
...msg,
|
|
||||||
ownerId: accountId
|
const savedMessages = await Inbox.insertMany(ownerIdMessages);
|
||||||
});
|
|
||||||
savedMessages.push(savedMessage);
|
|
||||||
}
|
|
||||||
return savedMessages;
|
return savedMessages;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user
🛠️ Refactor suggestion
Remove console.log statement.
Production code should use the logger instead of console.log.
📝 Committable suggestion