Skip to content

Commit

Permalink
Chore: Migrate loadThreadMessages to TS (#3718)
Browse files Browse the repository at this point in the history
* Migrate loadThreadMessages to TypeScript
* Update interfaces
  • Loading branch information
gerzonc authored Mar 2, 2022
1 parent 6626510 commit 5f92a50
Show file tree
Hide file tree
Showing 2 changed files with 87 additions and 76 deletions.
76 changes: 0 additions & 76 deletions app/lib/methods/loadThreadMessages.js

This file was deleted.

87 changes: 87 additions & 0 deletions app/lib/methods/loadThreadMessages.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
import { Q } from '@nozbe/watermelondb';
import { sanitizedRaw } from '@nozbe/watermelondb/RawRecord';
import EJSON from 'ejson';

import database from '../database';
import log from '../../utils/log';
import { Encryption } from '../encryption';
import protectedFunction from './helpers/protectedFunction';
import buildMessage from './helpers/buildMessage';
import { TThreadMessageModel } from '../../definitions';
import sdk from '../rocketchat/services/sdk';

async function load({ tmid }: { tmid: string }) {
try {
// RC 1.0
const result = await sdk.methodCallWrapper('getThreadMessages', { tmid });
if (!result) {
return [];
}
return EJSON.fromJSONValue(result);
} catch (error) {
console.log(error);
return [];
}
}

export default function loadThreadMessages({ tmid, rid }: { tmid: string; rid: string }) {
return new Promise<void>(async (resolve, reject) => {
try {
let data = await load({ tmid });
if (data && data.length) {
try {
data = data.filter((m: TThreadMessageModel) => m.tmid).map((m: TThreadMessageModel) => buildMessage(m));
data = await Encryption.decryptMessages(data);
const db = database.active;
const threadMessagesCollection = db.get('thread_messages');
const allThreadMessagesRecords = await threadMessagesCollection.query(Q.where('rid', tmid)).fetch();
const filterThreadMessagesToCreate = data.filter(
(i1: TThreadMessageModel) => !allThreadMessagesRecords.find(i2 => i1._id === i2.id)
);
const filterThreadMessagesToUpdate = allThreadMessagesRecords.filter(i1 =>
data.find((i2: TThreadMessageModel) => i1.id === i2._id)
);

const threadMessagesToCreate = filterThreadMessagesToCreate.map((threadMessage: TThreadMessageModel) =>
threadMessagesCollection.prepareCreate(
protectedFunction((tm: TThreadMessageModel) => {
tm._raw = sanitizedRaw({ id: threadMessage._id }, threadMessagesCollection.schema);
Object.assign(tm, threadMessage);
if (tm.subscription) {
tm.subscription.id = rid;
}
if (threadMessage.tmid) {
tm.rid = threadMessage.tmid;
}
delete threadMessage.tmid;
})
)
);

const threadMessagesToUpdate = filterThreadMessagesToUpdate.map(threadMessage => {
const newThreadMessage = data.find((t: TThreadMessageModel) => t._id === threadMessage.id);
return threadMessage.prepareUpdate(
protectedFunction((tm: TThreadMessageModel) => {
Object.assign(tm, newThreadMessage);
if (threadMessage.tmid) {
tm.rid = threadMessage.tmid;
}
delete threadMessage.tmid;
})
);
});

await db.write(async () => {
await db.batch(...threadMessagesToCreate, ...threadMessagesToUpdate);
});
} catch (e) {
log(e);
}
return resolve(data);
}
return resolve();
} catch (e) {
reject(e);
}
});
}

0 comments on commit 5f92a50

Please sign in to comment.