@steedos/service-object-graphql 2.5.3-beta.11 → 2.5.3-beta.12
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/package.json +6 -6
- package/package.service.js +135 -162
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@steedos/service-object-graphql",
|
|
3
|
-
"version": "2.5.3-beta.
|
|
3
|
+
"version": "2.5.3-beta.12",
|
|
4
4
|
"main": "package.service.js",
|
|
5
5
|
"private": false,
|
|
6
6
|
"publishConfig": {
|
|
@@ -15,12 +15,12 @@
|
|
|
15
15
|
"description": "steedos package",
|
|
16
16
|
"repository": {},
|
|
17
17
|
"license": "MIT",
|
|
18
|
-
"gitHead": "
|
|
18
|
+
"gitHead": "79e9dfbd0bf19a0979f29d2a055cf6e2ea847997",
|
|
19
19
|
"dependencies": {
|
|
20
|
-
"@steedos/filters": "2.5.3-beta.
|
|
21
|
-
"@steedos/i18n": "2.5.3-beta.
|
|
22
|
-
"@steedos/objectql": "2.5.3-beta.
|
|
23
|
-
"@steedos/service-object-mixin": "2.5.3-beta.
|
|
20
|
+
"@steedos/filters": "2.5.3-beta.12",
|
|
21
|
+
"@steedos/i18n": "2.5.3-beta.12",
|
|
22
|
+
"@steedos/objectql": "2.5.3-beta.12",
|
|
23
|
+
"@steedos/service-object-mixin": "2.5.3-beta.12",
|
|
24
24
|
"graphql": "^15.8.0",
|
|
25
25
|
"graphql-parse-resolve-info": "^4.12.3",
|
|
26
26
|
"moleculer": "^0.14.25",
|
package/package.service.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/*
|
|
2
2
|
* @Author: sunhaolin@hotoa.com
|
|
3
3
|
* @Date: 2023-03-23 15:12:14
|
|
4
|
-
* @LastEditors:
|
|
5
|
-
* @LastEditTime: 2023-06-
|
|
4
|
+
* @LastEditors: baozhoutao@steedos.com
|
|
5
|
+
* @LastEditTime: 2023-06-09 15:52:01
|
|
6
6
|
* @Description:
|
|
7
7
|
*/
|
|
8
8
|
|
|
@@ -14,7 +14,6 @@ const {
|
|
|
14
14
|
getGraphqlActions,
|
|
15
15
|
getQueryFields
|
|
16
16
|
} = require('./lib');
|
|
17
|
-
const open = require('open');
|
|
18
17
|
|
|
19
18
|
const { formatFiltersToODataQuery } = require("@steedos/filters");
|
|
20
19
|
|
|
@@ -22,6 +21,8 @@ const serviceObjectMixin = require('@steedos/service-object-mixin');
|
|
|
22
21
|
|
|
23
22
|
const { QUERY_DOCS_TOP } = require('./lib/consts');
|
|
24
23
|
|
|
24
|
+
const { Register } = require('@steedos/metadata-registrar')
|
|
25
|
+
|
|
25
26
|
/**
|
|
26
27
|
* @typedef {import('moleculer').Context} Context Moleculer's Context
|
|
27
28
|
*/
|
|
@@ -33,8 +34,6 @@ module.exports = {
|
|
|
33
34
|
globalGraphQLSettings: {}, // service-api 里generateGraphQLSchema使用
|
|
34
35
|
getGraphqlFields: getQueryFields,
|
|
35
36
|
|
|
36
|
-
projectStarted: false,
|
|
37
|
-
|
|
38
37
|
/**
|
|
39
38
|
* Settings
|
|
40
39
|
*/
|
|
@@ -229,70 +228,66 @@ module.exports = {
|
|
|
229
228
|
* Events
|
|
230
229
|
*/
|
|
231
230
|
events: {
|
|
231
|
+
"graphql.schema.changed": {
|
|
232
|
+
params: {},
|
|
233
|
+
async handler(ctx) {
|
|
234
|
+
await this.ChangeGlobalGraphQLSettings()
|
|
235
|
+
}
|
|
236
|
+
},
|
|
232
237
|
// 此事件表示软件包发生变化(包括加载、卸载、对象发生变化),接收到此事件后重新生成graphql schema
|
|
233
238
|
"$packages.changed": {
|
|
234
239
|
params: {},
|
|
235
240
|
async handler(ctx) {
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
// console.log("Metadata:", ctx.meta);
|
|
239
|
-
// console.log("The called event name:", ctx.eventName);
|
|
240
|
-
|
|
241
|
-
const objGraphqlMap = await this.generateObjGraphqlMap(this.name)
|
|
242
|
-
|
|
243
|
-
let type = []
|
|
244
|
-
let query = []
|
|
245
|
-
let mutation = []
|
|
246
|
-
let resolvers = {}
|
|
247
|
-
let resolversQuery = {}
|
|
248
|
-
let resolversMutation = {}
|
|
249
|
-
|
|
250
|
-
for (const objectName in objGraphqlMap) {
|
|
251
|
-
if (Object.hasOwnProperty.call(objGraphqlMap, objectName)) {
|
|
252
|
-
const gMap = objGraphqlMap[objectName];
|
|
253
|
-
type.push(gMap.type)
|
|
254
|
-
query = query.concat(gMap.query)
|
|
255
|
-
mutation = mutation.concat(gMap.mutation)
|
|
256
|
-
resolvers = Object.assign(resolvers, gMap.resolvers)
|
|
257
|
-
resolversQuery = Object.assign(resolversQuery, gMap.resolversQuery)
|
|
258
|
-
resolversMutation = Object.assign(resolversMutation, gMap.resolversMutation)
|
|
259
|
-
}
|
|
241
|
+
if(broker.nodeID != 'steedos-primary'){
|
|
242
|
+
return ;
|
|
260
243
|
}
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
query: query,
|
|
265
|
-
mutation: mutation,
|
|
266
|
-
resolvers: {
|
|
267
|
-
...resolvers,
|
|
268
|
-
Query: resolversQuery,
|
|
269
|
-
Mutation: resolversMutation
|
|
270
|
-
}
|
|
244
|
+
if(this.setTimeoutId){
|
|
245
|
+
clearTimeout(this.setTimeoutId);
|
|
246
|
+
this.setTimeoutId = null;
|
|
271
247
|
}
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
this.
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
248
|
+
this.setTimeoutId = setTimeout(async ()=>{
|
|
249
|
+
// console.log("Payload:", ctx.params);
|
|
250
|
+
// console.log("Sender:", ctx.nodeID);
|
|
251
|
+
// console.log("Metadata:", ctx.meta);
|
|
252
|
+
// console.log("The called event name:", ctx.eventName);
|
|
253
|
+
console.log(`[service][graphql]===> generateObjGraphqlMap ${this.name} start`)
|
|
254
|
+
const s = new Date();
|
|
255
|
+
const objGraphqlMap = await this.generateObjGraphqlMap(this.name)
|
|
256
|
+
console.log(`[service][graphql]==1=> generateObjGraphqlMap ${this.name} 耗时:`, new Date() - s, 'ms')
|
|
257
|
+
let type = []
|
|
258
|
+
let query = []
|
|
259
|
+
let mutation = []
|
|
260
|
+
let resolvers = {}
|
|
261
|
+
let resolversQuery = {}
|
|
262
|
+
let resolversMutation = {}
|
|
263
|
+
|
|
264
|
+
for (const objectName in objGraphqlMap) {
|
|
265
|
+
if (Object.hasOwnProperty.call(objGraphqlMap, objectName)) {
|
|
266
|
+
const gMap = objGraphqlMap[objectName];
|
|
267
|
+
type.push(gMap.type)
|
|
268
|
+
query = query.concat(gMap.query)
|
|
269
|
+
mutation = mutation.concat(gMap.mutation)
|
|
270
|
+
resolvers = Object.assign(resolvers, gMap.resolvers)
|
|
271
|
+
resolversQuery = Object.assign(resolversQuery, gMap.resolversQuery)
|
|
272
|
+
resolversMutation = Object.assign(resolversMutation, gMap.resolversMutation)
|
|
273
|
+
}
|
|
284
274
|
}
|
|
285
|
-
console.log(`
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
275
|
+
console.log(`[service][graphql]==2=> generateObjGraphqlMap ${this.name} 耗时:`, new Date() - s, 'ms')
|
|
276
|
+
const globalGraphQLSettings = {
|
|
277
|
+
type: type,
|
|
278
|
+
query: query,
|
|
279
|
+
mutation: mutation,
|
|
280
|
+
resolvers: {
|
|
281
|
+
...resolvers,
|
|
282
|
+
Query: resolversQuery,
|
|
283
|
+
Mutation: resolversMutation
|
|
293
284
|
}
|
|
294
285
|
}
|
|
295
|
-
|
|
286
|
+
console.log(`graphql.schema.changed=============`)
|
|
287
|
+
await Register.add(ctx.broker, {key: 'globalGraphQLSettings', data: globalGraphQLSettings}, {})
|
|
288
|
+
ctx.broker.broadcast("graphql.schema.changed")
|
|
289
|
+
|
|
290
|
+
}, 1000 * 3)
|
|
296
291
|
}
|
|
297
292
|
}
|
|
298
293
|
},
|
|
@@ -301,7 +296,14 @@ module.exports = {
|
|
|
301
296
|
* Methods
|
|
302
297
|
*/
|
|
303
298
|
methods: {
|
|
304
|
-
|
|
299
|
+
async ChangeGlobalGraphQLSettings() {
|
|
300
|
+
const result = await Register.get(this.broker, 'globalGraphQLSettings');
|
|
301
|
+
if(result){
|
|
302
|
+
this.globalGraphQLSettings = result.metadata;
|
|
303
|
+
// 发送事件,通知ApolloService重新加载graphql schema; api 服务和graphql服务在同一个节点上.
|
|
304
|
+
this.broker.broadcastLocal('$services.changed');
|
|
305
|
+
}
|
|
306
|
+
},
|
|
305
307
|
find: {
|
|
306
308
|
async handler(objectName, query, userSession) {
|
|
307
309
|
const obj = this.getObject(objectName)
|
|
@@ -347,84 +349,90 @@ module.exports = {
|
|
|
347
349
|
|
|
348
350
|
async generateObjGraphqlMap(graphqlServiceName) {
|
|
349
351
|
const objGraphqlMap = {}
|
|
352
|
+
console.time('generateObjGraphqlMap===>objects.getAll')
|
|
350
353
|
const objectConfigs = await this.broker.call("objects.getAll");
|
|
354
|
+
console.timeEnd('generateObjGraphqlMap===>objects.getAll')
|
|
351
355
|
for (const object of objectConfigs) {
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
[
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
356
|
+
try {
|
|
357
|
+
// console.log('===>object.metadata.name: ', object.metadata.name)
|
|
358
|
+
const objectConfig = object.metadata
|
|
359
|
+
const objectName = objectConfig.name
|
|
360
|
+
// 排除 __MONGO_BASE_OBJECT __SQL_BASE_OBJECT
|
|
361
|
+
if (['__MONGO_BASE_OBJECT', '__SQL_BASE_OBJECT'].includes(objectName)) {
|
|
362
|
+
continue
|
|
363
|
+
}
|
|
364
|
+
/**
|
|
365
|
+
* objGraphqlMap[objectName] 结构
|
|
366
|
+
{
|
|
367
|
+
type: "",
|
|
368
|
+
resolvers: {
|
|
369
|
+
[objectName]: {
|
|
370
|
+
[`${name}${EXPAND_SUFFIX}`]: {},
|
|
371
|
+
[relatedFieldName]: {},
|
|
372
|
+
[DISPLAY_PREFIX]: {},
|
|
373
|
+
[UI_PREFIX]: {},
|
|
374
|
+
[PERMISSIONS_PREFIX]: {},
|
|
375
|
+
[`${RELATED_PREFIX}_files`]: {},
|
|
376
|
+
[`${RELATED_PREFIX}_tasks`]: {},
|
|
377
|
+
[`${RELATED_PREFIX}_notes`]: {},
|
|
378
|
+
[`${RELATED_PREFIX}_events`]: {},
|
|
379
|
+
[`${RELATED_PREFIX}_audit_records`]: {},
|
|
380
|
+
[`${RELATED_PREFIX}_instances`]: {},
|
|
381
|
+
[`${RELATED_PREFIX}_approvals`]: {}
|
|
382
|
+
}
|
|
383
|
+
},
|
|
384
|
+
query: [],
|
|
385
|
+
resolversQuery: {
|
|
386
|
+
[objectName]: { action: 'find' },
|
|
387
|
+
[`${objectName}__count`]: { action: 'count' },
|
|
388
|
+
[`${objectName}__findOne`]: { action: 'findOne' }
|
|
389
|
+
},
|
|
390
|
+
mutation: [],
|
|
391
|
+
resolversMutation: {
|
|
392
|
+
[`${objectName}__insert`]: { action: 'insert' },
|
|
393
|
+
[`${objectName}__update`]: { action: 'update' },
|
|
394
|
+
[`${objectName}__delete`]: { action: 'delete' }
|
|
377
395
|
}
|
|
378
|
-
},
|
|
379
|
-
query: [],
|
|
380
|
-
resolversQuery: {
|
|
381
|
-
[objectName]: { action: 'find' },
|
|
382
|
-
[`${objectName}__count`]: { action: 'count' },
|
|
383
|
-
[`${objectName}__findOne`]: { action: 'findOne' }
|
|
384
|
-
},
|
|
385
|
-
mutation: [],
|
|
386
|
-
resolversMutation: {
|
|
387
|
-
[`${objectName}__insert`]: { action: 'insert' },
|
|
388
|
-
[`${objectName}__update`]: { action: 'update' },
|
|
389
|
-
[`${objectName}__delete`]: { action: 'delete' }
|
|
390
396
|
}
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
const gMap = {}
|
|
397
|
+
*/
|
|
398
|
+
const gMap = {}
|
|
394
399
|
|
|
395
|
-
|
|
400
|
+
const typeAndResolves = await generateSettingsGraphql(objectConfig, graphqlServiceName)
|
|
396
401
|
|
|
397
|
-
|
|
398
|
-
|
|
402
|
+
gMap.type = typeAndResolves.type
|
|
403
|
+
gMap.resolvers = typeAndResolves.resolvers
|
|
399
404
|
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
405
|
+
if (objectName == 'users') {
|
|
406
|
+
objGraphqlMap[objectName] = gMap
|
|
407
|
+
continue
|
|
408
|
+
}
|
|
409
|
+
gMap.query = []
|
|
410
|
+
gMap.resolversQuery = {}
|
|
411
|
+
gMap.mutation = []
|
|
412
|
+
gMap.resolversMutation = {}
|
|
408
413
|
|
|
409
|
-
|
|
410
|
-
|
|
414
|
+
gMap.query.push(generateActionGraphqlProp('find', objectConfig))
|
|
415
|
+
gMap.resolversQuery[objectName] = { action: 'find' }
|
|
411
416
|
|
|
412
|
-
|
|
413
|
-
|
|
417
|
+
gMap.query.push(generateActionGraphqlProp('count', objectConfig))
|
|
418
|
+
gMap.resolversQuery[`${objectName}__count`] = { action: 'count' }
|
|
414
419
|
|
|
415
|
-
|
|
416
|
-
|
|
420
|
+
gMap.query.push(generateActionGraphqlProp('findOne', objectConfig))
|
|
421
|
+
gMap.resolversQuery[`${objectName}__findOne`] = { action: 'findOne' }
|
|
417
422
|
|
|
418
|
-
|
|
419
|
-
|
|
423
|
+
gMap.mutation.push(generateActionGraphqlProp('insert', objectConfig))
|
|
424
|
+
gMap.resolversMutation[`${objectName}__insert`] = { action: 'insert' }
|
|
420
425
|
|
|
421
|
-
|
|
422
|
-
|
|
426
|
+
gMap.mutation.push(generateActionGraphqlProp('update', objectConfig))
|
|
427
|
+
gMap.resolversMutation[`${objectName}__update`] = { action: 'update' }
|
|
423
428
|
|
|
424
|
-
|
|
425
|
-
|
|
429
|
+
gMap.mutation.push(generateActionGraphqlProp('delete', objectConfig))
|
|
430
|
+
gMap.resolversMutation[`${objectName}__delete`] = { action: 'delete' }
|
|
426
431
|
|
|
427
|
-
|
|
432
|
+
objGraphqlMap[objectName] = gMap
|
|
433
|
+
} catch (error) {
|
|
434
|
+
console.error(`error`, error)
|
|
435
|
+
}
|
|
428
436
|
};
|
|
429
437
|
|
|
430
438
|
return objGraphqlMap
|
|
@@ -469,43 +477,8 @@ module.exports = {
|
|
|
469
477
|
* Service started lifecycle event handler
|
|
470
478
|
*/
|
|
471
479
|
async started() {
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
// const objGraphqlMap = await that.generateObjGraphqlMap(that.name)
|
|
475
|
-
|
|
476
|
-
// let globalTypeDefs = []
|
|
477
|
-
// let query = []
|
|
478
|
-
// let mutation = []
|
|
479
|
-
// let resolvers = {}
|
|
480
|
-
// let resolversQuery = {}
|
|
481
|
-
// let resolversMutation = {}
|
|
482
|
-
|
|
483
|
-
// for (const objectName in objGraphqlMap) {
|
|
484
|
-
// if (Object.hasOwnProperty.call(objGraphqlMap, objectName)) {
|
|
485
|
-
// const gMap = objGraphqlMap[objectName];
|
|
486
|
-
// globalTypeDefs.push(gMap.type)
|
|
487
|
-
// query = query.concat(gMap.query)
|
|
488
|
-
// mutation = mutation.concat(gMap.mutation)
|
|
489
|
-
// resolvers = Object.assign(resolvers, gMap.resolvers)
|
|
490
|
-
// resolversQuery = Object.assign(resolversQuery, gMap.resolversQuery)
|
|
491
|
-
// resolversMutation = Object.assign(resolversMutation, gMap.resolversMutation)
|
|
492
|
-
// }
|
|
493
|
-
// }
|
|
494
|
-
|
|
495
|
-
// that.globalTypeDefs = globalTypeDefs
|
|
496
|
-
|
|
497
|
-
// that.settings.graphql = {
|
|
498
|
-
// query: query,
|
|
499
|
-
// mutation: mutation,
|
|
500
|
-
// resolvers: {
|
|
501
|
-
// ...resolvers,
|
|
502
|
-
// Query: resolversQuery,
|
|
503
|
-
// Mutation: resolversMutation
|
|
504
|
-
// }
|
|
505
|
-
// }
|
|
506
|
-
|
|
507
|
-
// console.log('graphql:', new Date())
|
|
508
|
-
// }, 20000)
|
|
480
|
+
await this.ChangeGlobalGraphQLSettings()
|
|
481
|
+
console.log('=============> service-object0-graphql started')
|
|
509
482
|
},
|
|
510
483
|
|
|
511
484
|
/**
|