Chore: Migrate getSlashCommands to TS (#3711)

* migrate getSlashCommands to TS

* use sdk and update getSlashCommands

* minor tweak

* Remove implicit anys

Co-authored-by: Diego Mello <diegolmello@gmail.com>
This commit is contained in:
Gerzon Z 2022-02-18 22:19:33 -04:00 committed by GitHub
parent 1cfa45eeec
commit 8237b3e673
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 82 additions and 71 deletions

View File

@ -9,4 +9,8 @@ export interface ISlashCommand {
appId?: string;
}
export interface ISlashCommandResult extends ISlashCommand {
command: string;
}
export type TSlashCommandModel = ISlashCommand & Model;

View File

@ -1,71 +0,0 @@
import { sanitizedRaw } from '@nozbe/watermelondb/RawRecord';
import database from '../database';
import log from '../../utils/log';
import protectedFunction from './helpers/protectedFunction';
export default function () {
const db = database.active;
return new Promise(async resolve => {
try {
// RC 0.60.2
const result = await this.sdk.get('commands.list');
if (!result.success) {
console.log(result);
return resolve();
}
const { commands } = result;
if (commands && commands.length) {
await db.action(async () => {
const slashCommandsCollection = db.get('slash_commands');
const allSlashCommandsRecords = await slashCommandsCollection.query().fetch();
// filter slash commands
let slashCommandsToCreate = commands.filter(i1 => !allSlashCommandsRecords.find(i2 => i1.command === i2.id));
let slashCommandsToUpdate = allSlashCommandsRecords.filter(i1 => commands.find(i2 => i1.id === i2.command));
let slashCommandsToDelete = allSlashCommandsRecords.filter(
i1 => !slashCommandsToCreate.find(i2 => i2.command === i1.id) && !slashCommandsToUpdate.find(i2 => i2.id === i1.id)
);
// Create
slashCommandsToCreate = slashCommandsToCreate.map(command =>
slashCommandsCollection.prepareCreate(
protectedFunction(s => {
s._raw = sanitizedRaw({ id: command.command }, slashCommandsCollection.schema);
Object.assign(s, command);
})
)
);
// Update
slashCommandsToUpdate = slashCommandsToUpdate.map(command => {
const newCommand = commands.find(s => s.command === command.id);
return command.prepareUpdate(
protectedFunction(s => {
Object.assign(s, newCommand);
})
);
});
// Delete
slashCommandsToDelete = slashCommandsToDelete.map(command => command.prepareDestroyPermanently());
const allRecords = [...slashCommandsToCreate, ...slashCommandsToUpdate, ...slashCommandsToDelete];
try {
await db.batch(...allRecords);
} catch (e) {
log(e);
}
return allRecords.length;
});
}
} catch (e) {
log(e);
return resolve();
}
});
}

View File

@ -0,0 +1,78 @@
import { sanitizedRaw } from '@nozbe/watermelondb/RawRecord';
import database from '../database';
import log from '../../utils/log';
import protectedFunction from './helpers/protectedFunction';
import { ISlashCommandResult, TSlashCommandModel } from '../../definitions';
import sdk from '../rocketchat/services/sdk';
export default function getSlashCommands() {
const db = database.active;
return new Promise<void>(async resolve => {
try {
// RC 0.60.2
// @ts-ignore
const result = await sdk.get('commands.list');
if (!result.success) {
return resolve();
}
// @ts-ignore
const { commands } = result;
if (commands && commands.length) {
await db.write(async () => {
const slashCommandsCollection = db.get('slash_commands');
const allSlashCommandsRecords = await slashCommandsCollection.query().fetch();
// filter slash commands
const filteredSlashCommandsToCreate = commands.filter(
(i1: ISlashCommandResult) => !allSlashCommandsRecords.find(i2 => i1.command === i2.id)
);
const filteredSlashCommandsToUpdate = allSlashCommandsRecords.filter(i1 =>
commands.find((i2: ISlashCommandResult) => i1.id === i2.command)
);
const filteredSlashCommandsToDelete = allSlashCommandsRecords.filter(
i1 =>
!filteredSlashCommandsToCreate.find((i2: ISlashCommandResult) => i2.command === i1.id) &&
!filteredSlashCommandsToUpdate.find(i2 => i2.id === i1.id)
);
// Create
const slashCommandsToCreate = filteredSlashCommandsToCreate.map((command: ISlashCommandResult) =>
slashCommandsCollection.prepareCreate(
protectedFunction((s: TSlashCommandModel) => {
s._raw = sanitizedRaw({ id: command.command }, slashCommandsCollection.schema);
Object.assign(s, command);
})
)
);
// Update
const slashCommandsToUpdate = filteredSlashCommandsToUpdate.map(command => {
const newCommand = commands.find((s: ISlashCommandResult) => s.command === command.id);
return command.prepareUpdate(
protectedFunction((s: TSlashCommandModel) => {
Object.assign(s, newCommand);
})
);
});
// Delete
const slashCommandsToDelete = filteredSlashCommandsToDelete.map(command => command.prepareDestroyPermanently());
const allRecords = [...slashCommandsToCreate, ...slashCommandsToUpdate, ...slashCommandsToDelete];
try {
await db.batch(...allRecords);
} catch (e) {
log(e);
}
return allRecords.length;
});
}
} catch (e) {
log(e);
return resolve();
}
});
}