@steedos/service-metadata-objects 2.1.49 → 2.1.53
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.
- package/lib/actionsHandler.d.ts +1 -0
- package/lib/actionsHandler.js +12 -3
- package/lib/actionsHandler.js.map +1 -1
- package/lib/formula/formulaActionHandler.d.ts +1 -0
- package/lib/formula/formulaActionHandler.js +16 -0
- package/lib/formula/formulaActionHandler.js.map +1 -1
- package/lib/lookup/LookupActionHandler.d.ts +2 -2
- package/lib/lookup/LookupActionHandler.js +32 -29
- package/lib/lookup/LookupActionHandler.js.map +1 -1
- package/lib/master-detail/masterDetailActionHandler.d.ts +7 -6
- package/lib/master-detail/masterDetailActionHandler.js +85 -69
- package/lib/master-detail/masterDetailActionHandler.js.map +1 -1
- package/lib/objects/fields/index.d.ts +1 -0
- package/lib/objects/fields/index.js +143 -3
- package/lib/objects/fields/index.js.map +1 -1
- package/lib/objects/index.js +40 -20
- package/lib/objects/index.js.map +1 -1
- package/lib/objects.service.js +11 -0
- package/lib/objects.service.js.map +1 -1
- package/lib/summary/summaryActionHandler.d.ts +1 -0
- package/lib/summary/summaryActionHandler.js +16 -0
- package/lib/summary/summaryActionHandler.js.map +1 -1
- package/package.json +2 -2
- package/src/actionsHandler.ts +10 -3
- package/src/formula/formulaActionHandler.ts +14 -0
- package/src/lookup/LookupActionHandler.ts +21 -29
- package/src/master-detail/masterDetailActionHandler.ts +56 -66
- package/src/objects/fields/index.ts +145 -3
- package/src/objects/index.ts +113 -76
- package/src/objects.service.ts +9 -0
- package/src/summary/summaryActionHandler.ts +14 -0
package/src/objects/index.ts
CHANGED
|
@@ -1,53 +1,56 @@
|
|
|
1
|
-
import * as _ from
|
|
2
|
-
import { METADATA_TYPE } from
|
|
3
|
-
|
|
1
|
+
import * as _ from "lodash";
|
|
2
|
+
import { METADATA_TYPE } from "..";
|
|
3
|
+
import { getDBType } from "./fields";
|
|
4
|
+
const clone = require("clone");
|
|
4
5
|
|
|
5
|
-
export const SYSTEM_DATASOURCE =
|
|
6
|
-
export const MONGO_BASE_OBJECT =
|
|
7
|
-
export const SQL_BASE_OBJECT =
|
|
6
|
+
export const SYSTEM_DATASOURCE = "__SYSTEM_DATASOURCE";
|
|
7
|
+
export const MONGO_BASE_OBJECT = "__MONGO_BASE_OBJECT";
|
|
8
|
+
export const SQL_BASE_OBJECT = "__SQL_BASE_OBJECT";
|
|
8
9
|
|
|
9
|
-
export function getObjectServiceName(objectApiName: string){
|
|
10
|
+
export function getObjectServiceName(objectApiName: string) {
|
|
10
11
|
return `@${objectApiName}`;
|
|
11
12
|
}
|
|
12
13
|
|
|
13
|
-
|
|
14
14
|
async function getBaseObjectConfig(ctx, datasourceName) {
|
|
15
|
-
const serviceName =
|
|
15
|
+
const serviceName = "*";
|
|
16
16
|
const metadataType = METADATA_TYPE;
|
|
17
17
|
let metadataApiName = SQL_BASE_OBJECT;
|
|
18
|
-
if (datasourceName ===
|
|
19
|
-
metadataApiName = MONGO_BASE_OBJECT
|
|
18
|
+
if (datasourceName === "default" || datasourceName === "meteor") {
|
|
19
|
+
metadataApiName = MONGO_BASE_OBJECT;
|
|
20
20
|
}
|
|
21
21
|
const configs = await ctx.broker.call(`metadata.getServiceMetadatas`, {
|
|
22
22
|
serviceName,
|
|
23
23
|
metadataType,
|
|
24
|
-
metadataApiName: metadataApiName
|
|
25
|
-
})
|
|
24
|
+
metadataApiName: metadataApiName,
|
|
25
|
+
}, {meta: ctx.meta});
|
|
26
26
|
return configs && configs.length > 0 ? configs[0]?.metadata : null;
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
async function getObjectConfigs(ctx, objectApiName) {
|
|
30
|
-
const serviceName =
|
|
30
|
+
const serviceName = "*";
|
|
31
31
|
const metadataType = METADATA_TYPE;
|
|
32
|
-
const objectConfigs = await ctx.broker.call(
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
32
|
+
const objectConfigs = await ctx.broker.call(
|
|
33
|
+
`metadata.getServiceMetadatas`,
|
|
34
|
+
{
|
|
35
|
+
serviceName,
|
|
36
|
+
metadataType,
|
|
37
|
+
metadataApiName: objectApiName,
|
|
38
|
+
}, {meta: ctx.meta}
|
|
39
|
+
);
|
|
40
|
+
// console.log(`getObjectConfigs ==== `, getObjectConfigs.length);
|
|
41
|
+
return _.compact(_.map(objectConfigs, "metadata"));
|
|
38
42
|
}
|
|
39
43
|
|
|
40
44
|
function getObjectDatasource(objectConfigs: Array<any>) {
|
|
41
|
-
const config = _.find(objectConfigs, function
|
|
45
|
+
const config = _.find(objectConfigs, function(objectConfig) {
|
|
42
46
|
return objectConfig?.datasource;
|
|
43
|
-
})
|
|
47
|
+
});
|
|
44
48
|
// if(!config){
|
|
45
49
|
// console.log(`getObjectDatasource`, _.map(objectConfigs, 'name'))
|
|
46
50
|
// }
|
|
47
51
|
return config?.datasource;
|
|
48
52
|
}
|
|
49
53
|
|
|
50
|
-
|
|
51
54
|
// async function refreshFields() {
|
|
52
55
|
|
|
53
56
|
// }
|
|
@@ -56,7 +59,6 @@ function getObjectDatasource(objectConfigs: Array<any>) {
|
|
|
56
59
|
|
|
57
60
|
// }
|
|
58
61
|
|
|
59
|
-
|
|
60
62
|
// async function refreshListViews() {
|
|
61
63
|
|
|
62
64
|
// }
|
|
@@ -69,30 +71,34 @@ function getObjectDatasource(objectConfigs: Array<any>) {
|
|
|
69
71
|
|
|
70
72
|
// }
|
|
71
73
|
|
|
72
|
-
export async function getOriginalObject(ctx, objectApiName){
|
|
74
|
+
export async function getOriginalObject(ctx, objectApiName) {
|
|
73
75
|
let objectConfig: any = {};
|
|
74
76
|
|
|
75
77
|
const objectConfigs = await getObjectConfigs(ctx, objectApiName);
|
|
76
78
|
|
|
77
|
-
if(objectConfigs.length == 0){
|
|
78
|
-
return null
|
|
79
|
+
if (objectConfigs.length == 0) {
|
|
80
|
+
return null;
|
|
79
81
|
}
|
|
80
82
|
|
|
81
|
-
objectConfig = _.defaultsDeep(
|
|
83
|
+
objectConfig = _.defaultsDeep(
|
|
84
|
+
{},
|
|
85
|
+
..._.reverse(objectConfigs),
|
|
86
|
+
objectConfig
|
|
87
|
+
);
|
|
82
88
|
|
|
83
|
-
const _objectConfig = _.clone(objectConfig)
|
|
89
|
+
const _objectConfig = _.clone(objectConfig);
|
|
84
90
|
|
|
85
91
|
objectConfig.fields = _.clone(_objectConfig.fields);
|
|
86
92
|
|
|
87
93
|
objectConfig = _.defaultsDeep({}, clone(_objectConfig), objectConfig);
|
|
88
94
|
|
|
89
|
-
_.each(objectConfig.fields, function(field, field_name){
|
|
95
|
+
_.each(objectConfig.fields, function(field, field_name) {
|
|
90
96
|
if (field.is_name) {
|
|
91
|
-
objectConfig.NAME_FIELD_KEY = field_name
|
|
92
|
-
} else if (field_name ==
|
|
93
|
-
objectConfig.NAME_FIELD_KEY = field_name
|
|
97
|
+
objectConfig.NAME_FIELD_KEY = field_name;
|
|
98
|
+
} else if (field_name == "name" && !objectConfig.NAME_FIELD_KEY) {
|
|
99
|
+
objectConfig.NAME_FIELD_KEY = field_name;
|
|
94
100
|
}
|
|
95
|
-
})
|
|
101
|
+
});
|
|
96
102
|
return objectConfig;
|
|
97
103
|
}
|
|
98
104
|
|
|
@@ -100,16 +106,16 @@ export async function refreshObject(ctx, objectApiName) {
|
|
|
100
106
|
let objectConfig: any = {};
|
|
101
107
|
|
|
102
108
|
const objectConfigs = await getObjectConfigs(ctx, objectApiName);
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
return null
|
|
109
|
+
if (objectConfigs.length == 0) {
|
|
110
|
+
// console.log(`refreshObject objectConfigs`, objectConfigs.length)
|
|
111
|
+
return null;
|
|
106
112
|
}
|
|
107
113
|
|
|
108
114
|
const objectDatasource = getObjectDatasource(objectConfigs);
|
|
109
115
|
|
|
110
116
|
const baseObjectConfig = await getBaseObjectConfig(ctx, objectDatasource);
|
|
111
|
-
if(baseObjectConfig){
|
|
112
|
-
delete baseObjectConfig.datasource
|
|
117
|
+
if (baseObjectConfig) {
|
|
118
|
+
delete baseObjectConfig.datasource;
|
|
113
119
|
delete baseObjectConfig.hidden;
|
|
114
120
|
}
|
|
115
121
|
|
|
@@ -119,86 +125,117 @@ export async function refreshObject(ctx, objectApiName) {
|
|
|
119
125
|
|
|
120
126
|
let mainConfig = null;
|
|
121
127
|
|
|
122
|
-
if(mainConfigs.length == 1){
|
|
123
|
-
mainConfig = mainConfigs[0]
|
|
124
|
-
}else if(mainConfigs.length > 1){
|
|
125
|
-
let dbMainConfig = _.find(mainConfigs, (conf)=>{
|
|
126
|
-
return _.has(conf,
|
|
127
|
-
})
|
|
128
|
+
if (mainConfigs.length == 1) {
|
|
129
|
+
mainConfig = mainConfigs[0];
|
|
130
|
+
} else if (mainConfigs.length > 1) {
|
|
131
|
+
let dbMainConfig = _.find(mainConfigs, (conf) => {
|
|
132
|
+
return _.has(conf, "_id") && !_.has(conf, "__filename");
|
|
133
|
+
});
|
|
128
134
|
if (dbMainConfig) {
|
|
129
|
-
|
|
135
|
+
delete dbMainConfig.isMain;
|
|
130
136
|
}
|
|
131
137
|
|
|
132
|
-
mainConfig = _.find(mainConfigs, (conf)=>{
|
|
138
|
+
mainConfig = _.find(mainConfigs, (conf) => {
|
|
133
139
|
return conf.isMain;
|
|
134
|
-
})
|
|
140
|
+
});
|
|
135
141
|
|
|
136
|
-
if(!mainConfig){
|
|
137
|
-
mainConfig = mainConfigs[0]
|
|
142
|
+
if (!mainConfig) {
|
|
143
|
+
mainConfig = mainConfigs[0];
|
|
138
144
|
}
|
|
139
145
|
}
|
|
140
146
|
|
|
141
147
|
if (!mainConfig) {
|
|
148
|
+
console.log(`refreshObject mainConfig`, mainConfigs.length, mainConfig)
|
|
142
149
|
return null;
|
|
143
150
|
}
|
|
144
151
|
|
|
145
|
-
objectConfig = _.defaultsDeep(
|
|
152
|
+
objectConfig = _.defaultsDeep(
|
|
153
|
+
{},
|
|
154
|
+
..._.sortBy(objectConfigs, function(o) {
|
|
155
|
+
return o.isMain ? 1 : -1;
|
|
156
|
+
}),
|
|
157
|
+
objectConfig
|
|
158
|
+
);
|
|
146
159
|
|
|
147
|
-
const _objectConfig = _.clone(objectConfig)
|
|
160
|
+
const _objectConfig = _.clone(objectConfig);
|
|
148
161
|
|
|
149
162
|
objectConfig.fields = _.clone(_objectConfig.fields);
|
|
150
163
|
|
|
151
|
-
if (
|
|
164
|
+
if (
|
|
165
|
+
objectApiName != MONGO_BASE_OBJECT &&
|
|
166
|
+
objectApiName != SQL_BASE_OBJECT
|
|
167
|
+
) {
|
|
152
168
|
_.each(objectConfig.actions, (action) => {
|
|
153
|
-
if (!_.has(action,
|
|
169
|
+
if (!_.has(action, "_visible") && _.has(action, "visible")) {
|
|
154
170
|
action._visible = `
|
|
155
171
|
function(){
|
|
156
172
|
return ${action.visible}
|
|
157
173
|
}
|
|
158
174
|
`;
|
|
159
175
|
}
|
|
160
|
-
})
|
|
176
|
+
});
|
|
161
177
|
}
|
|
162
178
|
|
|
163
|
-
objectConfig = _.defaultsDeep(
|
|
179
|
+
objectConfig = _.defaultsDeep(
|
|
180
|
+
{},
|
|
181
|
+
clone(_objectConfig),
|
|
182
|
+
baseObjectConfig,
|
|
183
|
+
objectConfig
|
|
184
|
+
);
|
|
164
185
|
|
|
165
|
-
_.each(objectConfig.fields, function(field, field_name){
|
|
186
|
+
_.each(objectConfig.fields, function(field, field_name) {
|
|
166
187
|
if (objectDatasource != "default" && objectDatasource != "meteor") {
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
188
|
+
if (field.primary) {
|
|
189
|
+
objectConfig.idFieldName = field.name;
|
|
190
|
+
if (!objectConfig.idFieldNames) {
|
|
191
|
+
objectConfig.idFieldNames = [];
|
|
192
|
+
}
|
|
193
|
+
if (objectConfig.idFieldNames.indexOf(field.name) < 0) {
|
|
194
|
+
objectConfig.idFieldNames.push(field.name);
|
|
195
|
+
}
|
|
171
196
|
}
|
|
172
|
-
if (
|
|
173
|
-
|
|
197
|
+
if (
|
|
198
|
+
!field.fieldDBType &&
|
|
199
|
+
objectApiName != MONGO_BASE_OBJECT &&
|
|
200
|
+
objectApiName != SQL_BASE_OBJECT
|
|
201
|
+
) {
|
|
202
|
+
try {
|
|
203
|
+
field.fieldDBType = getDBType(objectApiName, field);
|
|
204
|
+
} catch (error) {
|
|
205
|
+
console.log(`error`, error);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
if (field.generated) {
|
|
210
|
+
field.omit = true;
|
|
174
211
|
}
|
|
175
|
-
}
|
|
176
|
-
if (field.generated) {
|
|
177
|
-
field.omit = true;
|
|
178
|
-
}
|
|
179
212
|
}
|
|
180
213
|
if (field.is_name) {
|
|
181
|
-
objectConfig.NAME_FIELD_KEY = field_name
|
|
182
|
-
} else if (field_name ==
|
|
183
|
-
objectConfig.NAME_FIELD_KEY = field_name
|
|
214
|
+
objectConfig.NAME_FIELD_KEY = field_name;
|
|
215
|
+
} else if (field_name == "name" && !objectConfig.NAME_FIELD_KEY) {
|
|
216
|
+
objectConfig.NAME_FIELD_KEY = field_name;
|
|
184
217
|
}
|
|
185
|
-
})
|
|
218
|
+
});
|
|
186
219
|
|
|
187
220
|
_.each(objectConfig.actions, (action, key) => {
|
|
188
|
-
if (!_.has(action,
|
|
221
|
+
if (!_.has(action, "name")) {
|
|
189
222
|
action.name = key;
|
|
190
223
|
}
|
|
191
224
|
});
|
|
192
225
|
|
|
193
|
-
objectConfig.datasource = mainConfig.datasource
|
|
226
|
+
objectConfig.datasource = mainConfig.datasource;
|
|
194
227
|
|
|
195
228
|
try {
|
|
196
|
-
const maxSortNoField = _.maxBy(_.values(objectConfig.fields), function(
|
|
197
|
-
|
|
229
|
+
const maxSortNoField = _.maxBy(_.values(objectConfig.fields), function(
|
|
230
|
+
field
|
|
231
|
+
) {
|
|
232
|
+
return field.sort_no;
|
|
233
|
+
});
|
|
234
|
+
if (maxSortNoField) {
|
|
198
235
|
objectConfig.fields_serial_number = maxSortNoField.sort_no;
|
|
199
236
|
}
|
|
200
237
|
} catch (error) {
|
|
201
|
-
|
|
238
|
+
console.log(`refreshObject error`, error)
|
|
202
239
|
}
|
|
203
240
|
|
|
204
241
|
return objectConfig;
|
package/src/objects.service.ts
CHANGED
|
@@ -20,6 +20,12 @@ module.exports = {
|
|
|
20
20
|
dependencies: ['metadata'],
|
|
21
21
|
|
|
22
22
|
events: {
|
|
23
|
+
[`delete.metadata.${METADATA_TYPE}`]: {
|
|
24
|
+
async handler(ctx) {
|
|
25
|
+
const { objectApiName } = ctx.params;
|
|
26
|
+
return await this.objetActionHandlers.handleDeleteObject(ctx, objectApiName);
|
|
27
|
+
}
|
|
28
|
+
},
|
|
23
29
|
[`$METADATA.${METADATA_TYPE}.*`]: {
|
|
24
30
|
async handler(ctx) {
|
|
25
31
|
return await this.objetActionHandlers.refresh(ctx);
|
|
@@ -209,6 +215,9 @@ module.exports = {
|
|
|
209
215
|
await this.summaryActionHandler.add(objectConfig);
|
|
210
216
|
}, async (objectConfig)=>{
|
|
211
217
|
await this.lookupActionHandler.deleteAll(objectConfig);
|
|
218
|
+
await this.masterDetailActionHandler.deleteAll(objectConfig);
|
|
219
|
+
await this.formulaActionHandler.deleteAll(objectConfig);
|
|
220
|
+
await this.summaryActionHandler.deleteAll(objectConfig);
|
|
212
221
|
}, async (objectConfig)=>{
|
|
213
222
|
/**
|
|
214
223
|
* 重算公式关系链时,可能存在待重算的对象还未进入缓存(但已经过了公式关系链计算过程)。所以进行延时
|
|
@@ -16,6 +16,20 @@ export class SummaryActionHandler {
|
|
|
16
16
|
this.broker = broker;
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
+
async deleteAll(objectConfig){
|
|
20
|
+
try {
|
|
21
|
+
if (!objectConfig) {
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
// console.log(`deleteAll summary`, this.cacherKey(objectConfig.name, '*'))
|
|
25
|
+
await this.broker.call('metadata.fuzzyDelete', {key: this.cacherKey(objectConfig.name, '*')}, {meta: {}})
|
|
26
|
+
return true
|
|
27
|
+
} catch (error) {
|
|
28
|
+
this.broker.logger.error(error);
|
|
29
|
+
}
|
|
30
|
+
return false
|
|
31
|
+
}
|
|
32
|
+
|
|
19
33
|
async getObjectConfig(objectApiName: string) {
|
|
20
34
|
const data = await this.broker.call('objects.get', { objectApiName: objectApiName })
|
|
21
35
|
return data ? data.metadata : null;
|