/** * Created by CSL on 2018-12-17. */ let mongoose = require('mongoose'); let blModel = mongoose.model('blockLibsModel'); module.exports = { getLibNames: getLibNames, getLib: getLib, getLibNamesAndFirstLib: getLibNamesAndFirstLib, saveBlock: saveBlock }; // userID、compilationID async function getLibNames(data) { let libNames = await blModel.find({userID: data.userID, compilation: data.compilationID}, ["libID","libName","-_id"]); return libNames; }; // libID async function getLib(data) { let lib = await blModel.findOne({libID: data.libID}); return lib; }; // userID、compilationID async function getLibNamesAndFirstLib(data) { let libNames = await getLibNames(data); let firstLib = await getLib(libNames[0]); return {libNames: libNames, firstLib: firstLib}; }; /*------------------------------------------------------------------------------ data参数示例: { libID: 3, nodeID: 5, create: {node} delete: true update: {nodeName: 'xxx', children: [...]} } 说明: libID、nodeID 必须。 create|update|delete三选一。 create属性值是完整的node节点数据。 delete属性值是true。 update属性值是要修改的属性键值对组成的对象。 ------------------------------------------------------------------------------*/ async function saveBlock(data) { if (data.create) { await blModel.update({libID: data.libID}, {$addToSet: {datas: data.create}}); } if (data.delete) { await blModel.update({libID: data.libID}, {$pull: {datas: {ID: data.nodeID}}}); } else if (data.update){ let doc = await blModel.findOne({libID: data.libID}); let datas = doc._doc.datas; for (let i = 0; i < datas.length; i++) { if (datas[i].ID == data.nodeID) { for (let pn in data.update){ datas[i][pn] = data.update[pn]; }; await doc.save(); break; } }; }; return 'saveBlock.OK'; };