@wikoci/payloadjs
Version:
Payload CMS SDK for use in javascript
119 lines (93 loc) • 3.7 kB
JavaScript
const upload = (
options = {
}
) => {
return (incomingConfig) => {
incomingConfig.collections.filter(collection => {
if (collection.upload) {
collection.endpoints =collection?.endpoints || []
collection.endpoints = [
{
path: "/",
method: "post",
handler: async function (req, res, next) {
try {
if (!req.files.file)
return res.status(400).send({ error: "No files " });
var data = JSON.parse(req.body.data || {});
var files = [];
var multiple = req.files?.file.length || 0;
multiple > 0
? (files = req.files.file)
: files.push(req.files.file);
var response = [];
var errors = [];
console.log("Files", files);
for await (var file of files) {
await req.payload
.create({
collection: req.collection.config.slug,
data: data,
file: file,
})
.then((e) => response.push(e))
.catch((err) => errors.push(err));
}
res.send({ doc: response, errors: errors });
} catch (err) {
console.log(err);
res
.status(400)
.send({ error: "Action limited", data: response });
}
},
},
{
path: "/:id",
method: "put",
handler: async function (req, res, next) {
try {
if (!req.files.file)
return res.status(400).send({ error: "No files " });
var data = JSON.parse(req.body.data || {});
var files = [];
var multiple = req.files?.file.length || 0;
multiple > 0
? (files = req.files.file)
: files.push(req.files.file);
var response = [];
var errors = [];
console.log("Files", files);
for await (var file of files) {
await req.payload
.update({
id:req.params.id,
collection: req.collection.config.slug,
data: data,
file: file,
})
.then((e) => response.push(e))
.catch((err) => errors.push(err));
}
res.send({ doc: response, errors: errors });
} catch (err) {
console.log(err);
res
.status(400)
.send({ error: "Action limited", data: response });
}
},
},
...collection.endpoints,
];
}
})
const config = {
...incomingConfig,
};
return config;
};
};
module.exports = {
upload
};