@steedos/standard-object-database 2.2.55-beta.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/main/default/applications/.gitkeep +0 -0
  2. package/main/default/client/datasources.client.js +7 -0
  3. package/main/default/client/object_fields.client.js +212 -0
  4. package/main/default/client/object_layouts.client.js +86 -0
  5. package/main/default/objectTranslations/_object_reload_logs.en/_object_reload_logs.en.objectTranslation.yml +16 -0
  6. package/main/default/objectTranslations/_object_reload_logs.zh-CN/_object_reload_logs.zh-CN.objectTranslation.yml +16 -0
  7. package/main/default/objectTranslations/datasources.en/datasources.en.objectTranslation.yml +121 -0
  8. package/main/default/objectTranslations/datasources.zh-CN/datasources.zh-CN.objectTranslation.yml +105 -0
  9. package/main/default/objectTranslations/object_actions.en/object_actions.en.objectTranslation.yml +55 -0
  10. package/main/default/objectTranslations/object_actions.zh-CN/object_actions.zh-CN.objectTranslation.yml +50 -0
  11. package/main/default/objectTranslations/object_fields.en/object_fields.en.objectTranslation.yml +335 -0
  12. package/main/default/objectTranslations/object_fields.zh-CN/object_fields.zh-CN.objectTranslation.yml +312 -0
  13. package/main/default/objectTranslations/object_layouts.en/object_layouts.en.objectTranslation.yml +72 -0
  14. package/main/default/objectTranslations/object_layouts.zh-CN/object_layouts.zh-CN.objectTranslation.yml +116 -0
  15. package/main/default/objectTranslations/object_listviews.en/object_listviews.en.objectTranslation.yml +153 -0
  16. package/main/default/objectTranslations/object_listviews.zh-CN/object_listviews.zh-CN.objectTranslation.yml +146 -0
  17. package/main/default/objectTranslations/object_related_list.en/object_related_list.en.objectTranslation.yml +82 -0
  18. package/main/default/objectTranslations/object_related_list.zh-CN/object_related_list.zh-CN.objectTranslation.yml +82 -0
  19. package/main/default/objectTranslations/object_triggers.en/object_triggers.en.objectTranslation.yml +30 -0
  20. package/main/default/objectTranslations/object_triggers.zh-CN/object_triggers.zh-CN.objectTranslation.yml +29 -0
  21. package/main/default/objectTranslations/object_validation_rules.en/object_validation_rules.en.objectTranslation.yml +40 -0
  22. package/main/default/objectTranslations/object_validation_rules.zh-CN/object_validation_rules.zh-CN.objectTranslation.yml +38 -0
  23. package/main/default/objectTranslations/objects.en/objects.en.objectTranslation.yml +219 -0
  24. package/main/default/objectTranslations/objects.zh-CN/objects.zh-CN.objectTranslation.yml +218 -0
  25. package/main/default/objects/0.datasources.observe.object.js +83 -0
  26. package/main/default/objects/0.objects_reload.object.js +26 -0
  27. package/main/default/objects/1.objects.observe.object.js +61 -0
  28. package/main/default/objects/10.tabs.observe.object.js +36 -0
  29. package/main/default/objects/11.restriction_rules.observe.object.js +37 -0
  30. package/main/default/objects/12.share_rules.observe.object.js +37 -0
  31. package/main/default/objects/13.permission_fields.observe.object.js +37 -0
  32. package/main/default/objects/14.object_fields.observe.object.js +44 -0
  33. package/main/default/objects/15.permission_objects.observe.object.js +44 -0
  34. package/main/default/objects/2.object_triggers.observe.object.js +35 -0
  35. package/main/default/objects/3.permission_objects.observe.object.js +29 -0
  36. package/main/default/objects/4.permission_set.observe.object.js +39 -0
  37. package/main/default/objects/5.holidays.observe.object.js +30 -0
  38. package/main/default/objects/6.business_hours.observe.object.js +33 -0
  39. package/main/default/objects/7.object_actions.observe.object.js +43 -0
  40. package/main/default/objects/7.object_layouts.observe.object.js +33 -0
  41. package/main/default/objects/9.apps.observe.object.js +33 -0
  42. package/main/default/objects/_object_reload_logs.object.yml +10 -0
  43. package/main/default/objects/datasources.action.js +51 -0
  44. package/main/default/objects/datasources.core.js +34 -0
  45. package/main/default/objects/datasources.object.js +168 -0
  46. package/main/default/objects/datasources.object.yml +113 -0
  47. package/main/default/objects/object_actions.object.js +152 -0
  48. package/main/default/objects/object_actions.object.yml +142 -0
  49. package/main/default/objects/object_fields.action.js +128 -0
  50. package/main/default/objects/object_fields.function.js +104 -0
  51. package/main/default/objects/object_fields.object.js +501 -0
  52. package/main/default/objects/object_fields.object.yml +690 -0
  53. package/main/default/objects/object_layouts.action.js +31 -0
  54. package/main/default/objects/object_layouts.layouts.action.js +19 -0
  55. package/main/default/objects/object_layouts.object.yml +356 -0
  56. package/main/default/objects/object_listviews.action.js +93 -0
  57. package/main/default/objects/object_listviews.object.js +100 -0
  58. package/main/default/objects/object_listviews.object.yml +309 -0
  59. package/main/default/objects/object_manager.app.todo.yml +11 -0
  60. package/main/default/objects/object_related_list.object.js +110 -0
  61. package/main/default/objects/object_related_list.object.yml +208 -0
  62. package/main/default/objects/object_triggers.core.js +58 -0
  63. package/main/default/objects/object_triggers.object.js +65 -0
  64. package/main/default/objects/object_triggers.object.yml +124 -0
  65. package/main/default/objects/object_validation_rules.action.js +33 -0
  66. package/main/default/objects/object_validation_rules.object.yml +100 -0
  67. package/main/default/objects/objects.action.js +157 -0
  68. package/main/default/objects/objects.core.js +398 -0
  69. package/main/default/objects/objects.erd.data.function.js +85 -0
  70. package/main/default/objects/objects.lib.js +42 -0
  71. package/main/default/objects/objects.object.js +543 -0
  72. package/main/default/objects/objects.object.yml +512 -0
  73. package/main/default/objects/objects.tree.js +58 -0
  74. package/main/default/objects/permission_objects.core.js +75 -0
  75. package/main/default/permissionsets/.gitkeep +0 -0
  76. package/main/default/profiles/.gitkeep +0 -0
  77. package/main/default/tabs/.gitkeep +0 -0
  78. package/main/default/triggers/datasources.trigger.js +93 -0
  79. package/main/default/triggers/object_actions.trigger.js +98 -0
  80. package/main/default/triggers/object_fields.trigger.js +376 -0
  81. package/main/default/triggers/object_layouts.trigger.js +153 -0
  82. package/main/default/triggers/object_listviews.trigger.js +139 -0
  83. package/main/default/triggers/object_triggers.trigger.js +50 -0
  84. package/main/default/triggers/object_validation_rules.trigger.js +80 -0
  85. package/main/default/triggers/objects.trigger.js +136 -0
  86. package/package.json +16 -0
  87. package/package.service.js +75 -0
  88. package/public/.md +3 -0
  89. package/src/.md +3 -0
  90. package/webapp/.md +1 -0
@@ -0,0 +1,153 @@
1
+ const _ = require("underscore");
2
+ const objectql = require('@steedos/objectql');
3
+ const auth = require('@steedos/auth');
4
+ const InternalData = require('@steedos/standard-objects').internalData;
5
+ const util = require('@steedos/standard-objects').util
6
+ function check(objectName, profiles, id){
7
+ let query = {
8
+ object_name: objectName,
9
+ profiles: {$in: profiles}
10
+ }
11
+ if(id){
12
+ query._id = {$ne: id}
13
+ }
14
+ let count = Creator.getCollection("object_layouts").find(query).count();
15
+
16
+ if(count > 0){
17
+ throw new Error("同一个对象、简档只能有一条记录");
18
+ }
19
+ }
20
+
21
+ const getInternalLatouts = async function(sourceLayouts, filters){
22
+ let collection = await objectql.getObject("object_layouts");
23
+ let dbLayouts = await collection.directFind({filters, fields:['_id', 'name']});
24
+ let layouts = [];
25
+
26
+ if(!filters.is_system){
27
+ _.forEach(sourceLayouts, function(doc){
28
+ if(!_.find(dbLayouts, function(p){
29
+ return p.name === doc.name
30
+ })){
31
+ layouts.push(doc);
32
+ }
33
+ })
34
+ }
35
+ return layouts;
36
+ }
37
+
38
+ module.exports = {
39
+ beforeInsert: async function(){
40
+ let doc = this.doc
41
+ check(doc.object_name, doc.profiles);
42
+
43
+ await util.checkAPIName(this.object_name, 'name', this.doc.name, undefined, [['is_system','!=', true], ['object_name','=', doc.object_name]]);
44
+
45
+ if(doc.fields){
46
+ _.each(doc.fields, function(field){
47
+ if(field && field.required && field.readonly){
48
+ field.readonly = false
49
+ }
50
+ })
51
+ }
52
+ },
53
+ beforeUpdate: async function(){
54
+ let doc = this.doc
55
+ let id = this.id
56
+ let record = Creator.getCollection("object_layouts").findOne({_id: id}) || {};
57
+ check(doc.object_name || record.object_name, doc.profiles || record.profiles, id);
58
+ if (_.has(doc, 'name')) {
59
+ await util.checkAPIName(this.object_name, 'name', doc.name, this.id, [['is_system','!=', true], ['object_name','=', doc.object_name || record.object_name]]);
60
+ }
61
+
62
+ if(doc.fields){
63
+ _.each(doc.fields, function(field){
64
+ if(field && field.required && field.readonly){
65
+ field.readonly = false
66
+ }
67
+ })
68
+ }
69
+ },
70
+ afterFind: async function(){
71
+ let filters = InternalData.parserFilters(this.query.filters)
72
+ let layouts = []
73
+ if(filters._id && !filters._id.$ne){
74
+ let id = filters._id
75
+ id = id.replace(/\\/g, '');
76
+ let objectName = id.substr(0, id.indexOf("."));
77
+ if(objectName){
78
+ let layout = await InternalData.getObjectLayout(id);
79
+ if(layout){
80
+ layouts = [layout]
81
+ }
82
+ }
83
+ }else if(filters.object_name){
84
+ layouts = await InternalData.getObjectLayouts(filters.object_name, this.spaceId);
85
+ }
86
+
87
+ layouts = await getInternalLatouts(layouts, filters);
88
+
89
+ if(layouts){
90
+ this.data.values = this.data.values.concat(_.filter(layouts, function(layout){return layout._id && layout._id.indexOf('.') > 0 }))
91
+ }
92
+ },
93
+ afterAggregate: async function(){
94
+ let filters = InternalData.parserFilters(this.query.filters)
95
+ let layouts = []
96
+ if(filters._id && !filters._id.$ne){
97
+ let id = filters._id
98
+ id = id.replace(/\\/g, '');
99
+ let objectName = id.substr(0, id.indexOf("."));
100
+ if(objectName){
101
+ let layout = await InternalData.getObjectLayout(id);
102
+ if(layout){
103
+ layouts = [layout]
104
+ }
105
+ }
106
+ }else if(filters.object_name){
107
+ layouts = await InternalData.getObjectLayouts(filters.object_name, this.spaceId);
108
+ }
109
+
110
+ layouts = await getInternalLatouts(layouts, filters);
111
+
112
+ if(layouts){
113
+ this.data.values = this.data.values.concat(_.filter(layouts, function(layout){return layout._id && layout._id.indexOf('.') > 0 }))
114
+ }
115
+ },
116
+ afterCount: async function(){
117
+ // let result = await objectql.getObject('object_layouts').find(this.query, await auth.getSessionByUserId(this.userId, this.spaceId))
118
+ // this.data.values = result.length;
119
+ let filters = InternalData.parserFilters(this.query.filters)
120
+ let layouts = []
121
+ if(filters._id && !filters._id.$ne){
122
+ let id = filters._id
123
+ id = id.replace(/\\/g, '');
124
+ let objectName = id.substr(0, id.indexOf("."));
125
+ if(objectName){
126
+ let layout = await InternalData.getObjectLayout(id);
127
+ if(layout){
128
+ layouts = [layout]
129
+ }
130
+ }
131
+ }else if(filters.object_name){
132
+ layouts = await InternalData.getObjectLayouts(filters.object_name, this.spaceId);
133
+ }
134
+
135
+ layouts = await getInternalLatouts(layouts, filters);
136
+
137
+ if(layouts){
138
+ this.data.values = this.data.values + _.filter(layouts, function(layout){return layout._id && layout._id.indexOf('.') > 0 }).length
139
+ }
140
+ },
141
+ afterFindOne: async function(){
142
+ if(_.isEmpty(this.data.values)){
143
+ let id = this.id
144
+ let objectName = id.substr(0, id.indexOf("."));
145
+ if(objectName){
146
+ let layout = await InternalData.getObjectLayout(id);
147
+ if(layout){
148
+ this.data.values = layout;
149
+ }
150
+ }
151
+ }
152
+ }
153
+ }
@@ -0,0 +1,139 @@
1
+ const InternalData = require('@steedos/standard-objects').internalData;
2
+ const util = require('@steedos/standard-objects').util;
3
+ const objectql = require('@steedos/objectql');
4
+
5
+ const getInternalListviews = async function(sourceListviews, filters, is_system){
6
+ let collection = await objectql.getObject("object_listviews");
7
+ let dbListviews = await collection.directFind({filters, fields:['_id', 'name']});
8
+ let listviews = [];
9
+
10
+ if(!is_system){
11
+ _.forEach(sourceListviews, function(doc){
12
+ if(!_.find(dbListviews, function(p){
13
+ return p.name === doc.name
14
+ })){
15
+ listviews.push(doc);
16
+ }
17
+ })
18
+ }
19
+ return listviews;
20
+ }
21
+
22
+ module.exports = {
23
+ beforeInsert: async function () {
24
+ await util.checkAPIName(this.object_name, 'name', this.doc.name, undefined, [['is_system','!=', true], ['object_name','=', this.doc.object_name]]);
25
+
26
+ },
27
+ beforeUpdate: async function () {
28
+ const oldDoc = await objectql.getObject(this.object_name).findOne(this.id)
29
+ let name = oldDoc.name,object_name = oldDoc.object_name;
30
+ if(_.has(this.doc, 'name')){
31
+ name = this.doc.name
32
+ }
33
+ if(_.has(this.doc, 'object_name')){
34
+ object_name = this.doc.object_name
35
+ }
36
+
37
+ if(oldDoc.name === 'all' && oldDoc.name != name){
38
+ throw new Error('禁止修改「all」视图的API Name')
39
+ }
40
+
41
+ await util.checkAPIName(this.object_name, 'name', name, this.id, [['is_system','!=', true], ['object_name','=', object_name]]);
42
+ },
43
+ afterFind: async function(){
44
+ let filters = InternalData.parserFilters(this.query.filters)
45
+ let views = []
46
+ if(filters._id && !filters._id.$ne){
47
+ let id = filters._id
48
+ id = id.replace(/\\/g, '');
49
+ if(_.isString(id)){
50
+ let objectName = id.substr(0, id.indexOf("."));
51
+ if(objectName){
52
+ let view = await InternalData.getObjectListView(objectName, this.userId, id);
53
+ if(view){
54
+ views = [view];
55
+ }
56
+ }
57
+ }
58
+ }else if(filters.object_name){
59
+ views = await InternalData.getObjectListViews(filters.object_name, this.userId);
60
+ }
61
+
62
+ views = await getInternalListviews(views, this.query.filters, filters.is_system);
63
+
64
+ if(views){
65
+ this.data.values = this.data.values.concat(views)
66
+ }
67
+ },
68
+ afterAggregate: async function(){
69
+ let filters = InternalData.parserFilters(this.query.filters)
70
+ let views = []
71
+ if(filters._id && !filters._id.$ne){
72
+ let id = filters._id
73
+ id = id.replace(/\\/g, '');
74
+ if(_.isString(id)){
75
+ let objectName = id.substr(0, id.indexOf("."));
76
+ if(objectName){
77
+ let view = await InternalData.getObjectListView(objectName, this.userId, id);
78
+ if(view){
79
+ views = [view];
80
+ }
81
+ }
82
+ }
83
+ }else if(filters.object_name){
84
+ views = await InternalData.getObjectListViews(filters.object_name, this.userId);
85
+ }
86
+
87
+ views = await getInternalListviews(views, this.query.filters, filters.is_system);
88
+
89
+ if(views){
90
+ this.data.values = this.data.values.concat(views)
91
+ }
92
+ },
93
+ afterCount: async function(){
94
+ let filters = InternalData.parserFilters(this.query.filters)
95
+ let views = []
96
+ if(filters._id && !filters._id.$ne){
97
+ let id = filters._id
98
+ id = id.replace(/\\/g, '');
99
+ if(_.isString(id)){
100
+ let objectName = id.substr(0, id.indexOf("."));
101
+ if(objectName){
102
+ let view = await InternalData.getObjectListView(objectName, this.userId, id);
103
+ if(view){
104
+ views = [view];
105
+ }
106
+ }
107
+ }
108
+ }else if(filters.object_name){
109
+ views = await InternalData.getObjectListViews(filters.object_name, this.userId);
110
+ }
111
+
112
+ views = await getInternalListviews(views, this.query.filters, filters.is_system);
113
+
114
+ if(views){
115
+ this.data.values = this.data.values + views.length
116
+ }
117
+ },
118
+ afterFindOne: async function(){
119
+ if(_.isEmpty(this.data.values)){
120
+ let id = this.id
121
+ if(_.isString(id)){
122
+ let objectName = id.substr(0, id.indexOf("."));
123
+ if(objectName){
124
+ let view = await InternalData.getObjectListView(objectName, this.userId, id);
125
+ if(view){
126
+ this.data.values = view;
127
+ }
128
+ }
129
+ }
130
+ }
131
+ },
132
+ beforeDelete: async function(){
133
+ const { id } = this;
134
+ const record = await objectql.getObject(this.object_name).findOne(id);
135
+ if(record.name === 'all'){
136
+ throw new Error('禁止删除「all」视图')
137
+ }
138
+ }
139
+ }
@@ -0,0 +1,50 @@
1
+ /*
2
+ * @Author: sunhaolin@hotoa.com
3
+ * @Date: 2021-06-03 15:11:52
4
+ * @LastEditors: sunhaolin@hotoa.com
5
+ * @LastEditTime: 2022-07-29 11:31:59
6
+ * @Description:
7
+ */
8
+ const InternalData = require('@steedos/standard-objects').internalData;
9
+
10
+ module.exports = {
11
+ afterFind: async function(){
12
+ let filters = InternalData.parserFilters(this.query.filters)
13
+ if(filters.object){
14
+ let triggers = await InternalData.getObjectTriggers(filters.object, this.userId);
15
+ if(triggers){
16
+ this.data.values = this.data.values.concat(triggers)
17
+ }
18
+ }
19
+ },
20
+ afterAggregate: async function(){
21
+ let filters = InternalData.parserFilters(this.query.filters)
22
+ if(filters.object){
23
+ let triggers = await InternalData.getObjectTriggers(filters.object, this.userId);
24
+ if(triggers){
25
+ this.data.values = this.data.values.concat(triggers)
26
+ }
27
+ }
28
+ },
29
+ afterCount: async function(){
30
+ let filters = InternalData.parserFilters(this.query.filters)
31
+ if(filters.object){
32
+ let triggers = await InternalData.getObjectTriggers(filters.object, this.userId);
33
+ if(triggers){
34
+ this.data.values = this.data.values + triggers.length
35
+ }
36
+ }
37
+ },
38
+ afterFindOne: async function(){
39
+ if(_.isEmpty(this.data.values)){
40
+ let id = this.id
41
+ let objectName = id.substr(0, id.indexOf("."));
42
+ if(objectName){
43
+ let trigger = await InternalData.getObjectTrigger(objectName, this.userId, id);
44
+ if(trigger){
45
+ this.data.values = trigger;
46
+ }
47
+ }
48
+ }
49
+ }
50
+ }
@@ -0,0 +1,80 @@
1
+ /*
2
+ * @Author: baozhoutao@steedos.com
3
+ * @Date: 2022-03-28 09:35:34
4
+ * @Description:
5
+ */
6
+ const _ = require("underscore");
7
+ const util = require('@steedos/standard-objects').util;
8
+ const objectql = require("@steedos/objectql");
9
+ const auth = require('@steedos/auth');
10
+
11
+ module.exports = {
12
+ beforeFind: async function(){
13
+ delete this.query.fields;
14
+ },
15
+ beforeAggregate: async function(){
16
+ delete this.query.fields;
17
+ },
18
+ afterFind: async function(){
19
+ const { spaceId } = this;
20
+ let dataList = objectql.getAllObjectValidationRules();
21
+ if (!_.isEmpty(dataList)) {
22
+ dataList.forEach((doc) => {
23
+ if (!_.find(this.data.values, (value) => {
24
+ return value.name === doc.name
25
+ })) {
26
+ this.data.values.push(doc);
27
+ }
28
+ })
29
+ const records = objectql.getSteedosSchema().metadataDriver.find(this.data.values, this.query, spaceId);
30
+ if (records.length > 0) {
31
+ this.data.values = records;
32
+ } else {
33
+ this.data.values.length = 0;
34
+ }
35
+ }
36
+
37
+ },
38
+ afterAggregate: async function(){
39
+ const { spaceId } = this;
40
+ let dataList = objectql.getAllObjectValidationRules();
41
+ if (!_.isEmpty(dataList)) {
42
+ dataList.forEach((doc) => {
43
+ if (!_.find(this.data.values, (value) => {
44
+ return value.name === doc.name
45
+ })) {
46
+ this.data.values.push(doc);
47
+ }
48
+ })
49
+ const records = objectql.getSteedosSchema().metadataDriver.find(this.data.values, this.query, spaceId);
50
+ if (records.length > 0) {
51
+ this.data.values = records;
52
+ } else {
53
+ this.data.values.length = 0;
54
+ }
55
+ }
56
+ },
57
+ afterCount: async function(){
58
+ delete this.query.fields;
59
+ let result = await objectql.getObject(this.object_name).find(this.query, await auth.getSessionByUserId(this.userId, this.spaceId))
60
+ this.data.values = result.length;
61
+ },
62
+ afterFindOne: async function(){
63
+ if (_.isEmpty(this.data.values)) {
64
+ const all = objectql.getAllObjectValidationRules();
65
+ const id = this.id;
66
+ this.data.values = _.find(all, function (item) {
67
+ return item._id === id
68
+ });
69
+ }
70
+ },
71
+ beforeInsert: async function () {
72
+ await util.checkAPIName(this.object_name, 'name', this.doc.name, undefined, [['is_system','!=', true]]);
73
+
74
+ },
75
+ beforeUpdate: async function () {
76
+ if (_.has(this.doc, 'name')) {
77
+ await util.checkAPIName(this.object_name, 'name', this.doc.name, this.id, [['is_system','!=', true]]);
78
+ }
79
+ }
80
+ }
@@ -0,0 +1,136 @@
1
+ const InternalData = require('@steedos/standard-objects').internalData;
2
+ const _ = require('underscore');
3
+ const objectql = require('@steedos/objectql');
4
+ const objectTree = require('../objects/objects.tree.js');
5
+
6
+ module.exports = {
7
+ afterFind: async function(){
8
+ let userId = this.userId
9
+ let spaceId = this.spaceId;
10
+ for (const doc of this.data.values) {
11
+ doc.fields = Object.assign({}, doc.fields, await InternalData.getDefaultSysFields(doc.name, userId)) ;
12
+ }
13
+ // this.data.values = this.data.values.concat(await InternalData.findObjects(userId, this.query.filters));
14
+
15
+ this.data.values = this.data.values.concat(await InternalData.getObjects(userId));
16
+
17
+ this.data.values = objectql.getSteedosSchema().metadataDriver.find(this.data.values, this.query, spaceId);
18
+
19
+ _.each(this.data.values, function(value){
20
+ if(value){
21
+ delete value.actions;
22
+ delete value.fields;
23
+ delete value.list_views;
24
+ delete value.permission_set;
25
+ delete value.triggers;
26
+ }
27
+ })
28
+ },
29
+ afterAggregate: async function(){
30
+ let userId = this.userId
31
+ let spaceId = this.spaceId;
32
+ for (const doc of this.data.values) {
33
+ doc.fields = Object.assign({}, doc.fields, await InternalData.getDefaultSysFields(doc.name, userId)) ;
34
+ }
35
+ // this.data.values = this.data.values.concat(await InternalData.findObjects(userId, this.query.filters));
36
+
37
+ this.data.values = this.data.values.concat(await InternalData.getObjects(userId));
38
+
39
+ this.data.values = objectql.getSteedosSchema().metadataDriver.find(this.data.values, this.query, spaceId);
40
+
41
+ _.each(this.data.values, function(value){
42
+ if(value){
43
+ delete value.actions;
44
+ delete value.fields;
45
+ delete value.list_views;
46
+ delete value.permission_set;
47
+ delete value.triggers;
48
+ }
49
+ })
50
+ },
51
+ afterCount: async function(){
52
+ let userId = this.userId
53
+ let spaceId = this.spaceId;
54
+ this.data.values = this.data.values + objectql.getSteedosSchema().metadataDriver.count(await InternalData.getObjects(userId), this.query, spaceId);
55
+ },
56
+ afterFindOne: async function(){
57
+ if(_.isEmpty(this.data.values)){
58
+ this.data.values = await InternalData.getObject(this.id, this.userId);
59
+ }
60
+ if(this.data.values){
61
+ delete this.data.values.actions;
62
+ delete this.data.values.fields;
63
+ delete this.data.values.list_views;
64
+ delete this.data.values.permission_set;
65
+ delete this.data.values.triggers;
66
+ }
67
+ },
68
+ afterInsert: async function(){
69
+ const doc = this.doc;
70
+ if(doc.enable_tree){
71
+ await objectTree.insertParentAndChildrenFieldForTreeObject(doc)
72
+ }
73
+ // let spaceProfiles = await objectql.getObject('permission_set').find({space: this.spaceId, type: 'profile'});
74
+ // await objectql.getObject('object_layouts').insert({
75
+ // label: 'default',
76
+ // object_name: this.doc.name,
77
+ // actions: _.keys(Creator.getObject('base').actions),
78
+ // profiles: _.pluck(spaceProfiles, 'name'),
79
+ // fields: [{
80
+ // field: 'name',
81
+ // },{
82
+ // field: 'created',
83
+ // },{
84
+ // field: 'created_by',
85
+ // },{
86
+ // field: 'modified',
87
+ // },{
88
+ // field: 'modified_by',
89
+ // }],
90
+ // space: this.spaceId
91
+ // })
92
+ },
93
+ beforeUpdate: async function () {
94
+ const { doc, id, object_name } = this;
95
+ // 如果用户修改了apiname,则校验 数据源必须一致为default数据源;且数据库中不能有新的apiname对应的表
96
+ if (_.has(doc, 'name')) {
97
+ const obj = this.getObject(object_name);
98
+ const latestDoc = await obj.findOne(id);
99
+ const newObjName = doc.name;
100
+ // !!!暂不允许修改name
101
+ if (newObjName && (latestDoc.name != newObjName)) {
102
+ throw new Error('禁止修改API 名称。');
103
+ }
104
+ /*
105
+ if (newObjName && (latestDoc.name != newObjName) && latestDoc.datasource === 'default') {
106
+ const datasource = objectql.getDataSource(latestDoc.datasource);
107
+ const isExitsRecords = await datasource.isCollectionExitsRecords(newObjName);
108
+ // 如果新表中存在记录则抛错,提示用户
109
+ if (isExitsRecords) {
110
+ throw new Error(`${newObjName} 在库中已存在记录,不予进行。`);
111
+ }
112
+ }
113
+ */
114
+ }
115
+ },
116
+ afterUpdate: async function () {
117
+ const { doc, previousDoc } = this;
118
+ // 零代码配置 enable_tree: true 时,添加parent、children两个字段
119
+ if(previousDoc.enable_tree !== doc.enable_tree && doc.enable_tree === true){
120
+ // doc中缺少owner,space等字段值,需要从previousDoc中取到一起带过去
121
+ await objectTree.insertParentAndChildrenFieldForTreeObject(Object.assign({}, previousDoc, doc), true)
122
+ }
123
+ /*
124
+ const { doc, previousDoc, id, object_name } = this;
125
+ const obj = this.getObject(object_name);
126
+ const latestDoc = await obj.findOne(id);
127
+ // 对象的apiname修改后调整库中的表名
128
+ if (latestDoc.name && (latestDoc.name != previousDoc.name) && previousDoc.datasource === latestDoc.datasource && latestDoc.datasource === 'default'){
129
+ const newObjName = latestDoc.name;
130
+ const oldObjName = previousDoc.name;
131
+ const datasource = objectql.getDataSource(latestDoc.datasource);
132
+ await datasource.renameCollection(newObjName, oldObjName)
133
+ }
134
+ */
135
+ }
136
+ }
package/package.json ADDED
@@ -0,0 +1,16 @@
1
+ {
2
+ "name": "@steedos/standard-object-database",
3
+ "version": "2.2.55-beta.16",
4
+ "main": "package.service.js",
5
+ "private": false,
6
+ "publishConfig": {
7
+ "access": "public"
8
+ },
9
+ "keywords": [
10
+ "steedos"
11
+ ],
12
+ "description": "steedos package",
13
+ "repository": {},
14
+ "license": "MIT",
15
+ "dependencies": {}
16
+ }
@@ -0,0 +1,75 @@
1
+ /*
2
+ * @Author: sunhaolin@hotoa.com
3
+ * @Date: 1985-10-26 16:15:00
4
+ * @LastEditors: sunhaolin@hotoa.com
5
+ * @LastEditTime: 2022-07-29 13:29:26
6
+ * @Description:
7
+ */
8
+ "use strict";
9
+ const project = require('./package.json');
10
+ const packageName = project.name;
11
+ const packageLoader = require('@steedos/service-meteor-package-loader');
12
+ /**
13
+ * @typedef {import('moleculer').Context} Context Moleculer's Context
14
+ */
15
+ module.exports = {
16
+ name: packageName,
17
+ namespace: "steedos",
18
+ mixins: [packageLoader],
19
+ /**
20
+ * Settings
21
+ */
22
+ settings: {
23
+ packageInfo: {
24
+ path: __dirname,
25
+ name: packageName
26
+ }
27
+ },
28
+
29
+ /**
30
+ * Dependencies
31
+ */
32
+ dependencies: ['~packages-standard-objects'],
33
+
34
+ /**
35
+ * Actions
36
+ */
37
+ actions: {
38
+
39
+ },
40
+
41
+ /**
42
+ * Events
43
+ */
44
+ events: {
45
+
46
+ },
47
+
48
+ /**
49
+ * Methods
50
+ */
51
+ methods: {
52
+
53
+ },
54
+
55
+ /**
56
+ * Service created lifecycle event handler
57
+ */
58
+ async created() {
59
+
60
+ },
61
+
62
+ /**
63
+ * Service started lifecycle event handler
64
+ */
65
+ async started() {
66
+
67
+ },
68
+
69
+ /**
70
+ * Service stopped lifecycle event handler
71
+ */
72
+ async stopped() {
73
+
74
+ }
75
+ };
package/public/.md ADDED
@@ -0,0 +1,3 @@
1
+ ### 静态公开资源文件
2
+
3
+ - 此文件夹中的文件自动添加到根路由
package/src/.md ADDED
@@ -0,0 +1,3 @@
1
+ ### src
2
+
3
+ - 软件包不会加载此文件夹下的文件, 可用于存放ts文件等
package/webapp/.md ADDED
@@ -0,0 +1 @@
1
+ - 存放web项目