@underpostnet/underpost
Version:
81 lines (72 loc) • 2.52 kB
JavaScript
import { DataBaseProvider } from '../../db/DataBaseProvider.js';
import { loggerFactory } from '../../server/logger.js';
import crypto from 'crypto';
const logger = loggerFactory(import.meta);
const FileFactory = {
upload: async function (req, File) {
const results = [];
if (!req.files) throw { message: 'not file found' };
if (Array.isArray(req.files.file)) for (const file of req.files.file) results.push(await new File(file).save());
else if (Object.keys(req.files).length > 0)
for (const keyFile of Object.keys(req.files)) results.push(await new File(req.files[keyFile]).save());
let index = -1;
for (const file of results) {
index++;
const [result] = await File.find({
_id: file._id,
}).select({ _id: 1, name: 1, mimetype: 1 });
results[index] = result;
}
return results;
},
hex: (raw = '') => {
return Buffer.from(raw, 'utf8').toString('hex');
// reverse hexValue.toString()
},
svg: (data = new Buffer(), name = '') => {
return {
name: name,
data: data,
size: data.length,
encoding: '7bit',
tempFilePath: '',
truncated: false,
mimetype: 'image/svg+xml',
md5: crypto.createHash('md5').update(data).digest('hex'),
cid: undefined,
};
},
};
const FileService = {
post: async (req, res, options) => {
/** @type {import('./file.model.js').FileModel} */
const File = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.File;
return await FileFactory.upload(req, File);
},
get: async (req, res, options) => {
/** @type {import('./file.model.js').FileModel} */
const File = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.File;
if (req.path.startsWith('/blob') && req.params.id) {
const file = await File.findOne({ _id: req.params.id });
res.set('Content-Type', file.mimetype);
return Buffer.from(file.data, 'base64');
}
switch (req.params.id) {
case 'all':
return await File.find();
default:
return await File.find({
_id: req.params.id,
});
}
},
delete: async (req, res, options) => {
/** @type {import('./file.model.js').FileModel} */
const File = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.File;
switch (req.params.id) {
default:
return await File.findByIdAndDelete(req.params.id);
}
},
};
export { FileService, FileFactory };