block_lib_facade.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. /**
  2. * Created by CSL on 2018-12-17.
  3. */
  4. let mongoose = require('mongoose');
  5. let blModel = mongoose.model('blockLibsModel');
  6. let uuid = require('../../../public/web/uuid');
  7. module.exports = {
  8. getLibNames: getLibNames,
  9. getLib: getLib,
  10. getLibNamesAndFirstLib: getLibNamesAndFirstLib,
  11. copyTemplateLib: copyTemplateLib,
  12. saveBlock: saveBlock
  13. };
  14. // userID、compilationID
  15. async function getLibNames(data) {
  16. let libNames = await blModel.find({userID: data.userID, compilationID: data.compilationID}, ["libID","libName","-_id"]);
  17. return libNames;
  18. };
  19. // libID
  20. async function getLib(data) {
  21. let lib = await blModel.findOne({libID: data.libID});
  22. return lib;
  23. };
  24. // userID、compilationID
  25. async function getLibNamesAndFirstLib(data) {
  26. let libNames = await getLibNames(data);
  27. let lib = null;
  28. if (libNames.length == 0){
  29. lib = await copyTemplateLib(data.userID, data.userName, data.compilationID);
  30. libNames.push({libID: lib.libID, libName: lib.libName});
  31. }
  32. else{
  33. lib = await getLib(libNames[0]);
  34. }
  35. return {libNames: libNames, firstLib: lib};
  36. };
  37. async function copyTemplateLib(userID, userName, compilationID) {
  38. let template = await getLib({libID: '00000000'});
  39. let newLib = {
  40. userID: userID,
  41. compilationID: compilationID,
  42. libID: uuid.v1(),
  43. libName: `${userName}的块模板库`,
  44. datas: template.datas,
  45. share: template.share
  46. };
  47. newLib.share.shareName = `共享-${newLib.libName}`;
  48. await blModel.create(newLib);
  49. console.log(JSON.stringify(newLib));
  50. return newLib;
  51. };
  52. /*------------------------------------------------------------------------------
  53. 参数: {libID: n, nodeID: m, create: {node} | delete: true | update: {A:'xxx', B:'xxx'} }
  54. 说明: libID、nodeID 必须。 create|update|delete三选一。
  55. create属性值:完整的node节点数据。
  56. delete属性值:固定为true(false没有实际意义)。
  57. update属性值:列出多个要修改的结点属性(键值对组成的对象)。
  58. 示例: {libID: 3, nodeID: 5, create: {....}}
  59. {libID: 3, nodeID: 5, delete: true}
  60. {libID: 3, nodeID: 5, update: {nodeName: 'xxx', children: [...]} }
  61. ------------------------------------------------------------------------------*/
  62. async function saveBlock(data) {
  63. if (data.create) {
  64. await blModel.update({libID: data.libID}, {$addToSet: {datas: data.create}});
  65. }
  66. if (data.delete) {
  67. console.log(JSON.stringify(data));
  68. console.log(data.nodeID);
  69. await blModel.update({libID: data.libID}, {$pull: {datas: {ID: data.nodeID}}});
  70. if (data.delete.nodeType == 1){ // 同步删除所有子结点
  71. await blModel.update({libID: data.libID}, {$pull: {datas: {ParentID: data.nodeID}}});
  72. }
  73. }
  74. else if (data.update){
  75. let doc = await blModel.findOne({libID: data.libID});
  76. let datas = doc._doc.datas;
  77. for (let i = 0; i < datas.length; i++) {
  78. if (datas[i].ID == data.nodeID) {
  79. for (let pn in data.update){
  80. datas[i][pn] = data.update[pn];
  81. };
  82. await doc.save();
  83. break;
  84. }
  85. };
  86. };
  87. return 'saveBlock.OK';
  88. };