70 lines
2.0 KiB
JavaScript
70 lines
2.0 KiB
JavaScript
import mkdirp from 'mkdirp';
|
|
import { resizeAndSave } from '../utils/imageResizer';
|
|
import httpStatus from '../requestHandlers/update';
|
|
import findOne from '../requestHandlers/findOne';
|
|
|
|
export async function update(req, res, next, config) {
|
|
req.model.setDefaultLocale(req.locale);
|
|
|
|
let doc = await findOne(req);
|
|
if (!doc)
|
|
return res.status(httpStatus.NOT_FOUND).send('Not Found');
|
|
|
|
Object.keys(req.body).forEach(e => {
|
|
doc[e] = req.body[e];
|
|
});
|
|
|
|
if (req.files && req.files.file) {
|
|
doc['filename'] = req.files.file.name;
|
|
let outputFilepath = `${config.staticDir}/${req.files.file.name}`;
|
|
let moveError = await req.files.file.mv(outputFilepath);
|
|
if (moveError) return res.status(500).send(moveError);
|
|
doc['sizes'] = await resizeAndSave(config, req.files.file);
|
|
}
|
|
|
|
doc.save((saveError) => {
|
|
if (saveError)
|
|
return res.status(httpStatus.INTERNAL_SERVER_ERROR).json({ error: saveError });
|
|
|
|
return res.json({
|
|
message: 'success',
|
|
result: doc.toJSON({ virtuals: true })
|
|
});
|
|
});
|
|
}
|
|
|
|
export async function upload(req, res, next, config) {
|
|
if (!req.files || Object.keys(req.files).length === 0) {
|
|
return res.status(400).send('No files were uploaded.');
|
|
}
|
|
|
|
mkdirp(config.staticDir, (err) => {
|
|
if (err) {
|
|
console.error(err);
|
|
res.status(500).send('Upload failed.');
|
|
}
|
|
});
|
|
|
|
let outputFilepath = `${config.staticDir}/${req.files.file.name}`;
|
|
let moveError = await req.files.file.mv(outputFilepath);
|
|
if (moveError) return res.status(500).send(moveError);
|
|
let outputSizes = await resizeAndSave(config, req.files.file);
|
|
|
|
req.model.create({
|
|
name: req.body.name,
|
|
caption: req.body.caption,
|
|
description: req.body.description,
|
|
filename: req.files.file.name,
|
|
sizes: outputSizes
|
|
}, (mediaCreateError, result) => {
|
|
if (mediaCreateError)
|
|
return res.status(500).json({ error: mediaCreateError });
|
|
|
|
return res.status(201)
|
|
.json({
|
|
message: 'success',
|
|
result: result.toJSON({ virtuals: true })
|
|
});
|
|
});
|
|
}
|