@rytass/cms-base-nestjs-graphql-module 0.1.22 → 0.1.24
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.
|
@@ -5,8 +5,13 @@ import { CategoryDto } from '../dto/category.dto';
|
|
|
5
5
|
export declare class ArticleDataLoader {
|
|
6
6
|
private readonly articleRepo;
|
|
7
7
|
constructor(articleRepo: Repository<BaseArticleEntity>);
|
|
8
|
+
private readonly batchLoadCategories;
|
|
8
9
|
readonly categoriesLoader: DataLoader<{
|
|
9
10
|
articleId: string;
|
|
10
11
|
language?: string;
|
|
11
12
|
}, CategoryDto[], string>;
|
|
13
|
+
readonly categoriesLoaderNoCache: DataLoader<{
|
|
14
|
+
articleId: string;
|
|
15
|
+
language?: string;
|
|
16
|
+
}, CategoryDto[], string>;
|
|
12
17
|
}
|
|
@@ -23,7 +23,7 @@ class ArticleDataLoader {
|
|
|
23
23
|
constructor(articleRepo){
|
|
24
24
|
this.articleRepo = articleRepo;
|
|
25
25
|
}
|
|
26
|
-
|
|
26
|
+
batchLoadCategories = async (queryArgs)=>{
|
|
27
27
|
const qb = this.articleRepo.createQueryBuilder('articles');
|
|
28
28
|
qb.leftJoinAndSelect('articles.categories', 'categories');
|
|
29
29
|
qb.leftJoinAndSelect('categories.multiLanguageNames', 'multiLanguageNames');
|
|
@@ -42,7 +42,8 @@ class ArticleDataLoader {
|
|
|
42
42
|
]
|
|
43
43
|
}), cVars), vars), {});
|
|
44
44
|
return queryArgs.map((arg)=>categoryMap[`${arg.articleId}:${arg.language ?? DEFAULT_LANGUAGE}`] ?? []);
|
|
45
|
-
}
|
|
45
|
+
};
|
|
46
|
+
categoriesLoader = new DataLoader(this.batchLoadCategories, {
|
|
46
47
|
cache: true,
|
|
47
48
|
cacheMap: new LRUCache({
|
|
48
49
|
ttl: 1000 * 60,
|
|
@@ -51,6 +52,9 @@ class ArticleDataLoader {
|
|
|
51
52
|
}),
|
|
52
53
|
cacheKeyFn: (queryArgs)=>`${queryArgs.articleId}:${queryArgs.language ?? DEFAULT_LANGUAGE}`
|
|
53
54
|
});
|
|
55
|
+
categoriesLoaderNoCache = new DataLoader(this.batchLoadCategories, {
|
|
56
|
+
cache: false
|
|
57
|
+
});
|
|
54
58
|
}
|
|
55
59
|
ArticleDataLoader = _ts_decorate([
|
|
56
60
|
Injectable(),
|
package/index.cjs.js
CHANGED
|
@@ -1126,7 +1126,8 @@ class ArticleQueries {
|
|
|
1126
1126
|
return this.articleService.findCollection({
|
|
1127
1127
|
...args,
|
|
1128
1128
|
stage: cmsBaseNestjsModule.ArticleStage.RELEASED,
|
|
1129
|
-
language: this.multiLanguage ? language ?? cmsBaseNestjsModule.DEFAULT_LANGUAGE : undefined
|
|
1129
|
+
language: this.multiLanguage ? language ?? cmsBaseNestjsModule.DEFAULT_LANGUAGE : undefined,
|
|
1130
|
+
sorter: cmsBaseNestjsModule.ArticleSorter.RELEASED_AT_DESC
|
|
1130
1131
|
});
|
|
1131
1132
|
}
|
|
1132
1133
|
async backstageArticle(id, version) {
|
|
@@ -1469,7 +1470,7 @@ class ArticleDataLoader {
|
|
|
1469
1470
|
constructor(articleRepo){
|
|
1470
1471
|
this.articleRepo = articleRepo;
|
|
1471
1472
|
}
|
|
1472
|
-
|
|
1473
|
+
batchLoadCategories = async (queryArgs)=>{
|
|
1473
1474
|
const qb = this.articleRepo.createQueryBuilder('articles');
|
|
1474
1475
|
qb.leftJoinAndSelect('articles.categories', 'categories');
|
|
1475
1476
|
qb.leftJoinAndSelect('categories.multiLanguageNames', 'multiLanguageNames');
|
|
@@ -1488,7 +1489,8 @@ class ArticleDataLoader {
|
|
|
1488
1489
|
]
|
|
1489
1490
|
}), cVars), vars), {});
|
|
1490
1491
|
return queryArgs.map((arg)=>categoryMap[`${arg.articleId}:${arg.language ?? cmsBaseNestjsModule.DEFAULT_LANGUAGE}`] ?? []);
|
|
1491
|
-
}
|
|
1492
|
+
};
|
|
1493
|
+
categoriesLoader = new DataLoader(this.batchLoadCategories, {
|
|
1492
1494
|
cache: true,
|
|
1493
1495
|
cacheMap: new lruCache.LRUCache({
|
|
1494
1496
|
ttl: 1000 * 60,
|
|
@@ -1497,6 +1499,9 @@ class ArticleDataLoader {
|
|
|
1497
1499
|
}),
|
|
1498
1500
|
cacheKeyFn: (queryArgs)=>`${queryArgs.articleId}:${queryArgs.language ?? cmsBaseNestjsModule.DEFAULT_LANGUAGE}`
|
|
1499
1501
|
});
|
|
1502
|
+
categoriesLoaderNoCache = new DataLoader(this.batchLoadCategories, {
|
|
1503
|
+
cache: false
|
|
1504
|
+
});
|
|
1500
1505
|
}
|
|
1501
1506
|
ArticleDataLoader = _ts_decorate$b([
|
|
1502
1507
|
common.Injectable(),
|
|
@@ -1792,7 +1797,7 @@ class BackstageArticleResolver {
|
|
|
1792
1797
|
return article.releasedBy ? this.memberDataloader.loader.load(article.releasedBy) : null;
|
|
1793
1798
|
}
|
|
1794
1799
|
categories(article, language = cmsBaseNestjsModule.DEFAULT_LANGUAGE) {
|
|
1795
|
-
return this.articleDataloader.
|
|
1800
|
+
return this.articleDataloader.categoriesLoaderNoCache.load({
|
|
1796
1801
|
articleId: article.id,
|
|
1797
1802
|
language: this.multiLanguage ? language : cmsBaseNestjsModule.DEFAULT_LANGUAGE
|
|
1798
1803
|
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rytass/cms-base-nestjs-graphql-module",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.24",
|
|
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.2.
|
|
29
|
+
"@rytass/cms-base-nestjs-module": "^0.2.12",
|
|
30
30
|
"@rytass/member-base-nestjs-module": "^0.2.18",
|
|
31
31
|
"dataloader": "^2.2.3",
|
|
32
32
|
"lru-cache": "^11.2.4"
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Query, Args, ID, Int, Resolver } from '@nestjs/graphql';
|
|
2
|
-
import { MULTIPLE_LANGUAGE_MODE, DEFAULT_LANGUAGE, ArticleStage, ArticleBaseService } from '@rytass/cms-base-nestjs-module';
|
|
2
|
+
import { MULTIPLE_LANGUAGE_MODE, DEFAULT_LANGUAGE, ArticleStage, ArticleSorter, ArticleBaseService } from '@rytass/cms-base-nestjs-module';
|
|
3
3
|
import { ArticlesArgs } from '../dto/articles.args.js';
|
|
4
4
|
import { IsPublic, AllowActions } from '@rytass/member-base-nestjs-module';
|
|
5
5
|
import { Language } from '../decorators/language.decorator.js';
|
|
@@ -43,7 +43,8 @@ class ArticleQueries {
|
|
|
43
43
|
return this.articleService.findCollection({
|
|
44
44
|
...args,
|
|
45
45
|
stage: ArticleStage.RELEASED,
|
|
46
|
-
language: this.multiLanguage ? language ?? DEFAULT_LANGUAGE : undefined
|
|
46
|
+
language: this.multiLanguage ? language ?? DEFAULT_LANGUAGE : undefined,
|
|
47
|
+
sorter: ArticleSorter.RELEASED_AT_DESC
|
|
47
48
|
});
|
|
48
49
|
}
|
|
49
50
|
async backstageArticle(id, version) {
|
|
@@ -58,7 +58,7 @@ class BackstageArticleResolver {
|
|
|
58
58
|
return article.releasedBy ? this.memberDataloader.loader.load(article.releasedBy) : null;
|
|
59
59
|
}
|
|
60
60
|
categories(article, language = DEFAULT_LANGUAGE) {
|
|
61
|
-
return this.articleDataloader.
|
|
61
|
+
return this.articleDataloader.categoriesLoaderNoCache.load({
|
|
62
62
|
articleId: article.id,
|
|
63
63
|
language: this.multiLanguage ? language : DEFAULT_LANGUAGE
|
|
64
64
|
});
|