@rytass/cms-base-nestjs-graphql-module 0.0.20 → 0.0.22
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/dto/article-version-content.input.d.ts +2 -1
- package/dto/article-version-content.input.js +3 -2
- package/index.cjs.js +177 -87
- package/mutations/article.mutations.d.ts +9 -5
- package/mutations/article.mutations.js +107 -45
- package/package.json +2 -2
- package/resolvers/article.resolver.d.ts +1 -0
- package/resolvers/article.resolver.js +13 -0
- package/resolvers/backstage-article.resolver.d.ts +1 -0
- package/resolvers/backstage-article.resolver.js +13 -0
- package/scalars/quadrats-element.scalar.js +3 -0
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Field, InputType } from '@nestjs/graphql';
|
|
2
|
+
import { QuadratsContentScalar } from '../scalars/quadrats-element.scalar.js';
|
|
2
3
|
|
|
3
4
|
function _ts_decorate(decorators, target, key, desc) {
|
|
4
5
|
var c = arguments.length, r = c < 3 ? target : desc, d;
|
|
@@ -32,8 +33,8 @@ _ts_decorate([
|
|
|
32
33
|
_ts_metadata("design:type", Object)
|
|
33
34
|
], ArticleVersionContentInput.prototype, "description", void 0);
|
|
34
35
|
_ts_decorate([
|
|
35
|
-
Field(()=>
|
|
36
|
-
_ts_metadata("design:type",
|
|
36
|
+
Field(()=>QuadratsContentScalar),
|
|
37
|
+
_ts_metadata("design:type", Array)
|
|
37
38
|
], ArticleVersionContentInput.prototype, "content", void 0);
|
|
38
39
|
ArticleVersionContentInput = _ts_decorate([
|
|
39
40
|
InputType('ArticleVersionContentInput')
|
package/index.cjs.js
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
var common = require('@nestjs/common');
|
|
4
4
|
var cmsBaseNestjsModule = require('@rytass/cms-base-nestjs-module');
|
|
5
5
|
var graphql = require('@nestjs/graphql');
|
|
6
|
-
var memberBaseNestjsModule = require('@rytass/member-base-nestjs-module');
|
|
7
6
|
var graphql$1 = require('graphql');
|
|
7
|
+
var memberBaseNestjsModule = require('@rytass/member-base-nestjs-module');
|
|
8
8
|
var DataLoader = require('dataloader');
|
|
9
9
|
var lruCache = require('lru-cache');
|
|
10
10
|
var typeorm = require('typeorm');
|
|
@@ -87,6 +87,49 @@ BackstageArticleDto = _ts_decorate$v([
|
|
|
87
87
|
graphql.ObjectType('BackstageArticle')
|
|
88
88
|
], BackstageArticleDto);
|
|
89
89
|
|
|
90
|
+
const QuadratsContentScalar = new graphql$1.GraphQLScalarType({
|
|
91
|
+
name: 'QuadratsContent',
|
|
92
|
+
description: 'QuadratsContent custom scalar type (as JSON string)',
|
|
93
|
+
parseValue: (value)=>{
|
|
94
|
+
if (typeof value === 'string') {
|
|
95
|
+
let parsedValue;
|
|
96
|
+
try {
|
|
97
|
+
parsedValue = JSON.parse(value);
|
|
98
|
+
} catch (error) {
|
|
99
|
+
common.Logger.error(`Error parsing QuadratsContent (parseValue): ${error}`);
|
|
100
|
+
throw new common.InternalServerErrorException('Invalid QuadratsElement value');
|
|
101
|
+
}
|
|
102
|
+
if (!Array.isArray(parsedValue)) {
|
|
103
|
+
throw new common.BadRequestException('Expected a JSON string for QuadratsContent');
|
|
104
|
+
}
|
|
105
|
+
return parsedValue;
|
|
106
|
+
}
|
|
107
|
+
throw new common.BadRequestException('Expected a JSON string for QuadratsContent');
|
|
108
|
+
},
|
|
109
|
+
serialize: (value)=>{
|
|
110
|
+
if (typeof value === 'string') {
|
|
111
|
+
return value;
|
|
112
|
+
}
|
|
113
|
+
try {
|
|
114
|
+
return JSON.stringify(value);
|
|
115
|
+
} catch (error) {
|
|
116
|
+
common.Logger.error(`Error serializing QuadratsContent: ${error}`);
|
|
117
|
+
throw new common.InternalServerErrorException('Error serializing QuadratsElement');
|
|
118
|
+
}
|
|
119
|
+
},
|
|
120
|
+
parseLiteral: (ast)=>{
|
|
121
|
+
try {
|
|
122
|
+
if (ast.kind === graphql$1.Kind.STRING) {
|
|
123
|
+
return JSON.parse(ast.value);
|
|
124
|
+
}
|
|
125
|
+
} catch (error) {
|
|
126
|
+
common.Logger.error(`Error parsing QuadratsContent (parseLiteral): ${error}`);
|
|
127
|
+
throw new common.InternalServerErrorException('Invalid QuadratsElement value');
|
|
128
|
+
}
|
|
129
|
+
throw new Error('Expected string literal for QuadratsContent');
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
|
|
90
133
|
function _ts_decorate$u(decorators, target, key, desc) {
|
|
91
134
|
var c = arguments.length, r = c < 3 ? target : desc, d;
|
|
92
135
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
@@ -119,8 +162,8 @@ _ts_decorate$u([
|
|
|
119
162
|
_ts_metadata$s("design:type", Object)
|
|
120
163
|
], ArticleVersionContentInput.prototype, "description", void 0);
|
|
121
164
|
_ts_decorate$u([
|
|
122
|
-
graphql.Field(()=>
|
|
123
|
-
_ts_metadata$s("design:type",
|
|
165
|
+
graphql.Field(()=>QuadratsContentScalar),
|
|
166
|
+
_ts_metadata$s("design:type", Array)
|
|
124
167
|
], ArticleVersionContentInput.prototype, "content", void 0);
|
|
125
168
|
ArticleVersionContentInput = _ts_decorate$u([
|
|
126
169
|
graphql.InputType('ArticleVersionContentInput')
|
|
@@ -218,74 +261,93 @@ function _ts_param$8(paramIndex, decorator) {
|
|
|
218
261
|
};
|
|
219
262
|
}
|
|
220
263
|
class ArticleMutations {
|
|
264
|
+
multiLanguage;
|
|
221
265
|
articleService;
|
|
222
|
-
constructor(articleService){
|
|
266
|
+
constructor(multiLanguage, articleService){
|
|
267
|
+
this.multiLanguage = multiLanguage;
|
|
223
268
|
this.articleService = articleService;
|
|
224
269
|
}
|
|
225
|
-
|
|
226
|
-
|
|
270
|
+
resolveCreateArticleArgs(args) {
|
|
271
|
+
const basePayload = {
|
|
227
272
|
categoryIds: args.categoryIds,
|
|
228
273
|
tags: args.tags,
|
|
229
|
-
multiLanguageContents: args.multiLanguageContents.reduce((vars, content)=>({
|
|
230
|
-
...vars,
|
|
231
|
-
[content.language ?? cmsBaseNestjsModule.DEFAULT_LANGUAGE]: {
|
|
232
|
-
title: content.title,
|
|
233
|
-
description: content.description,
|
|
234
|
-
content: content.content
|
|
235
|
-
}
|
|
236
|
-
}), {}),
|
|
237
|
-
userId: memberId,
|
|
238
274
|
submitted: args.submitted ?? undefined,
|
|
239
275
|
signatureLevel: args.signatureLevel ?? null,
|
|
240
276
|
releasedAt: args.releasedAt ?? null
|
|
277
|
+
};
|
|
278
|
+
if (!this.multiLanguage) {
|
|
279
|
+
const [content] = args.multiLanguageContents;
|
|
280
|
+
return {
|
|
281
|
+
...basePayload,
|
|
282
|
+
title: content.title,
|
|
283
|
+
content: content.content,
|
|
284
|
+
description: content.description ?? undefined
|
|
285
|
+
};
|
|
286
|
+
}
|
|
287
|
+
const multiLanguageContents = args.multiLanguageContents.reduce((vars, content)=>({
|
|
288
|
+
...vars,
|
|
289
|
+
[content.language ?? cmsBaseNestjsModule.DEFAULT_LANGUAGE]: {
|
|
290
|
+
title: content.title,
|
|
291
|
+
description: content.description,
|
|
292
|
+
content: content.content
|
|
293
|
+
}
|
|
294
|
+
}), {});
|
|
295
|
+
return {
|
|
296
|
+
...basePayload,
|
|
297
|
+
multiLanguageContents
|
|
298
|
+
};
|
|
299
|
+
}
|
|
300
|
+
async createArticle(memberId, args) {
|
|
301
|
+
return this.articleService.create({
|
|
302
|
+
...this.resolveCreateArticleArgs(args),
|
|
303
|
+
userId: memberId
|
|
241
304
|
});
|
|
242
305
|
}
|
|
243
306
|
async updateArticle(memberId, args) {
|
|
244
307
|
return this.articleService.addVersion(args.id, {
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
multiLanguageContents: args.multiLanguageContents.reduce((vars, content)=>({
|
|
248
|
-
...vars,
|
|
249
|
-
[content.language ?? cmsBaseNestjsModule.DEFAULT_LANGUAGE]: {
|
|
250
|
-
title: content.title,
|
|
251
|
-
description: content.description,
|
|
252
|
-
content: content.content
|
|
253
|
-
}
|
|
254
|
-
}), {}),
|
|
255
|
-
userId: memberId,
|
|
256
|
-
submitted: args.submitted ?? undefined,
|
|
257
|
-
signatureLevel: args.signatureLevel ?? null,
|
|
258
|
-
releasedAt: args.releasedAt ?? null
|
|
308
|
+
...this.resolveCreateArticleArgs(args),
|
|
309
|
+
userId: memberId
|
|
259
310
|
});
|
|
260
311
|
}
|
|
261
312
|
async deleteArticle(id) {
|
|
262
313
|
await this.articleService.archive(id);
|
|
263
314
|
return true;
|
|
264
315
|
}
|
|
265
|
-
async
|
|
316
|
+
async deleteArticleVersion(id, version) {
|
|
317
|
+
await this.articleService.deleteVersion(id, version);
|
|
318
|
+
return true;
|
|
319
|
+
}
|
|
320
|
+
async submitArticle(memberId, id) {
|
|
266
321
|
return this.articleService.submit(id, {
|
|
267
|
-
version,
|
|
268
322
|
userId: memberId
|
|
269
323
|
});
|
|
270
324
|
}
|
|
271
|
-
async
|
|
325
|
+
async putBackArticle(memberId, id) {
|
|
326
|
+
return this.articleService.putBack(id);
|
|
327
|
+
}
|
|
328
|
+
async approveArticle(id, version) {
|
|
272
329
|
const article = await this.articleService.findById(id);
|
|
273
|
-
return this.articleService.approveVersion(
|
|
330
|
+
return this.articleService.approveVersion({
|
|
331
|
+
id,
|
|
332
|
+
version: version ?? article.version
|
|
333
|
+
});
|
|
274
334
|
}
|
|
275
335
|
async rejectArticle(id, reason) {
|
|
276
|
-
|
|
277
|
-
|
|
336
|
+
return this.articleService.rejectVersion({
|
|
337
|
+
id
|
|
338
|
+
}, {
|
|
278
339
|
reason
|
|
279
340
|
});
|
|
280
341
|
}
|
|
281
|
-
releaseArticle(userId, id, releasedAt) {
|
|
342
|
+
releaseArticle(userId, id, releasedAt, version) {
|
|
282
343
|
return this.articleService.release(id, {
|
|
283
344
|
releasedAt,
|
|
284
|
-
userId
|
|
345
|
+
userId,
|
|
346
|
+
version: version ?? undefined
|
|
285
347
|
});
|
|
286
348
|
}
|
|
287
|
-
withdrawArticle(id) {
|
|
288
|
-
return this.articleService.withdraw(id);
|
|
349
|
+
withdrawArticle(id, version) {
|
|
350
|
+
return this.articleService.withdraw(id, version);
|
|
289
351
|
}
|
|
290
352
|
}
|
|
291
353
|
_ts_decorate$r([
|
|
@@ -325,34 +387,65 @@ _ts_decorate$r([
|
|
|
325
387
|
_ts_metadata$p("design:returntype", Promise)
|
|
326
388
|
], ArticleMutations.prototype, "deleteArticle", null);
|
|
327
389
|
_ts_decorate$r([
|
|
328
|
-
graphql.Mutation(()=>
|
|
390
|
+
graphql.Mutation(()=>Boolean),
|
|
329
391
|
memberBaseNestjsModule.IsPublic(),
|
|
330
|
-
_ts_param$8(0,
|
|
331
|
-
_ts_param$8(1, graphql.Args('id', {
|
|
392
|
+
_ts_param$8(0, graphql.Args('id', {
|
|
332
393
|
type: ()=>graphql.ID
|
|
333
394
|
})),
|
|
334
|
-
_ts_param$8(
|
|
395
|
+
_ts_param$8(1, graphql.Args('version', {
|
|
335
396
|
type: ()=>graphql.Int
|
|
336
397
|
})),
|
|
337
398
|
_ts_metadata$p("design:type", Function),
|
|
338
399
|
_ts_metadata$p("design:paramtypes", [
|
|
339
|
-
String,
|
|
340
400
|
String,
|
|
341
401
|
Number
|
|
342
402
|
]),
|
|
343
403
|
_ts_metadata$p("design:returntype", Promise)
|
|
404
|
+
], ArticleMutations.prototype, "deleteArticleVersion", null);
|
|
405
|
+
_ts_decorate$r([
|
|
406
|
+
graphql.Mutation(()=>BackstageArticleDto),
|
|
407
|
+
memberBaseNestjsModule.IsPublic(),
|
|
408
|
+
_ts_param$8(0, memberBaseNestjsModule.MemberId()),
|
|
409
|
+
_ts_param$8(1, graphql.Args('id', {
|
|
410
|
+
type: ()=>graphql.ID
|
|
411
|
+
})),
|
|
412
|
+
_ts_metadata$p("design:type", Function),
|
|
413
|
+
_ts_metadata$p("design:paramtypes", [
|
|
414
|
+
String,
|
|
415
|
+
String
|
|
416
|
+
]),
|
|
417
|
+
_ts_metadata$p("design:returntype", Promise)
|
|
344
418
|
], ArticleMutations.prototype, "submitArticle", null);
|
|
345
419
|
_ts_decorate$r([
|
|
346
420
|
graphql.Mutation(()=>BackstageArticleDto),
|
|
347
421
|
memberBaseNestjsModule.IsPublic(),
|
|
348
|
-
_ts_param$8(0,
|
|
422
|
+
_ts_param$8(0, memberBaseNestjsModule.MemberId()),
|
|
423
|
+
_ts_param$8(1, graphql.Args('id', {
|
|
349
424
|
type: ()=>graphql.ID
|
|
350
425
|
})),
|
|
351
426
|
_ts_metadata$p("design:type", Function),
|
|
352
427
|
_ts_metadata$p("design:paramtypes", [
|
|
428
|
+
String,
|
|
353
429
|
String
|
|
354
430
|
]),
|
|
355
431
|
_ts_metadata$p("design:returntype", Promise)
|
|
432
|
+
], ArticleMutations.prototype, "putBackArticle", null);
|
|
433
|
+
_ts_decorate$r([
|
|
434
|
+
graphql.Mutation(()=>BackstageArticleDto),
|
|
435
|
+
memberBaseNestjsModule.IsPublic(),
|
|
436
|
+
_ts_param$8(0, graphql.Args('id', {
|
|
437
|
+
type: ()=>graphql.ID
|
|
438
|
+
})),
|
|
439
|
+
_ts_param$8(1, graphql.Args('version', {
|
|
440
|
+
type: ()=>graphql.Int,
|
|
441
|
+
nullable: true
|
|
442
|
+
})),
|
|
443
|
+
_ts_metadata$p("design:type", Function),
|
|
444
|
+
_ts_metadata$p("design:paramtypes", [
|
|
445
|
+
String,
|
|
446
|
+
Object
|
|
447
|
+
]),
|
|
448
|
+
_ts_metadata$p("design:returntype", Promise)
|
|
356
449
|
], ArticleMutations.prototype, "approveArticle", null);
|
|
357
450
|
_ts_decorate$r([
|
|
358
451
|
graphql.Mutation(()=>BackstageArticleDto),
|
|
@@ -381,11 +474,16 @@ _ts_decorate$r([
|
|
|
381
474
|
_ts_param$8(2, graphql.Args('releasedAt', {
|
|
382
475
|
type: ()=>Date
|
|
383
476
|
})),
|
|
477
|
+
_ts_param$8(3, graphql.Args('version', {
|
|
478
|
+
type: ()=>graphql.Int,
|
|
479
|
+
nullable: true
|
|
480
|
+
})),
|
|
384
481
|
_ts_metadata$p("design:type", Function),
|
|
385
482
|
_ts_metadata$p("design:paramtypes", [
|
|
386
483
|
String,
|
|
387
484
|
String,
|
|
388
|
-
typeof Date === "undefined" ? Object : Date
|
|
485
|
+
typeof Date === "undefined" ? Object : Date,
|
|
486
|
+
Object
|
|
389
487
|
]),
|
|
390
488
|
_ts_metadata$p("design:returntype", typeof Promise === "undefined" ? Object : Promise)
|
|
391
489
|
], ArticleMutations.prototype, "releaseArticle", null);
|
|
@@ -395,16 +493,22 @@ _ts_decorate$r([
|
|
|
395
493
|
_ts_param$8(0, graphql.Args('id', {
|
|
396
494
|
type: ()=>graphql.ID
|
|
397
495
|
})),
|
|
496
|
+
_ts_param$8(1, graphql.Args('version', {
|
|
497
|
+
type: ()=>graphql.Int
|
|
498
|
+
})),
|
|
398
499
|
_ts_metadata$p("design:type", Function),
|
|
399
500
|
_ts_metadata$p("design:paramtypes", [
|
|
400
|
-
String
|
|
501
|
+
String,
|
|
502
|
+
Number
|
|
401
503
|
]),
|
|
402
504
|
_ts_metadata$p("design:returntype", typeof Promise === "undefined" ? Object : Promise)
|
|
403
505
|
], ArticleMutations.prototype, "withdrawArticle", null);
|
|
404
506
|
ArticleMutations = _ts_decorate$r([
|
|
405
507
|
graphql.Resolver(),
|
|
508
|
+
_ts_param$8(0, common.Inject(cmsBaseNestjsModule.MULTIPLE_LANGUAGE_MODE)),
|
|
406
509
|
_ts_metadata$p("design:type", Function),
|
|
407
510
|
_ts_metadata$p("design:paramtypes", [
|
|
511
|
+
Boolean,
|
|
408
512
|
typeof cmsBaseNestjsModule.ArticleBaseService === "undefined" ? Object : cmsBaseNestjsModule.ArticleBaseService
|
|
409
513
|
])
|
|
410
514
|
], ArticleMutations);
|
|
@@ -714,46 +818,6 @@ Collection = _ts_decorate$j([
|
|
|
714
818
|
graphql.ObjectType('Collection')
|
|
715
819
|
], Collection);
|
|
716
820
|
|
|
717
|
-
const QuadratsContentScalar = new graphql$1.GraphQLScalarType({
|
|
718
|
-
name: 'QuadratsContent',
|
|
719
|
-
description: 'QuadratsContent custom scalar type (as JSON string)',
|
|
720
|
-
parseValue: (value)=>{
|
|
721
|
-
if (typeof value === 'string') {
|
|
722
|
-
let parsedValue;
|
|
723
|
-
try {
|
|
724
|
-
parsedValue = JSON.parse(value);
|
|
725
|
-
} catch (error) {
|
|
726
|
-
common.Logger.error(`Error parsing QuadratsContent (parseValue): ${error}`);
|
|
727
|
-
throw new common.InternalServerErrorException('Invalid QuadratsElement value');
|
|
728
|
-
}
|
|
729
|
-
if (!Array.isArray(parsedValue)) {
|
|
730
|
-
throw new common.BadRequestException('Expected a JSON string for QuadratsContent');
|
|
731
|
-
}
|
|
732
|
-
return parsedValue;
|
|
733
|
-
}
|
|
734
|
-
throw new common.BadRequestException('Expected a JSON string for QuadratsContent');
|
|
735
|
-
},
|
|
736
|
-
serialize: (value)=>{
|
|
737
|
-
try {
|
|
738
|
-
return JSON.stringify(value);
|
|
739
|
-
} catch (error) {
|
|
740
|
-
common.Logger.error(`Error serializing QuadratsContent: ${error}`);
|
|
741
|
-
throw new common.InternalServerErrorException('Error serializing QuadratsElement');
|
|
742
|
-
}
|
|
743
|
-
},
|
|
744
|
-
parseLiteral: (ast)=>{
|
|
745
|
-
try {
|
|
746
|
-
if (ast.kind === graphql$1.Kind.STRING) {
|
|
747
|
-
return JSON.parse(ast.value);
|
|
748
|
-
}
|
|
749
|
-
} catch (error) {
|
|
750
|
-
common.Logger.error(`Error parsing QuadratsContent (parseLiteral): ${error}`);
|
|
751
|
-
throw new common.InternalServerErrorException('Invalid QuadratsElement value');
|
|
752
|
-
}
|
|
753
|
-
throw new Error('Expected string literal for QuadratsContent');
|
|
754
|
-
}
|
|
755
|
-
});
|
|
756
|
-
|
|
757
821
|
function _ts_decorate$i(decorators, target, key, desc) {
|
|
758
822
|
var c = arguments.length, r = c < 3 ? target : desc, d;
|
|
759
823
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
@@ -1270,6 +1334,9 @@ class ArticleResolver {
|
|
|
1270
1334
|
this.articleDataloader = articleDataloader;
|
|
1271
1335
|
this.multiLanguage = multiLanguage;
|
|
1272
1336
|
}
|
|
1337
|
+
articleId(article) {
|
|
1338
|
+
return article.id.split(':')[0];
|
|
1339
|
+
}
|
|
1273
1340
|
releasedBy(article) {
|
|
1274
1341
|
return article.releasedBy ? this.memberDataloader.loader.load(article.releasedBy) : null;
|
|
1275
1342
|
}
|
|
@@ -1280,6 +1347,16 @@ class ArticleResolver {
|
|
|
1280
1347
|
});
|
|
1281
1348
|
}
|
|
1282
1349
|
}
|
|
1350
|
+
_ts_decorate$7([
|
|
1351
|
+
graphql.ResolveField(()=>String),
|
|
1352
|
+
memberBaseNestjsModule.IsPublic(),
|
|
1353
|
+
_ts_param$2(0, graphql.Root()),
|
|
1354
|
+
_ts_metadata$6("design:type", Function),
|
|
1355
|
+
_ts_metadata$6("design:paramtypes", [
|
|
1356
|
+
typeof ArticleBaseDto === "undefined" ? Object : ArticleBaseDto
|
|
1357
|
+
]),
|
|
1358
|
+
_ts_metadata$6("design:returntype", String)
|
|
1359
|
+
], ArticleResolver.prototype, "articleId", null);
|
|
1283
1360
|
_ts_decorate$7([
|
|
1284
1361
|
graphql.ResolveField(()=>UserDto, {
|
|
1285
1362
|
nullable: true
|
|
@@ -1481,6 +1558,9 @@ class BackstageArticleResolver {
|
|
|
1481
1558
|
id(article) {
|
|
1482
1559
|
return `${article.id}:${article.version}`;
|
|
1483
1560
|
}
|
|
1561
|
+
articleId(article) {
|
|
1562
|
+
return article.id;
|
|
1563
|
+
}
|
|
1484
1564
|
submittedBy(article) {
|
|
1485
1565
|
return article.submittedBy ? this.memberDataloader.loader.load(article.submittedBy) : null;
|
|
1486
1566
|
}
|
|
@@ -1564,6 +1644,16 @@ _ts_decorate$3([
|
|
|
1564
1644
|
]),
|
|
1565
1645
|
_ts_metadata$2("design:returntype", String)
|
|
1566
1646
|
], BackstageArticleResolver.prototype, "id", null);
|
|
1647
|
+
_ts_decorate$3([
|
|
1648
|
+
graphql.ResolveField(()=>String),
|
|
1649
|
+
memberBaseNestjsModule.IsPublic(),
|
|
1650
|
+
_ts_param$1(0, graphql.Root()),
|
|
1651
|
+
_ts_metadata$2("design:type", Function),
|
|
1652
|
+
_ts_metadata$2("design:paramtypes", [
|
|
1653
|
+
typeof ArticleBaseDto === "undefined" ? Object : ArticleBaseDto
|
|
1654
|
+
]),
|
|
1655
|
+
_ts_metadata$2("design:returntype", String)
|
|
1656
|
+
], BackstageArticleResolver.prototype, "articleId", null);
|
|
1567
1657
|
_ts_decorate$3([
|
|
1568
1658
|
graphql.ResolveField(()=>UserDto, {
|
|
1569
1659
|
nullable: true
|
|
@@ -3,14 +3,18 @@ import { BackstageArticleDto } from '../dto/backstage-article.dto';
|
|
|
3
3
|
import { CreateArticleArgs } from '../dto/create-article.args';
|
|
4
4
|
import { UpdateArticleArgs } from '../dto/update-article.args';
|
|
5
5
|
export declare class ArticleMutations {
|
|
6
|
+
private readonly multiLanguage;
|
|
6
7
|
private readonly articleService;
|
|
7
|
-
constructor(articleService: ArticleBaseService);
|
|
8
|
+
constructor(multiLanguage: boolean, articleService: ArticleBaseService);
|
|
9
|
+
private resolveCreateArticleArgs;
|
|
8
10
|
createArticle(memberId: string, args: CreateArticleArgs): Promise<BackstageArticleDto>;
|
|
9
11
|
updateArticle(memberId: string, args: UpdateArticleArgs): Promise<BackstageArticleDto>;
|
|
10
12
|
deleteArticle(id: string): Promise<boolean>;
|
|
11
|
-
|
|
12
|
-
|
|
13
|
+
deleteArticleVersion(id: string, version: number): Promise<boolean>;
|
|
14
|
+
submitArticle(memberId: string, id: string): Promise<BackstageArticleDto>;
|
|
15
|
+
putBackArticle(memberId: string, id: string): Promise<BackstageArticleDto>;
|
|
16
|
+
approveArticle(id: string, version?: number | null): Promise<BackstageArticleDto>;
|
|
13
17
|
rejectArticle(id: string, reason?: string | null): Promise<BackstageArticleDto>;
|
|
14
|
-
releaseArticle(userId: string, id: string, releasedAt: Date): Promise<BackstageArticleDto>;
|
|
15
|
-
withdrawArticle(id: string): Promise<BackstageArticleDto>;
|
|
18
|
+
releaseArticle(userId: string, id: string, releasedAt: Date, version?: number | null): Promise<BackstageArticleDto>;
|
|
19
|
+
withdrawArticle(id: string, version: number): Promise<BackstageArticleDto>;
|
|
16
20
|
}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { ArticleBaseService, DEFAULT_LANGUAGE } from '@rytass/cms-base-nestjs-module';
|
|
1
|
+
import { MULTIPLE_LANGUAGE_MODE, ArticleBaseService, DEFAULT_LANGUAGE } from '@rytass/cms-base-nestjs-module';
|
|
2
2
|
import { Mutation, Args, ID, Int, Resolver } from '@nestjs/graphql';
|
|
3
3
|
import { BackstageArticleDto } from '../dto/backstage-article.dto.js';
|
|
4
4
|
import { CreateArticleArgs } from '../dto/create-article.args.js';
|
|
5
5
|
import { IsPublic, MemberId } from '@rytass/member-base-nestjs-module';
|
|
6
6
|
import { UpdateArticleArgs } from '../dto/update-article.args.js';
|
|
7
|
+
import { Inject } from '@nestjs/common';
|
|
7
8
|
|
|
8
9
|
function _ts_decorate(decorators, target, key, desc) {
|
|
9
10
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
@@ -20,74 +21,93 @@ function _ts_param(paramIndex, decorator) {
|
|
|
20
21
|
};
|
|
21
22
|
}
|
|
22
23
|
class ArticleMutations {
|
|
24
|
+
multiLanguage;
|
|
23
25
|
articleService;
|
|
24
|
-
constructor(articleService){
|
|
26
|
+
constructor(multiLanguage, articleService){
|
|
27
|
+
this.multiLanguage = multiLanguage;
|
|
25
28
|
this.articleService = articleService;
|
|
26
29
|
}
|
|
27
|
-
|
|
28
|
-
|
|
30
|
+
resolveCreateArticleArgs(args) {
|
|
31
|
+
const basePayload = {
|
|
29
32
|
categoryIds: args.categoryIds,
|
|
30
33
|
tags: args.tags,
|
|
31
|
-
multiLanguageContents: args.multiLanguageContents.reduce((vars, content)=>({
|
|
32
|
-
...vars,
|
|
33
|
-
[content.language ?? DEFAULT_LANGUAGE]: {
|
|
34
|
-
title: content.title,
|
|
35
|
-
description: content.description,
|
|
36
|
-
content: content.content
|
|
37
|
-
}
|
|
38
|
-
}), {}),
|
|
39
|
-
userId: memberId,
|
|
40
34
|
submitted: args.submitted ?? undefined,
|
|
41
35
|
signatureLevel: args.signatureLevel ?? null,
|
|
42
36
|
releasedAt: args.releasedAt ?? null
|
|
37
|
+
};
|
|
38
|
+
if (!this.multiLanguage) {
|
|
39
|
+
const [content] = args.multiLanguageContents;
|
|
40
|
+
return {
|
|
41
|
+
...basePayload,
|
|
42
|
+
title: content.title,
|
|
43
|
+
content: content.content,
|
|
44
|
+
description: content.description ?? undefined
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
const multiLanguageContents = args.multiLanguageContents.reduce((vars, content)=>({
|
|
48
|
+
...vars,
|
|
49
|
+
[content.language ?? DEFAULT_LANGUAGE]: {
|
|
50
|
+
title: content.title,
|
|
51
|
+
description: content.description,
|
|
52
|
+
content: content.content
|
|
53
|
+
}
|
|
54
|
+
}), {});
|
|
55
|
+
return {
|
|
56
|
+
...basePayload,
|
|
57
|
+
multiLanguageContents
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
async createArticle(memberId, args) {
|
|
61
|
+
return this.articleService.create({
|
|
62
|
+
...this.resolveCreateArticleArgs(args),
|
|
63
|
+
userId: memberId
|
|
43
64
|
});
|
|
44
65
|
}
|
|
45
66
|
async updateArticle(memberId, args) {
|
|
46
67
|
return this.articleService.addVersion(args.id, {
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
multiLanguageContents: args.multiLanguageContents.reduce((vars, content)=>({
|
|
50
|
-
...vars,
|
|
51
|
-
[content.language ?? DEFAULT_LANGUAGE]: {
|
|
52
|
-
title: content.title,
|
|
53
|
-
description: content.description,
|
|
54
|
-
content: content.content
|
|
55
|
-
}
|
|
56
|
-
}), {}),
|
|
57
|
-
userId: memberId,
|
|
58
|
-
submitted: args.submitted ?? undefined,
|
|
59
|
-
signatureLevel: args.signatureLevel ?? null,
|
|
60
|
-
releasedAt: args.releasedAt ?? null
|
|
68
|
+
...this.resolveCreateArticleArgs(args),
|
|
69
|
+
userId: memberId
|
|
61
70
|
});
|
|
62
71
|
}
|
|
63
72
|
async deleteArticle(id) {
|
|
64
73
|
await this.articleService.archive(id);
|
|
65
74
|
return true;
|
|
66
75
|
}
|
|
67
|
-
async
|
|
76
|
+
async deleteArticleVersion(id, version) {
|
|
77
|
+
await this.articleService.deleteVersion(id, version);
|
|
78
|
+
return true;
|
|
79
|
+
}
|
|
80
|
+
async submitArticle(memberId, id) {
|
|
68
81
|
return this.articleService.submit(id, {
|
|
69
|
-
version,
|
|
70
82
|
userId: memberId
|
|
71
83
|
});
|
|
72
84
|
}
|
|
73
|
-
async
|
|
85
|
+
async putBackArticle(memberId, id) {
|
|
86
|
+
return this.articleService.putBack(id);
|
|
87
|
+
}
|
|
88
|
+
async approveArticle(id, version) {
|
|
74
89
|
const article = await this.articleService.findById(id);
|
|
75
|
-
return this.articleService.approveVersion(
|
|
90
|
+
return this.articleService.approveVersion({
|
|
91
|
+
id,
|
|
92
|
+
version: version ?? article.version
|
|
93
|
+
});
|
|
76
94
|
}
|
|
77
95
|
async rejectArticle(id, reason) {
|
|
78
|
-
|
|
79
|
-
|
|
96
|
+
return this.articleService.rejectVersion({
|
|
97
|
+
id
|
|
98
|
+
}, {
|
|
80
99
|
reason
|
|
81
100
|
});
|
|
82
101
|
}
|
|
83
|
-
releaseArticle(userId, id, releasedAt) {
|
|
102
|
+
releaseArticle(userId, id, releasedAt, version) {
|
|
84
103
|
return this.articleService.release(id, {
|
|
85
104
|
releasedAt,
|
|
86
|
-
userId
|
|
105
|
+
userId,
|
|
106
|
+
version: version ?? undefined
|
|
87
107
|
});
|
|
88
108
|
}
|
|
89
|
-
withdrawArticle(id) {
|
|
90
|
-
return this.articleService.withdraw(id);
|
|
109
|
+
withdrawArticle(id, version) {
|
|
110
|
+
return this.articleService.withdraw(id, version);
|
|
91
111
|
}
|
|
92
112
|
}
|
|
93
113
|
_ts_decorate([
|
|
@@ -127,34 +147,65 @@ _ts_decorate([
|
|
|
127
147
|
_ts_metadata("design:returntype", Promise)
|
|
128
148
|
], ArticleMutations.prototype, "deleteArticle", null);
|
|
129
149
|
_ts_decorate([
|
|
130
|
-
Mutation(()=>
|
|
150
|
+
Mutation(()=>Boolean),
|
|
131
151
|
IsPublic(),
|
|
132
|
-
_ts_param(0,
|
|
133
|
-
_ts_param(1, Args('id', {
|
|
152
|
+
_ts_param(0, Args('id', {
|
|
134
153
|
type: ()=>ID
|
|
135
154
|
})),
|
|
136
|
-
_ts_param(
|
|
155
|
+
_ts_param(1, Args('version', {
|
|
137
156
|
type: ()=>Int
|
|
138
157
|
})),
|
|
139
158
|
_ts_metadata("design:type", Function),
|
|
140
159
|
_ts_metadata("design:paramtypes", [
|
|
141
|
-
String,
|
|
142
160
|
String,
|
|
143
161
|
Number
|
|
144
162
|
]),
|
|
145
163
|
_ts_metadata("design:returntype", Promise)
|
|
164
|
+
], ArticleMutations.prototype, "deleteArticleVersion", null);
|
|
165
|
+
_ts_decorate([
|
|
166
|
+
Mutation(()=>BackstageArticleDto),
|
|
167
|
+
IsPublic(),
|
|
168
|
+
_ts_param(0, MemberId()),
|
|
169
|
+
_ts_param(1, Args('id', {
|
|
170
|
+
type: ()=>ID
|
|
171
|
+
})),
|
|
172
|
+
_ts_metadata("design:type", Function),
|
|
173
|
+
_ts_metadata("design:paramtypes", [
|
|
174
|
+
String,
|
|
175
|
+
String
|
|
176
|
+
]),
|
|
177
|
+
_ts_metadata("design:returntype", Promise)
|
|
146
178
|
], ArticleMutations.prototype, "submitArticle", null);
|
|
147
179
|
_ts_decorate([
|
|
148
180
|
Mutation(()=>BackstageArticleDto),
|
|
149
181
|
IsPublic(),
|
|
150
|
-
_ts_param(0,
|
|
182
|
+
_ts_param(0, MemberId()),
|
|
183
|
+
_ts_param(1, Args('id', {
|
|
151
184
|
type: ()=>ID
|
|
152
185
|
})),
|
|
153
186
|
_ts_metadata("design:type", Function),
|
|
154
187
|
_ts_metadata("design:paramtypes", [
|
|
188
|
+
String,
|
|
155
189
|
String
|
|
156
190
|
]),
|
|
157
191
|
_ts_metadata("design:returntype", Promise)
|
|
192
|
+
], ArticleMutations.prototype, "putBackArticle", null);
|
|
193
|
+
_ts_decorate([
|
|
194
|
+
Mutation(()=>BackstageArticleDto),
|
|
195
|
+
IsPublic(),
|
|
196
|
+
_ts_param(0, Args('id', {
|
|
197
|
+
type: ()=>ID
|
|
198
|
+
})),
|
|
199
|
+
_ts_param(1, Args('version', {
|
|
200
|
+
type: ()=>Int,
|
|
201
|
+
nullable: true
|
|
202
|
+
})),
|
|
203
|
+
_ts_metadata("design:type", Function),
|
|
204
|
+
_ts_metadata("design:paramtypes", [
|
|
205
|
+
String,
|
|
206
|
+
Object
|
|
207
|
+
]),
|
|
208
|
+
_ts_metadata("design:returntype", Promise)
|
|
158
209
|
], ArticleMutations.prototype, "approveArticle", null);
|
|
159
210
|
_ts_decorate([
|
|
160
211
|
Mutation(()=>BackstageArticleDto),
|
|
@@ -183,11 +234,16 @@ _ts_decorate([
|
|
|
183
234
|
_ts_param(2, Args('releasedAt', {
|
|
184
235
|
type: ()=>Date
|
|
185
236
|
})),
|
|
237
|
+
_ts_param(3, Args('version', {
|
|
238
|
+
type: ()=>Int,
|
|
239
|
+
nullable: true
|
|
240
|
+
})),
|
|
186
241
|
_ts_metadata("design:type", Function),
|
|
187
242
|
_ts_metadata("design:paramtypes", [
|
|
188
243
|
String,
|
|
189
244
|
String,
|
|
190
|
-
typeof Date === "undefined" ? Object : Date
|
|
245
|
+
typeof Date === "undefined" ? Object : Date,
|
|
246
|
+
Object
|
|
191
247
|
]),
|
|
192
248
|
_ts_metadata("design:returntype", typeof Promise === "undefined" ? Object : Promise)
|
|
193
249
|
], ArticleMutations.prototype, "releaseArticle", null);
|
|
@@ -197,16 +253,22 @@ _ts_decorate([
|
|
|
197
253
|
_ts_param(0, Args('id', {
|
|
198
254
|
type: ()=>ID
|
|
199
255
|
})),
|
|
256
|
+
_ts_param(1, Args('version', {
|
|
257
|
+
type: ()=>Int
|
|
258
|
+
})),
|
|
200
259
|
_ts_metadata("design:type", Function),
|
|
201
260
|
_ts_metadata("design:paramtypes", [
|
|
202
|
-
String
|
|
261
|
+
String,
|
|
262
|
+
Number
|
|
203
263
|
]),
|
|
204
264
|
_ts_metadata("design:returntype", typeof Promise === "undefined" ? Object : Promise)
|
|
205
265
|
], ArticleMutations.prototype, "withdrawArticle", null);
|
|
206
266
|
ArticleMutations = _ts_decorate([
|
|
207
267
|
Resolver(),
|
|
268
|
+
_ts_param(0, Inject(MULTIPLE_LANGUAGE_MODE)),
|
|
208
269
|
_ts_metadata("design:type", Function),
|
|
209
270
|
_ts_metadata("design:paramtypes", [
|
|
271
|
+
Boolean,
|
|
210
272
|
typeof ArticleBaseService === "undefined" ? Object : ArticleBaseService
|
|
211
273
|
])
|
|
212
274
|
], ArticleMutations);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rytass/cms-base-nestjs-graphql-module",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.22",
|
|
4
4
|
"description": "Rytass Content Management System NestJS Base GraphQL Module",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"rytass",
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
"typeorm": "*"
|
|
27
27
|
},
|
|
28
28
|
"dependencies": {
|
|
29
|
-
"@rytass/cms-base-nestjs-module": "^0.1.
|
|
29
|
+
"@rytass/cms-base-nestjs-module": "^0.1.93",
|
|
30
30
|
"@rytass/member-base-nestjs-module": "^0.1.65",
|
|
31
31
|
"dataloader": "^2.2.2",
|
|
32
32
|
"lru-cache": "^11.0.2"
|
|
@@ -8,6 +8,7 @@ export declare class ArticleResolver {
|
|
|
8
8
|
private readonly articleDataloader;
|
|
9
9
|
private readonly multiLanguage;
|
|
10
10
|
constructor(memberDataloader: MemberDataLoader, articleDataloader: ArticleDataLoader, multiLanguage: boolean);
|
|
11
|
+
articleId(article: ArticleBaseDto): string;
|
|
11
12
|
releasedBy(article: ArticleBaseDto): Promise<UserDto | null> | null;
|
|
12
13
|
categories(article: ArticleBaseDto, language?: string): Promise<CategoryDto[]>;
|
|
13
14
|
}
|
|
@@ -32,6 +32,9 @@ class ArticleResolver {
|
|
|
32
32
|
this.articleDataloader = articleDataloader;
|
|
33
33
|
this.multiLanguage = multiLanguage;
|
|
34
34
|
}
|
|
35
|
+
articleId(article) {
|
|
36
|
+
return article.id.split(':')[0];
|
|
37
|
+
}
|
|
35
38
|
releasedBy(article) {
|
|
36
39
|
return article.releasedBy ? this.memberDataloader.loader.load(article.releasedBy) : null;
|
|
37
40
|
}
|
|
@@ -42,6 +45,16 @@ class ArticleResolver {
|
|
|
42
45
|
});
|
|
43
46
|
}
|
|
44
47
|
}
|
|
48
|
+
_ts_decorate([
|
|
49
|
+
ResolveField(()=>String),
|
|
50
|
+
IsPublic(),
|
|
51
|
+
_ts_param(0, Root()),
|
|
52
|
+
_ts_metadata("design:type", Function),
|
|
53
|
+
_ts_metadata("design:paramtypes", [
|
|
54
|
+
typeof ArticleBaseDto === "undefined" ? Object : ArticleBaseDto
|
|
55
|
+
]),
|
|
56
|
+
_ts_metadata("design:returntype", String)
|
|
57
|
+
], ArticleResolver.prototype, "articleId", null);
|
|
45
58
|
_ts_decorate([
|
|
46
59
|
ResolveField(()=>UserDto, {
|
|
47
60
|
nullable: true
|
|
@@ -17,6 +17,7 @@ export declare class BackstageArticleResolver {
|
|
|
17
17
|
private readonly versionSignaturesLoader;
|
|
18
18
|
constructor(memberDataloader: MemberDataLoader, articleDataloader: ArticleDataLoader, multiLanguage: boolean, articleVersionDataLoader: ArticleVersionDataLoader, moduleArticleDataLoader: ModuleArticleDataLoader, versionSignaturesLoader: ArticleSignatureDataLoader);
|
|
19
19
|
id(article: ArticleBaseDto): string;
|
|
20
|
+
articleId(article: ArticleBaseDto): string;
|
|
20
21
|
submittedBy(article: ArticleBaseDto): Promise<UserDto | null> | null;
|
|
21
22
|
lastEditor(article: ArticleBaseDto): Promise<UserDto | null> | null;
|
|
22
23
|
releasedBy(article: ArticleBaseDto): Promise<UserDto | null> | null;
|
|
@@ -45,6 +45,9 @@ class BackstageArticleResolver {
|
|
|
45
45
|
id(article) {
|
|
46
46
|
return `${article.id}:${article.version}`;
|
|
47
47
|
}
|
|
48
|
+
articleId(article) {
|
|
49
|
+
return article.id;
|
|
50
|
+
}
|
|
48
51
|
submittedBy(article) {
|
|
49
52
|
return article.submittedBy ? this.memberDataloader.loader.load(article.submittedBy) : null;
|
|
50
53
|
}
|
|
@@ -128,6 +131,16 @@ _ts_decorate([
|
|
|
128
131
|
]),
|
|
129
132
|
_ts_metadata("design:returntype", String)
|
|
130
133
|
], BackstageArticleResolver.prototype, "id", null);
|
|
134
|
+
_ts_decorate([
|
|
135
|
+
ResolveField(()=>String),
|
|
136
|
+
IsPublic(),
|
|
137
|
+
_ts_param(0, Root()),
|
|
138
|
+
_ts_metadata("design:type", Function),
|
|
139
|
+
_ts_metadata("design:paramtypes", [
|
|
140
|
+
typeof ArticleBaseDto === "undefined" ? Object : ArticleBaseDto
|
|
141
|
+
]),
|
|
142
|
+
_ts_metadata("design:returntype", String)
|
|
143
|
+
], BackstageArticleResolver.prototype, "articleId", null);
|
|
131
144
|
_ts_decorate([
|
|
132
145
|
ResolveField(()=>UserDto, {
|
|
133
146
|
nullable: true
|
|
@@ -21,6 +21,9 @@ const QuadratsContentScalar = new GraphQLScalarType({
|
|
|
21
21
|
throw new BadRequestException('Expected a JSON string for QuadratsContent');
|
|
22
22
|
},
|
|
23
23
|
serialize: (value)=>{
|
|
24
|
+
if (typeof value === 'string') {
|
|
25
|
+
return value;
|
|
26
|
+
}
|
|
24
27
|
try {
|
|
25
28
|
return JSON.stringify(value);
|
|
26
29
|
} catch (error) {
|