@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.
@@ -1,53 +1,56 @@
1
- import * as _ from 'lodash';
2
- import { METADATA_TYPE } from '..';
3
- const clone = require('clone');
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 = '__SYSTEM_DATASOURCE';
6
- export const MONGO_BASE_OBJECT = '__MONGO_BASE_OBJECT';
7
- export const SQL_BASE_OBJECT = '__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 === 'default' || datasourceName === 'meteor') {
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(`metadata.getServiceMetadatas`, {
33
- serviceName,
34
- metadataType,
35
- metadataApiName: objectApiName
36
- })
37
- return _.compact(_.map(objectConfigs, 'metadata'));
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 (objectConfig) {
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({}, ..._.reverse(objectConfigs), objectConfig)
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 == 'name' && !objectConfig.NAME_FIELD_KEY) {
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
- if(objectConfigs.length == 0){
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, '_id') && !_.has(conf, '__filename')
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
- delete dbMainConfig.isMain;
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({}, ..._.sortBy(objectConfigs, function(o){return o.isMain ? 1:-1}), objectConfig)
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 (objectApiName != MONGO_BASE_OBJECT && objectApiName != SQL_BASE_OBJECT){
164
+ if (
165
+ objectApiName != MONGO_BASE_OBJECT &&
166
+ objectApiName != SQL_BASE_OBJECT
167
+ ) {
152
168
  _.each(objectConfig.actions, (action) => {
153
- if (!_.has(action, '_visible') && _.has(action, 'visible')) {
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({}, clone(_objectConfig), baseObjectConfig, objectConfig);
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
- if (field.primary) {
168
- objectConfig.idFieldName = field.name;
169
- if (!objectConfig.idFieldNames) {
170
- objectConfig.idFieldNames = [];
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 (objectConfig.idFieldNames.indexOf(field.name) < 0) {
173
- objectConfig.idFieldNames.push(field.name);
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 == 'name' && !objectConfig.NAME_FIELD_KEY) {
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, 'name')) {
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(field) { return field.sort_no; })
197
- if(maxSortNoField){
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;
@@ -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;