2
0
mirror of https://github.com/frappe/books.git synced 2024-11-14 17:34:04 +00:00
books/server/restAPI.js
thefalconx33 233ad5eaa5 Serve resized images dynamically on request (#94)
* Added image upload to rest api

* Add file-loader and indexEntry

* Add file-loader and indexEntry

* Added delete file route

* Thumbnail creation with imagemagick

* Added unauthorized event

* Rebase to a new branch

* Revert Time.vue

* Enable friendly errors plugin
2018-09-29 12:47:43 +05:30

118 lines
4.3 KiB
JavaScript

const frappe = require('frappejs');
const path = require('path');
const multer = require('multer');
module.exports = {
setup(app) {
// get list
app.get('/api/resource/:doctype', frappe.asyncHandler(async function(request, response) {
for (let key of ['fields', 'filters']) {
if (request.query[key]) {
request.query[key] = JSON.parse(request.query[key]);
}
}
let data = await frappe.db.getAll({
doctype: request.params.doctype,
fields: request.query.fields,
filters: request.query.filters,
start: request.query.start || 0,
limit: request.query.limit || 20,
order_by: request.query.order_by,
order: request.query.order
});
return response.json(data);
}));
// create
app.post('/api/resource/:doctype', frappe.asyncHandler(async function(request, response) {
let data = request.body;
data.doctype = request.params.doctype;
let doc = frappe.newDoc(data);
await doc.insert();
await frappe.db.commit();
return response.json(doc.getValidDict());
}));
// update
app.put('/api/resource/:doctype/:name', frappe.asyncHandler(async function(request, response) {
let data = request.body;
let doc = await frappe.getDoc(request.params.doctype, request.params.name);
Object.assign(doc, data);
await doc.update();
await frappe.db.commit();
return response.json(doc.getValidDict());
}));
const upload = multer({
storage: multer.diskStorage({
destination: (req, file, cb) => {
cb(null, frappe.conf.staticPath)
},
filename: (req, file, cb) => {
const filename = file.originalname.split('.')[0];
const extension = path.extname(file.originalname);
const now = Date.now();
cb(null, filename + '-' + now + extension);
}
})
});
app.post('/api/upload/:doctype/:name/:fieldname', upload.array('files', 10), frappe.asyncHandler(async function(request, response) {
const files = request.files;
const { doctype, name, fieldname } = request.params;
let fileDocs = [];
for (let file of files) {
const doc = frappe.newDoc({
doctype: 'File',
name: path.join('/', file.path),
filename: file.originalname,
mimetype: file.mimetype,
size: file.size,
referenceDoctype: doctype,
referenceName: name,
referenceFieldname: fieldname
});
await doc.insert();
await frappe.db.setValue(doctype, name, fieldname, doc.name);
fileDocs.push(doc.getValidDict());
}
return response.json(fileDocs);
}));
// get document
app.get('/api/resource/:doctype/:name', frappe.asyncHandler(async function(request, response) {
let doc = await frappe.getDoc(request.params.doctype, request.params.name);
return response.json(doc.getValidDict());
}));
// get value
app.get('/api/resource/:doctype/:name/:fieldname', frappe.asyncHandler(async function(request, response) {
let value = await frappe.db.getValue(request.params.doctype, request.params.name, request.params.fieldname);
return response.json({value: value});
}));
// delete
app.delete('/api/resource/:doctype/:name', frappe.asyncHandler(async function(request, response) {
let doc = await frappe.getDoc(request.params.doctype, request.params.name)
await doc.delete();
return response.json({});
}));
// delete many
app.delete('/api/resource/:doctype', frappe.asyncHandler(async function(request, response) {
let names = request.body;
for (let name of names) {
let doc = await frappe.getDoc(request.params.doctype, name);
await doc.delete();
}
return response.json({});
}));
}
};