UNPKG

@opengis/fastify-table

Version:

core-plugins

109 lines (97 loc) 2.86 kB
import { config, dataUpdate, logger, pgClients, } from '../../../../utils.js'; const resp = { message: 'File not found', status: 404 }; /** * Апі використовується для видалення файлів за допомогою fs або s3 * * @method GET * @summary Видалення файлів і оновлення логів в БД * @priority 5 * @alias deleteFileAPI * @type api * @tag file * @requires deleteFile * @param {Object} params Параметри URL * @param {String} params[0] Шлях до файла * @errors 403,500 * @returns {Number} status Номер помилки * @returns {String|Object} error Опис помилки * @returns {Object} headers Заголовки HTTP * @returns {String} message Повідомлення про успішне виконання або об'єкт з параметрами */ export default async function deleteFileAPI(req) { const { pg = pgClients.client, params = {}, user = {}, } = req; if (!params['*']) { return resp; } const filename = params['*'].startsWith('/') || /^[0-9]+$/.test(params['*']) ? params['*'] : `/${params['*']}`; const { uid, user_rnokpp: rnokpp } = user; if (!filename) { logger.file('file', { level: 'INFO', type: 'delete', message: 'No required param "filename"', file: params['*'], uid, rnokpp, }); return resp; } if (filename.includes('..')) { logger.file('file', { level: 'WARN', type: 'delete', message: 'injection attempt', file: params['*'], uid, rnokpp, }); return resp; } try { const result = await pg.query('select file_id, file_path as fpath, uid from crm.files where $1 in (file_path, file_id)', [filename]) .then((res1) => res1.rows?.[0] || {}); const res = await dataUpdate({ pg, table: 'crm.files', id: result?.file_id, data: { file_status: 3 }, uid, }); if (!res) { logger.file('file', { level: 'INFO', type: 'delete', message: resp.message, file: params['*'], uid, rnokpp, }); return resp; } const message = { id: res.file_id, filepath: res.file_path }; logger.file('file', { level: 'INFO', type: 'delete', message, file: params['*'], uid, rnokpp, }); return { message, status: 200 }; } catch (err) { logger.file('file', { level: 'ERROR', type: 'delete', message: err.toString(), file: params['*'], uid, rnokpp, }); return { error: config?.local ? err.toString() : 'Помилка видалення файлу', status: 500 }; } }