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:
parent
1cfa45eeec
commit
8237b3e673
|
@ -9,4 +9,8 @@ export interface ISlashCommand {
|
|||
appId?: string;
|
||||
}
|
||||
|
||||
export interface ISlashCommandResult extends ISlashCommand {
|
||||
command: string;
|
||||
}
|
||||
|
||||
export type TSlashCommandModel = ISlashCommand & Model;
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
});
|
||||
}
|
|
@ -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();
|
||||
}
|
||||
});
|
||||
}
|
Loading…
Reference in New Issue