6
6
import { ContentSearchParams , ContentSearchSort } from '../../../../common/contentSearch' ;
7
7
import { Request } from 'express' ;
8
8
import { parseNumberParam , parseToStringArray } from '../../utils/queryParams' ;
9
+ import { CmsArchiveCategoriesService } from '../../cms/CmsArchiveCategoriesService' ;
9
10
10
11
const SIZE_DEFAULT = 50 ;
11
12
@@ -27,15 +28,14 @@ const sortParams: Record<ContentSearchSort, SearchSort> = {
27
28
} as const ;
28
29
29
30
export const transformQueryToContentSearchParams = ( req : Request ) : ContentSearchParams | null => {
30
- const { query, fullQuery, size, sort, from, categoryKeys } = req . query as Record <
31
- string ,
32
- string
33
- > ;
31
+ const { query, withContent, size, sort, from, categoryKeys, withChildCategories } =
32
+ req . query as Record < keyof ContentSearchParams , string > ;
34
33
35
34
return {
36
35
query,
37
- fullQuery : fullQuery === 'true' ,
36
+ withContent : withContent === 'true' ,
38
37
categoryKeys : parseToStringArray ( categoryKeys ) ,
38
+ withChildCategories : withChildCategories === 'true' ,
39
39
sort : isValidSort ( sort ) ? sort : 'score' ,
40
40
from : parseNumberParam ( from ) ?? 0 ,
41
41
size : parseNumberParam ( size ) ?? SIZE_DEFAULT ,
@@ -45,9 +45,18 @@ export const transformQueryToContentSearchParams = (req: Request): ContentSearch
45
45
const includedFields = [ 'contentKey' , 'versionKey' , 'displayName' , 'category.key' ] ;
46
46
47
47
export const buildContentSearchParams = (
48
- contentSearchParams : ContentSearchParams
48
+ contentSearchParams : ContentSearchParams ,
49
+ categoriesService : CmsArchiveCategoriesService
49
50
) : SearchRequest => {
50
- const { query, from, size, sort = 'score' , fullQuery, categoryKeys } = contentSearchParams ;
51
+ const {
52
+ query,
53
+ from,
54
+ size,
55
+ sort = 'score' ,
56
+ withContent,
57
+ categoryKeys,
58
+ withChildCategories,
59
+ } = contentSearchParams ;
51
60
52
61
const must : QueryDslQueryContainer [ ] = [
53
62
{
@@ -62,7 +71,7 @@ export const buildContentSearchParams = (
62
71
if ( query ) {
63
72
const fields = [ 'displayName^10' ] ;
64
73
65
- if ( fullQuery ) {
74
+ if ( withContent ) {
66
75
fields . push ( 'xmlAsString' ) ;
67
76
}
68
77
@@ -76,9 +85,18 @@ export const buildContentSearchParams = (
76
85
}
77
86
78
87
if ( categoryKeys ) {
88
+ const categoryKeysFinal = [ ...categoryKeys ] ;
89
+
90
+ if ( withChildCategories ) {
91
+ const childCategoryKeys = categoryKeys . flatMap ( ( key ) =>
92
+ categoriesService . getDescendantCategories ( key )
93
+ ) ;
94
+ categoryKeysFinal . push ( ...childCategoryKeys ) ;
95
+ }
96
+
79
97
must . push ( {
80
98
terms : {
81
- 'category.key' : categoryKeys ,
99
+ 'category.key' : categoryKeysFinal ,
82
100
} ,
83
101
} ) ;
84
102
}
0 commit comments