@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.
@@ -1,6 +1,7 @@
1
+ import { QuadratsElement } from '@quadrats/core';
1
2
  export declare class ArticleVersionContentInput {
2
3
  language?: string | null;
3
4
  title: string;
4
5
  description?: string | null;
5
- content: string;
6
+ content: QuadratsElement[];
6
7
  }
@@ -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(()=>String),
36
- _ts_metadata("design:type", String)
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(()=>String),
123
- _ts_metadata$s("design:type", String)
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
- async createArticle(memberId, args) {
226
- return this.articleService.create({
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
- categoryIds: args.categoryIds,
246
- tags: args.tags,
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 submitArticle(memberId, id, version) {
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 approveArticle(id) {
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(article);
330
+ return this.articleService.approveVersion({
331
+ id,
332
+ version: version ?? article.version
333
+ });
274
334
  }
275
335
  async rejectArticle(id, reason) {
276
- const article = await this.articleService.findById(id);
277
- return this.articleService.rejectVersion(article, {
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(()=>BackstageArticleDto),
390
+ graphql.Mutation(()=>Boolean),
329
391
  memberBaseNestjsModule.IsPublic(),
330
- _ts_param$8(0, memberBaseNestjsModule.MemberId()),
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(2, graphql.Args('version', {
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, graphql.Args('id', {
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
- submitArticle(memberId: string, id: string, version: number): Promise<BackstageArticleDto>;
12
- approveArticle(id: string): Promise<BackstageArticleDto>;
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
- async createArticle(memberId, args) {
28
- return this.articleService.create({
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
- categoryIds: args.categoryIds,
48
- tags: args.tags,
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 submitArticle(memberId, id, version) {
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 approveArticle(id) {
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(article);
90
+ return this.articleService.approveVersion({
91
+ id,
92
+ version: version ?? article.version
93
+ });
76
94
  }
77
95
  async rejectArticle(id, reason) {
78
- const article = await this.articleService.findById(id);
79
- return this.articleService.rejectVersion(article, {
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(()=>BackstageArticleDto),
150
+ Mutation(()=>Boolean),
131
151
  IsPublic(),
132
- _ts_param(0, MemberId()),
133
- _ts_param(1, Args('id', {
152
+ _ts_param(0, Args('id', {
134
153
  type: ()=>ID
135
154
  })),
136
- _ts_param(2, Args('version', {
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, Args('id', {
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.20",
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.91",
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) {