block_lib_facade.js 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. /**
  2. * Created by CSL on 2018-12-17.
  3. */
  4. let mongoose = require('mongoose');
  5. let blModel = mongoose.model('blockLibsModel');
  6. module.exports = {
  7. getLibNames: getLibNames,
  8. getLib: getLib,
  9. getLibNamesAndFirstLib: getLibNamesAndFirstLib,
  10. saveBlock: saveBlock
  11. };
  12. // userID、compilationID
  13. async function getLibNames(data) {
  14. let libNames = await blModel.find({userID: data.userID, compilation: data.compilationID}, ["libID","libName","-_id"]);
  15. return libNames;
  16. };
  17. // libID
  18. async function getLib(data) {
  19. let lib = await blModel.findOne({libID: data.libID});
  20. return lib;
  21. };
  22. // userID、compilationID
  23. async function getLibNamesAndFirstLib(data) {
  24. let libNames = await getLibNames(data);
  25. let firstLib = await getLib(libNames[0]);
  26. return {libNames: libNames, firstLib: firstLib};
  27. };
  28. /*------------------------------------------------------------------------------
  29. data参数示例:
  30. {
  31. libID: 3,
  32. nodeID: 5,
  33. create: {node}
  34. delete: true
  35. update: {nodeName: 'xxx', children: [...]}
  36. }
  37. 说明: libID、nodeID 必须。 create|update|delete三选一。
  38. create属性值是完整的node节点数据。
  39. delete属性值是true。
  40. update属性值是要修改的属性键值对组成的对象。
  41. ------------------------------------------------------------------------------*/
  42. async function saveBlock(data) {
  43. if (data.create) {
  44. await blModel.update({libID: data.libID}, {$addToSet: {datas: data.create}});
  45. }
  46. if (data.delete) {
  47. await blModel.update({libID: data.libID}, {$pull: {datas: {ID: data.nodeID}}});
  48. }
  49. else if (data.update){
  50. let doc = await blModel.findOne({libID: data.libID});
  51. let datas = doc._doc.datas;
  52. for (let i = 0; i < datas.length; i++) {
  53. if (datas[i].ID == data.nodeID) {
  54. for (let pn in data.update){
  55. datas[i][pn] = data.update[pn];
  56. };
  57. await doc.save();
  58. break;
  59. }
  60. };
  61. };
  62. return 'saveBlock.OK';
  63. };