UNPKG

@coko/server

Version:

Reusable server for use by Coko's projects

69 lines 3 kB
"use strict"; 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