"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const assert_1 = require("oak-domain/lib/utils/assert"); const index_backend_1 = require("../utils/cos/index.backend"); const uuid_1 = require("oak-domain/lib/utils/uuid"); const lodash_1 = require("oak-domain/lib/utils/lodash"); async function checkWhetherSuccess(context, applicationId, rows) { const successIds = []; const failedIds = []; await context.setApplication(applicationId); for (const d of rows) { const { origin } = d; const cos = (0, index_backend_1.getCosBackend)(origin); (0, assert_1.assert)(cos); const success = await cos.checkWhetherSuccess(context.getApplication(), d); if (success) { successIds.push(d.id); } else { failedIds.push(d.id); } } if (successIds.length > 0) { await context.operate('extraFile', { id: await (0, uuid_1.generateNewIdAsync)(), action: 'update', data: { uploadState: 'success', }, filter: { id: { $in: successIds, } } }, {}); } if (failedIds.length > 0) { await context.operate('extraFile', { id: await (0, uuid_1.generateNewIdAsync)(), action: 'update', data: { uploadState: 'failed', }, filter: { id: { $in: successIds, } } }, {}); } } const watchers = [ { name: '确定uploading的文件状态', entity: 'extraFile', filter: async () => { const now = Date.now(); const deadline = process.env.NODE_ENV === 'production' ? now - 3600 * 1000 : now - 60 * 1000; return { $$updateAt$$: { $lt: deadline, }, uploadState: 'uploading', }; }, projection: { id: 1, applicationId: 1, origin: 1, bucket: 1, uploadState: 1, objectId: 1, extension: 1, }, fn: async (context, data) => { const eg = (0, lodash_1.groupBy)(data, 'applicationId'); for (const appId in eg) { await checkWhetherSuccess(context, appId, eg[appId]); } return { extraFile: { update: data.length, } }; } }, ]; exports.default = watchers;