Skip to content

Commit 6199296

Browse files
committed
Stash: CollectionSearchCriteria for GetCollectionItems WIP
1 parent 911a405 commit 6199296

File tree

6 files changed

+43
-6
lines changed

6 files changed

+43
-6
lines changed

docs/useCases.md

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -186,10 +186,14 @@ _See [use case](../src/collections/domain/useCases/GetCollectionItems.ts) implem
186186

187187
Note that `collectionId` is an optional parameter to filter the items by a specific collection. If not set, the use case will return items starting from the root collection.
188188

189-
Note that `limit` and `offset` are optional parameters for pagination.
190-
191189
The `CollectionItemSubset`returned instance contains a property called `totalItemCount` which is necessary for pagination.
192190

191+
This use case supports the following optional parameters depending on the search goals:
192+
193+
- **limit**: (number) Limit for pagination.
194+
- **offset**: (number) Offset for pagination.
195+
- **collectionSearchCriteria**: ([CollectionSearchCriteria](../src/collections/domain/models/CollectionSearchCriteria.ts)) Supports filtering the collection items by different properties.
196+
193197
### Collections Write Use Cases
194198

195199
#### Create a Collection
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
export class CollectionSearchCriteria {
2+
constructor(public readonly searchText?: string) {}
3+
4+
withSearchText(searchText: string | undefined): CollectionSearchCriteria {
5+
return new CollectionSearchCriteria(searchText)
6+
}
7+
}

src/collections/domain/repositories/ICollectionsRepository.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { CollectionDTO } from '../dtos/CollectionDTO'
22
import { Collection } from '../models/Collection'
33
import { CollectionFacet } from '../models/CollectionFacet'
44
import { CollectionItemSubset } from '../models/CollectionItemSubset'
5+
import { CollectionSearchCriteria } from '../models/CollectionSearchCriteria'
56
import { CollectionUserPermissions } from '../models/CollectionUserPermissions'
67

78
export interface ICollectionsRepository {
@@ -17,6 +18,7 @@ export interface ICollectionsRepository {
1718
getCollectionItems(
1819
collectionId?: string,
1920
limit?: number,
20-
offset?: number
21+
offset?: number,
22+
collectionSearchCriteria?: CollectionSearchCriteria
2123
): Promise<CollectionItemSubset>
2224
}

src/collections/domain/useCases/GetCollectionItems.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { UseCase } from '../../../core/domain/useCases/UseCase'
2+
import { CollectionSearchCriteria } from '../../../collections'
23
import { CollectionItemSubset } from '../models/CollectionItemSubset'
34
import { ICollectionsRepository } from '../repositories/ICollectionsRepository'
45

@@ -16,13 +17,20 @@ export class GetCollectionItems implements UseCase<CollectionItemSubset> {
1617
* @param {string} [collectionId] - Collection id (optional).
1718
* @param {number} [limit] - Limit for pagination (optional).
1819
* @param {number} [offset] - Offset for pagination (optional).
20+
* @param {CollectionSearchCriteria} [collectionSearchCriteria] - Supports filtering the collection items by different properties (optional).
1921
* @returns {Promise<CollectionItemSubset>}
2022
*/
2123
async execute(
2224
collectionId?: string,
2325
limit?: number,
24-
offset?: number
26+
offset?: number,
27+
collectionSearchCriteria?: CollectionSearchCriteria,
2528
): Promise<CollectionItemSubset> {
26-
return await this.collectionsRepository.getCollectionItems(collectionId, limit, offset)
29+
return await this.collectionsRepository.getCollectionItems(
30+
collectionId,
31+
limit,
32+
offset,
33+
collectionSearchCriteria
34+
)
2735
}
2836
}

src/collections/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,3 +26,4 @@ export { CollectionFacet } from './domain/models/CollectionFacet'
2626
export { CollectionUserPermissions } from './domain/models/CollectionUserPermissions'
2727
export { CollectionDTO, CollectionInputLevelDTO } from './domain/dtos/CollectionDTO'
2828
export { CollectionPreview } from './domain/models/CollectionPreview'
29+
export { CollectionSearchCriteria } from './domain/models/CollectionSearchCriteria'

src/collections/infra/repositories/CollectionsRepository.ts

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import { CollectionFacet } from '../../domain/models/CollectionFacet'
1111
import { CollectionUserPermissions } from '../../domain/models/CollectionUserPermissions'
1212
import { transformCollectionUserPermissionsResponseToCollectionUserPermissions } from './transformers/collectionUserPermissionsTransformers'
1313
import { CollectionItemSubset } from '../../domain/models/CollectionItemSubset'
14+
import { CollectionSearchCriteria } from '../../domain/models/CollectionSearchCriteria'
1415

1516
export interface NewCollectionRequestPayload {
1617
alias: string
@@ -42,6 +43,7 @@ export interface GetCollectionItemsQueryParams {
4243
subtree?: string
4344
per_page?: number
4445
start?: number
46+
searchText?: string
4547
}
4648

4749
export class CollectionsRepository extends ApiRepository implements ICollectionsRepository {
@@ -131,7 +133,8 @@ export class CollectionsRepository extends ApiRepository implements ICollections
131133
public async getCollectionItems(
132134
collectionId?: string,
133135
limit?: number,
134-
offset?: number
136+
offset?: number,
137+
collectionSearchCriteria?: CollectionSearchCriteria
135138
): Promise<CollectionItemSubset> {
136139
const queryParams: GetCollectionItemsQueryParams = {}
137140
if (collectionId !== undefined) {
@@ -143,10 +146,22 @@ export class CollectionsRepository extends ApiRepository implements ICollections
143146
if (offset !== undefined) {
144147
queryParams.start = offset
145148
}
149+
if (collectionSearchCriteria !== undefined) {
150+
this.applyCollectionSearchCriteriaToQueryParams(queryParams, collectionSearchCriteria)
151+
}
146152
return this.doGet('/search?q=*&sort=date&order=desc', true, queryParams)
147153
.then((response) => transformCollectionItemsResponseToCollectionItemSubset(response))
148154
.catch((error) => {
149155
throw error
150156
})
151157
}
158+
159+
private applyCollectionSearchCriteriaToQueryParams(
160+
queryParams: GetCollectionItemsQueryParams,
161+
collectionSearchCriteria: CollectionSearchCriteria
162+
) {
163+
if (collectionSearchCriteria.searchText !== undefined) {
164+
queryParams.searchText = collectionSearchCriteria.searchText
165+
}
166+
}
152167
}

0 commit comments

Comments
 (0)