Skip to content

Commit 41d62f0

Browse files
authored
Merge pull request #308 from IQSS/enhanced_search
Enhanced search
2 parents 90f9b04 + 011c4ad commit 41d62f0

File tree

18 files changed

+210
-2
lines changed

18 files changed

+210
-2
lines changed

docs/useCases.md

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,8 @@ The different use cases currently available in the package are classified below,
8585
- [Get Application Terms of Use](#get-application-terms-of-use)
8686
- [Contact](#Contact)
8787
- [Send Feedback to Object Contacts](#send-feedback-to-object-contacts)
88+
- [Search](#Search)
89+
- [Get Search Services](#get-search-services)
8890

8991
## Collections
9092

@@ -222,6 +224,8 @@ This use case supports the following optional parameters depending on the search
222224
- **limit**: (number) Limit for pagination.
223225
- **offset**: (number) Offset for pagination.
224226
- **collectionSearchCriteria**: ([CollectionSearchCriteria](../src/collections/domain/models/CollectionSearchCriteria.ts)) Supports filtering the collection items by different properties.
227+
- **searchServiceName**: The search service name on which to execute the search (Optional).
228+
- **showTypeCounts**: If true, the response will include the count per object type (Optional).
225229

226230
#### List My Data Collection Items
227231

@@ -1991,3 +1995,25 @@ In ContactDTO, it takes the following information:
19911995
- **subject**: the email subject line.
19921996
- **body**: the email body to send.
19931997
- **fromEmail**: the email to list in the reply-to field.
1998+
1999+
## Search
2000+
2001+
#### Get Search Services
2002+
2003+
Returns all [Search Services](../src/search/domain/models/SearchService.ts) available in the installation.
2004+
2005+
##### Example call:
2006+
2007+
```typescript
2008+
import { getSearchServices } from '@iqss/dataverse-client-javascript'
2009+
2010+
/* ... */
2011+
2012+
getSearchServices.execute().then((searchServices: SearchService[]) => {
2013+
/* ... */
2014+
})
2015+
2016+
/* ... */
2017+
```
2018+
2019+
_See [use case](../src/search/domain/useCases/GetSearchServices.ts) implementation_.

src/collections/domain/repositories/ICollectionsRepository.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ export interface ICollectionsRepository {
2727
limit?: number,
2828
offset?: number,
2929
collectionSearchCriteria?: CollectionSearchCriteria,
30+
searchServiceName?: string,
3031
showTypeCounts?: boolean
3132
): Promise<CollectionItemSubset>
3233
getMyDataCollectionItems(

src/collections/domain/useCases/GetCollectionItems.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ export class GetCollectionItems implements UseCase<CollectionItemSubset> {
1818
* @param {number} [limit] - Limit for pagination (optional).
1919
* @param {number} [offset] - Offset for pagination (optional).
2020
* @param {CollectionSearchCriteria} [collectionSearchCriteria] - Supports filtering the collection items by different properties (optional).
21+
* @param {string} [searchServiceName] - The search service name on which to execute the search (optional).
2122
* @param {boolean} [showTypeCounts] - If true, the response will include the count per object type (optional).
2223
* @returns {Promise<CollectionItemSubset>}
2324
*/
@@ -26,13 +27,15 @@ export class GetCollectionItems implements UseCase<CollectionItemSubset> {
2627
limit?: number,
2728
offset?: number,
2829
collectionSearchCriteria?: CollectionSearchCriteria,
30+
searchServiceName?: string,
2931
showTypeCounts = false
3032
): Promise<CollectionItemSubset> {
3133
return await this.collectionsRepository.getCollectionItems(
3234
collectionId,
3335
limit,
3436
offset,
3537
collectionSearchCriteria,
38+
searchServiceName,
3639
showTypeCounts
3740
)
3841
}

src/collections/infra/repositories/CollectionsRepository.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,8 @@ export enum GetCollectionItemsQueryParams {
7575
START = 'start',
7676
TYPE = 'type',
7777
FILTERQUERY = 'fq',
78-
SHOW_TYPE_COUNTS = 'show_type_counts'
78+
SHOW_TYPE_COUNTS = 'show_type_counts',
79+
SEARCH_SERVICE_NAME = 'search_service'
7980
}
8081

8182
export enum GetMyDataCollectionItemsQueryParams {
@@ -168,6 +169,7 @@ export class CollectionsRepository extends ApiRepository implements ICollections
168169
limit?: number,
169170
offset?: number,
170171
collectionSearchCriteria?: CollectionSearchCriteria,
172+
searchServiceName?: string,
171173
showTypeCounts?: boolean
172174
): Promise<CollectionItemSubset> {
173175
const queryParams = new URLSearchParams({
@@ -193,6 +195,10 @@ export class CollectionsRepository extends ApiRepository implements ICollections
193195
queryParams.set(GetCollectionItemsQueryParams.SHOW_TYPE_COUNTS, 'true')
194196
}
195197

198+
if (searchServiceName) {
199+
queryParams.set(GetCollectionItemsQueryParams.SEARCH_SERVICE_NAME, searchServiceName)
200+
}
201+
196202
if (collectionSearchCriteria) {
197203
this.applyCollectionSearchCriteriaToQueryParams(queryParams, collectionSearchCriteria)
198204
}

src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,4 @@ export * from './collections'
88
export * from './metadataBlocks'
99
export * from './files'
1010
export * from './contactInfo'
11+
export * from './search'
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
export interface SearchService {
2+
name: string
3+
displayName: string
4+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import { SearchService } from '../models/SearchService'
2+
3+
export interface ISearchServicesRepository {
4+
getSearchServices(): Promise<SearchService[]>
5+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import { UseCase } from '../../../core/domain/useCases/UseCase'
2+
import { SearchService } from '../models/SearchService'
3+
import { ISearchServicesRepository } from '../repositories/ISearchServicesRepository'
4+
5+
export class GetSearchServices implements UseCase<SearchService[]> {
6+
private searchServicesRepository: ISearchServicesRepository
7+
8+
constructor(searchServicesRepository: ISearchServicesRepository) {
9+
this.searchServicesRepository = searchServicesRepository
10+
}
11+
12+
/**
13+
* Returns all search services available in the installation.
14+
*
15+
* @returns {Promise<SearchService[]>}
16+
*/
17+
async execute(): Promise<SearchService[]> {
18+
return await this.searchServicesRepository.getSearchServices()
19+
}
20+
}

src/search/index.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import { GetSearchServices } from './domain/useCases/GetSearchServices'
2+
import { SearchServicesRepository } from './infra/repositories/SearchServicesRepository'
3+
4+
const searchServicesRepository = new SearchServicesRepository()
5+
6+
const getSearchServices = new GetSearchServices(searchServicesRepository)
7+
8+
export { getSearchServices }
9+
10+
export { SearchService } from './domain/models/SearchService'
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import { ApiRepository } from '../../../core/infra/repositories/ApiRepository'
2+
import { SearchService } from '../../domain/models/SearchService'
3+
import { ISearchServicesRepository } from '../../domain/repositories/ISearchServicesRepository'
4+
import { transformSearchServicesResponseToSearchServices } from './transformers/searchServiceTransformers'
5+
6+
export class SearchServicesRepository extends ApiRepository implements ISearchServicesRepository {
7+
public async getSearchServices(): Promise<SearchService[]> {
8+
return this.doGet(`/search/services`)
9+
.then((response) => transformSearchServicesResponseToSearchServices(response))
10+
.catch((error) => {
11+
throw error
12+
})
13+
}
14+
}

0 commit comments

Comments
 (0)