@coko/server
Version:
Reusable server for use by Coko's projects
69 lines • 3 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.deleteFiles = exports.createFile = void 0;
const logger_1 = __importDefault(require("../../logger"));
const file_model_1 = __importDefault(require("./file.model"));
const useTransaction_1 = __importDefault(require("../useTransaction"));
const fileStorage_1 = __importDefault(require("../../fileStorage"));
const FileStorage_1 = __importDefault(require("../../fileStorage/FileStorage"));
const constants_1 = require("./constants");
const { FILE_CONTROLLER } = constants_1.labels;
const getStorage = (connectionConfig) => {
if (!connectionConfig)
return fileStorage_1.default;
return new FileStorage_1.default(connectionConfig);
};
const createFile = async (fileStream, name, options = {}) => {
try {
const { alt = null, caption = null, forceObjectKeyValue, meta, objectId = null, public: isPublic, s3, tags = [], trx, } = options;
const storage = getStorage(s3);
const storedObjects = await storage.upload(fileStream, name, {
forceObjectKeyValue,
public: isPublic,
});
return file_model_1.default.insert({
name,
alt,
caption,
tags,
objectId,
storedObjects,
meta,
}, { trx });
}
catch (e) {
logger_1.default.error(`${FILE_CONTROLLER} createFile: ${e.message}`);
throw e;
}
};
exports.createFile = createFile;
const deleteFiles = async (ids, options = {}) => {
try {
const { removeFromFileServer = true, trx, s3 } = options;
const storage = getStorage(s3);
logger_1.default.info(`${FILE_CONTROLLER} deleteFiles: deleting files with ids ${ids}`);
return (0, useTransaction_1.default)(async (tr) => {
if (removeFromFileServer) {
logger_1.default.info(`${FILE_CONTROLLER} deleteFiles: flag removeFromFileServer is enabled and will trigger permanent deletion of files in file server too`);
const toBeDeletedFiles = await file_model_1.default.query(tr).findByIds(ids);
await Promise.all(toBeDeletedFiles.map(async (deletedFile) => {
const { storedObjects } = deletedFile;
const keys = [];
storedObjects.forEach(storedObject => keys.push(storedObject.key));
await storage.delete(keys);
}));
}
const affectedRows = await Promise.all(ids.map(async (id) => file_model_1.default.query(tr).deleteById(id)));
return affectedRows.length;
}, { trx });
}
catch (e) {
logger_1.default.error(`${FILE_CONTROLLER} deleteFiles: ${e.message}`);
throw e;
}
};
exports.deleteFiles = deleteFiles;
//# sourceMappingURL=file.controller.js.map