oak-general-business/lib/triggers/extraFile.js

119 lines
4.7 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const tslib_1 = require("tslib");
const index_backend_1 = require("../utils/cos/index.backend");
const Exception_1 = require("oak-domain/lib/types/Exception");
const Projection_1 = require("../types/Projection");
const assert_1 = tslib_1.__importDefault(require("assert"));
const triggers = [
{
name: '生成extraFile需要的上传meta',
when: 'before',
entity: 'extraFile',
action: 'create',
priority: 9,
fn: async ({ operation }, context) => {
const { data } = operation;
let cachedOrigin = undefined;
const getCosOrigin = async () => {
if (cachedOrigin) {
return cachedOrigin;
}
const [application] = await context.select("application", {
data: {
config: 1,
system: {
config: 1,
platform: {
config: 1
}
}
},
filter: {
id: context.getApplicationId(),
},
}, {
dontCollect: true
});
(0, assert_1.default)(application, `找不到 当前应用程序`);
cachedOrigin = application.config?.cos?.defaultOrigin ||
application.system?.config?.Cos?.defaultOrigin ||
application.system?.platform?.config?.Cos?.defaultOrigin;
return cachedOrigin;
};
const formMeta = async (data) => {
// 如果提供了就用提供的origin否则尝试从应用程序、系统配置、平台配置中获取默认的Cos源
const configOrigin = data.origin || await getCosOrigin();
data.origin = configOrigin;
(0, assert_1.default)(configOrigin, `extraFile的origin未指定且应用程序、系统配置、平台配置中也没有默认的Cos源请检查`);
if (!data.applicationId) {
data.applicationId = context.getApplicationId();
}
if (configOrigin === 'unknown') {
Object.assign(data, {
uploadState: 'success',
});
return;
}
const cos = (0, index_backend_1.getCosBackend)(configOrigin);
if (!cos) {
throw new Exception_1.OakException(`origin为${configOrigin}的extraFile没有定义Cos类请调用registerCos注入`);
}
await cos.formUploadMeta(context.getApplication(), data);
Object.assign(data, {
uploadState: 'uploading',
});
};
if (data instanceof Array) {
await Promise.all(data.map(ele => formMeta(ele)));
return data.length;
}
await formMeta(data);
return 1;
}
},
{
name: '删除extraFile时远端也进行删除',
when: 'commit',
strict: 'makeSure',
entity: 'extraFile',
action: 'remove',
fn: async ({ ids }, context) => {
const fn = context.openRootMode();
const rows = await context.select('extraFile', {
data: {
id: 1,
origin: 1,
objectId: 1,
bucket: 1,
extension: 1,
entity: 1,
entityId: 1,
extra2: 1,
applicationId: 1,
application: Projection_1.applicationProjection
},
filter: {
id: { $in: ids },
},
}, { includedDeleted: true });
for (const extraFile of rows) {
const { origin, objectId, application } = extraFile;
// 用objectId来去重只有当没有还有效的objectId方可删除
const count = await context.count('extraFile', {
filter: {
objectId: objectId,
},
}, {});
if (count === 0) {
const uploader = (0, index_backend_1.getCosBackend)(origin);
const application2 = context.getApplication(true) || application;
await uploader.removeFile(application2, extraFile);
}
}
fn();
}
},
];
exports.default = triggers;