mirror of
https://github.com/outline/outline.git
synced 2026-05-21 10:48:54 -05:00
51cb5bffce
* Cache `issueSources` for embed integrations * lock model before update
33 lines
961 B
TypeScript
33 lines
961 B
TypeScript
import { Integration } from "@server/models";
|
|
import { sequelize } from "@server/storage/database";
|
|
import { Hook, PluginManager } from "@server/utils/PluginManager";
|
|
import BaseTask from "./BaseTask";
|
|
|
|
const plugins = PluginManager.getHooks(Hook.IssueProvider);
|
|
|
|
type Props = {
|
|
integrationId: string;
|
|
};
|
|
|
|
export default class CacheIssueSourcesTask extends BaseTask<Props> {
|
|
async perform({ integrationId }: Props) {
|
|
const integration = await Integration.findByPk(integrationId);
|
|
if (!integration) {
|
|
return;
|
|
}
|
|
|
|
const plugin = plugins.find((p) => p.value.service === integration.service);
|
|
if (!plugin) {
|
|
return;
|
|
}
|
|
|
|
const sources = await plugin.value.fetchSources(integration);
|
|
|
|
await sequelize.transaction(async (transaction) => {
|
|
await integration.reload({ transaction, lock: transaction.LOCK.UPDATE });
|
|
integration.issueSources = sources;
|
|
await integration.save({ transaction });
|
|
});
|
|
}
|
|
}
|