@opengis/fastify-table
Version:
core-plugins
58 lines (57 loc) • 2.07 kB
JavaScript
import path from "node:path";
import { logger, applyHook, pgClients, dataInsert } from "../../../../utils.js";
import uploadMultiPart from "../../../plugins/file/uploadMultiPart.js";
export default async function upload(req) {
const { pg = pgClients.client } = req;
const file = await uploadMultiPart(req);
const objectId = req.params["*"] || "uploads";
const hookData = await applyHook("preUpload", {
id: req.query?.id,
subdir: objectId,
token: req.query?.table,
file,
user: req.user,
});
if (hookData)
return hookData;
const resultInsert = pg
? await dataInsert({
pg,
table: "crm.files",
data: {
uploaded_name: file.originalFilename?.toLocaleLowerCase?.(),
file_path: file.relativeFilepath?.replace?.(/\\/g, "/"),
ext: file.extension,
size: file.size,
file_status: 1,
entity_id: objectId,
},
uid: req.user?.uid,
}).then((el) => el?.rows?.[0] || {})
: {};
const { dir: relativeDirpath, base: fileName } = resultInsert?.file_path
? path.parse(resultInsert.file_path)
: {
relativeDirpath: path.dirname(file.relativeFilepath || ""),
fileName: file.newFilename,
};
logger.file("file/upload", {
filepath: file.relativeFilepath,
objectId,
uid: req.user?.uid,
});
return {
res: "ok",
name: file?.originalFilename,
result: {
file_id: resultInsert?.file_id,
format: resultInsert?.ext || file.extension,
size: resultInsert?.size || file?.size,
entity_id: resultInsert?.entity_id,
file_path: resultInsert?.file_path || file?.relativeFilepath?.replace(/\\/g, "/"),
file_name: file?.originalFilename?.toLocaleLowerCase?.(),
dir: relativeDirpath?.replace?.(/\\/g, "/"),
native_file_name: fileName,
},
};
}