Skip to content

Commit d4afd02

Browse files
committed
filter out duplicate messages before adding them via batch
1 parent 9e860c8 commit d4afd02

File tree

2 files changed

+77
-1
lines changed

2 files changed

+77
-1
lines changed

packages/backend/src/persistence/storage/postgres/addMessageBatch.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,15 @@ export const addMessageBatch =
1919
account.id,
2020
encryptedContactName,
2121
);
22+
23+
const uniqueMessageBatch = messageBatch.filter(
24+
(message, index, self) =>
25+
index ===
26+
self.findIndex((m) => m.messageId === message.messageId),
27+
);
28+
2229
//store each message in the db
23-
const createMessagePromises = messageBatch.map(
30+
const createMessagePromises = uniqueMessageBatch.map(
2431
({
2532
messageId,
2633
createdAt,

packages/backend/src/storage.test.ts

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1146,6 +1146,75 @@ describe('Storage', () => {
11461146
expect(body[0].contact).toEqual(sha256(receiver.account.ensName));
11471147
expect(body.length).toBe(1);
11481148

1149+
const { status: getMessagesStatus, body: messages } = await request(
1150+
app,
1151+
)
1152+
.get(
1153+
`/new/bob.eth/getMessages/${sha256(
1154+
receiver.account.ensName,
1155+
)}`,
1156+
)
1157+
.set({
1158+
authorization: 'Bearer ' + token,
1159+
})
1160+
.send();
1161+
1162+
expect(getMessagesStatus).toBe(200);
1163+
expect(messages.length).toBe(2);
1164+
expect(
1165+
JSON.parse(JSON.parse(messages[0]).encryptedEnvelopContainer),
1166+
).toStrictEqual(envelop);
1167+
});
1168+
it('if batch contains duplicates it only creates the message once', async () => {
1169+
const messageFactory = MockMessageFactory(
1170+
sender,
1171+
receiver,
1172+
deliveryService,
1173+
);
1174+
const envelop = await messageFactory.createEncryptedEnvelop(
1175+
'Hello1',
1176+
);
1177+
const { status } = await request(app)
1178+
.post(`/new/bob.eth/addMessageBatch`)
1179+
.set({
1180+
authorization: 'Bearer ' + token,
1181+
})
1182+
.send({
1183+
encryptedContactName: sha256(receiver.account.ensName),
1184+
messageBatch: [
1185+
{
1186+
encryptedEnvelopContainer: JSON.stringify(envelop),
1187+
messageId: '123',
1188+
createdAt: 1,
1189+
isHalted: false,
1190+
},
1191+
{
1192+
encryptedEnvelopContainer: JSON.stringify(envelop),
1193+
messageId: '123',
1194+
createdAt: 1,
1195+
isHalted: false,
1196+
},
1197+
{
1198+
encryptedEnvelopContainer: JSON.stringify(envelop),
1199+
messageId: '456',
1200+
createdAt: 2,
1201+
isHalted: false,
1202+
},
1203+
],
1204+
});
1205+
expect(status).toBe(200);
1206+
1207+
const { body } = await request(app)
1208+
.get(`/new/bob.eth/getConversations`)
1209+
.set({
1210+
authorization: 'Bearer ' + token,
1211+
})
1212+
.send();
1213+
1214+
expect(status).toBe(200);
1215+
expect(body[0].contact).toEqual(sha256(receiver.account.ensName));
1216+
expect(body.length).toBe(1);
1217+
11491218
const { status: getMessagesStatus, body: messages } = await request(
11501219
app,
11511220
)

0 commit comments

Comments
 (0)