Skip to content

Commit 9cd2389

Browse files
authored
Merge pull request #316 from IQSS/feat/315-featured-items-dvobjects-extension
Featured Items Use Cases dvObjects extension
2 parents 05f7d3f + 9b27f8d commit 9cd2389

22 files changed

+1019
-241
lines changed

docs/useCases.md

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ The different use cases currently available in the package are classified below,
2323
- [Delete a Collection](#delete-a-collection)
2424
- [Update Collection Featured Items](#update-collection-featured-items)
2525
- [Delete Collection Featured Items](#delete-collection-featured-items)
26+
- [Delete a Collection Featured Item](#delete-a-collection-featured-item)
2627
- [Datasets](#Datasets)
2728
- [Datasets read use cases](#datasets-read-use-cases)
2829
- [Get a Dataset](#get-a-dataset)
@@ -277,7 +278,7 @@ The `CollectionItemSubset`returned instance contains a property called `totalIte
277278

278279
#### Get Collection Featured Items
279280

280-
Returns a [CollectionFeaturedItem](../src/collections/domain/models/CollectionFeaturedItem.ts) array containing the featured items of the requested collection, given the collection identifier or alias.
281+
Returns a [FeaturedItem](../src/collections/domain/models/CollectionFeaturedItem.ts) array containing the featured items of the requested collection, given the collection identifier or alias.
281282

282283
##### Example call:
283284

@@ -288,7 +289,7 @@ const collectionIdOrAlias = 12345
288289

289290
getCollectionFeaturedItems
290291
.execute(collectionId)
291-
.then((featuredItems: CollectionFeaturedItem[]) => {
292+
.then((featuredItems: FeaturedItem[]) => {
292293
/* ... */
293294
})
294295
.catch((error: Error) => {
@@ -405,7 +406,7 @@ _See [use case](../src/collections/domain/useCases/DeleteCollection.ts)_ definit
405406

406407
#### Update Collection Featured Items
407408

408-
Updates all featured items, given a collection identifier and a CollectionFeaturedItemsDTO.
409+
Updates all featured items, given a collection identifier and a FeaturedItemsDTO.
409410

410411
##### Example call:
411412

@@ -416,11 +417,9 @@ import { updateCollectionFeaturedItems } from '@iqss/dataverse-client-javascript
416417

417418
const collectionIdOrAlias = 12345
418419

419-
updateCollectionFeaturedItems
420-
.execute(collectionIdOrAlias)
421-
.then((collectionFeaturedItems: CollectionFeaturedItem[]) => {
422-
/* ... */
423-
})
420+
updateCollectionFeaturedItems.execute(collectionIdOrAlias).then((featuredItems: FeaturedItem[]) => {
421+
/* ... */
422+
})
424423

425424
/* ... */
426425
```
@@ -451,6 +450,26 @@ The `collectionIdOrAlias` is a generic collection identifier, which can be eithe
451450

452451
_See [use case](../src/collections/domain/useCases/DeleteCollectionFeaturedItems.ts)_ definition.
453452

453+
#### Delete A Collection Featured Item
454+
455+
Deletes a single featured item, given a featured item id.
456+
457+
##### Example call:
458+
459+
```typescript
460+
import { deleteCollectionFeaturedItem } from '@iqss/dataverse-client-javascript'
461+
462+
/* ... */
463+
464+
const featuredItemId = 12345
465+
466+
deleteCollectionFeaturedItem.execute(featuredItemId)
467+
468+
/* ... */
469+
```
470+
471+
_See [use case](../src/collections/domain/useCases/DeleteCollectionFeaturedItem.ts)_ definition.
472+
454473
## Datasets
455474

456475
### Datasets Read Use Cases

src/collections/domain/dtos/CollectionFeaturedItemsDTO.ts

Lines changed: 0 additions & 9 deletions
This file was deleted.
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import { CustomFeaturedItem, DvObjectFeaturedItem } from '../models/FeaturedItem'
2+
3+
export type FeaturedItemsDTO = (CustomFeaturedItemDTO | DvObjectFeaturedItemDTO)[]
4+
5+
export interface CustomFeaturedItemDTO {
6+
id?: number
7+
type: CustomFeaturedItem['type']
8+
content: string
9+
displayOrder: number
10+
file?: File
11+
keepFile: boolean
12+
}
13+
14+
export interface DvObjectFeaturedItemDTO {
15+
id?: number
16+
type: DvObjectFeaturedItem['type']
17+
dvObjectIdentifier: string
18+
displayOrder: number
19+
}

src/collections/domain/models/CollectionFeaturedItem.ts

Lines changed: 0 additions & 7 deletions
This file was deleted.
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
export type FeaturedItem = CustomFeaturedItem | DvObjectFeaturedItem
2+
3+
export interface CustomFeaturedItem {
4+
id: number
5+
type: FeaturedItemType.CUSTOM
6+
content: string
7+
imageFileName?: string
8+
imageFileUrl?: string
9+
displayOrder: number
10+
}
11+
12+
export interface DvObjectFeaturedItem {
13+
id: number
14+
type: FeaturedItemType.COLLECTION | FeaturedItemType.DATASET | FeaturedItemType.FILE
15+
dvObjectIdentifier: string
16+
dvObjectDisplayName: string
17+
displayOrder: number
18+
}
19+
20+
export enum FeaturedItemType {
21+
CUSTOM = 'custom',
22+
COLLECTION = 'collection',
23+
DATASET = 'dataset',
24+
FILE = 'file'
25+
}

src/collections/domain/repositories/ICollectionsRepository.ts

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import { CollectionDTO } from '../dtos/CollectionDTO'
2-
import { CollectionFeaturedItemsDTO } from '../dtos/CollectionFeaturedItemsDTO'
2+
import { FeaturedItemsDTO } from '../dtos/FeaturedItemsDTO'
33
import { Collection } from '../models/Collection'
44
import { CollectionFacet } from '../models/CollectionFacet'
5-
import { CollectionFeaturedItem } from '../models/CollectionFeaturedItem'
5+
import { FeaturedItem } from '../models/FeaturedItem'
66
import { CollectionItemSubset } from '../models/CollectionItemSubset'
77
import { MyDataCollectionItemSubset } from '../models/MyDataCollectionItemSubset'
88
import { CollectionSearchCriteria } from '../models/CollectionSearchCriteria'
@@ -42,12 +42,11 @@ export interface ICollectionsRepository {
4242
collectionIdOrAlias: number | string,
4343
updatedCollection: CollectionDTO
4444
): Promise<void>
45-
getCollectionFeaturedItems(
46-
collectionIdOrAlias: number | string
47-
): Promise<CollectionFeaturedItem[]>
45+
getCollectionFeaturedItems(collectionIdOrAlias: number | string): Promise<FeaturedItem[]>
4846
updateCollectionFeaturedItems(
4947
collectionIdOrAlias: number | string,
50-
featuredItemDTOs: CollectionFeaturedItemsDTO
51-
): Promise<CollectionFeaturedItem[]>
48+
featuredItemDTOs: FeaturedItemsDTO
49+
): Promise<FeaturedItem[]>
5250
deleteCollectionFeaturedItems(collectionIdOrAlias: number | string): Promise<void>
51+
deleteCollectionFeaturedItem(featuredItemId: number): Promise<void>
5352
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import { UseCase } from '../../../core/domain/useCases/UseCase'
2+
import { ICollectionsRepository } from '../repositories/ICollectionsRepository'
3+
4+
export class DeleteCollectionFeaturedItem implements UseCase<void> {
5+
private collectionsRepository: ICollectionsRepository
6+
7+
constructor(collectionsRepository: ICollectionsRepository) {
8+
this.collectionsRepository = collectionsRepository
9+
}
10+
11+
/**
12+
* Deletes a single featured item, given a featured item id.
13+
*
14+
* @param {number} [featuredItemId] - The id of the featured item to delete.
15+
* @returns {Promise<void>} - This method does not return anything upon successful completion.
16+
* @throws {WriteError} - If there are errors while writing data.
17+
*/
18+
async execute(featuredItemId: number): Promise<void> {
19+
return await this.collectionsRepository.deleteCollectionFeaturedItem(featuredItemId)
20+
}
21+
}
Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,25 @@
11
import { UseCase } from '../../../core/domain/useCases/UseCase'
22
import { ICollectionsRepository } from '../repositories/ICollectionsRepository'
33
import { ROOT_COLLECTION_ID } from '../models/Collection'
4-
import { CollectionFeaturedItem } from '../models/CollectionFeaturedItem'
4+
import { FeaturedItem } from '../models/FeaturedItem'
55

6-
export class GetCollectionFeaturedItems implements UseCase<CollectionFeaturedItem[]> {
6+
export class GetCollectionFeaturedItems implements UseCase<FeaturedItem[]> {
77
private collectionsRepository: ICollectionsRepository
88

99
constructor(collectionsRepository: ICollectionsRepository) {
1010
this.collectionsRepository = collectionsRepository
1111
}
1212

1313
/**
14-
* Returns a CollectionFeaturedItem array containing the featured items of the requested collection, given the collection identifier or alias.
14+
* Returns a FeaturedItem array containing the featured items of the requested collection, given the collection identifier or alias.
1515
*
1616
* @param {number | string} [collectionIdOrAlias = ':root'] - A generic collection identifier, which can be either a string (for queries by CollectionAlias), or a number (for queries by CollectionId)
1717
* If this parameter is not set, the default value is: ':root'
18-
* @returns {Promise<CollectionFeaturedItem[]>}
18+
* @returns {Promise<FeaturedItem[]>}
1919
*/
2020
async execute(
2121
collectionIdOrAlias: number | string = ROOT_COLLECTION_ID
22-
): Promise<CollectionFeaturedItem[]> {
22+
): Promise<FeaturedItem[]> {
2323
return await this.collectionsRepository.getCollectionFeaturedItems(collectionIdOrAlias)
2424
}
2525
}

src/collections/domain/useCases/UpdateCollectionFeaturedItems.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,29 @@
11
import { UseCase } from '../../../core/domain/useCases/UseCase'
2-
import { CollectionFeaturedItemsDTO } from '../dtos/CollectionFeaturedItemsDTO'
2+
import { FeaturedItemsDTO } from '../dtos/FeaturedItemsDTO'
33
import { ROOT_COLLECTION_ID } from '../models/Collection'
4-
import { CollectionFeaturedItem } from '../models/CollectionFeaturedItem'
4+
import { FeaturedItem } from '../models/FeaturedItem'
55
import { ICollectionsRepository } from '../repositories/ICollectionsRepository'
66

7-
export class UpdateCollectionFeaturedItems implements UseCase<CollectionFeaturedItem[]> {
7+
export class UpdateCollectionFeaturedItems implements UseCase<FeaturedItem[]> {
88
private collectionsRepository: ICollectionsRepository
99

1010
constructor(collectionsRepository: ICollectionsRepository) {
1111
this.collectionsRepository = collectionsRepository
1212
}
1313

1414
/**
15-
* Updates all featured items, given a collection identifier and a CollectionFeaturedItemsDTO.
15+
* Updates all featured items, given a collection identifier and a FeaturedItemsDTO.
1616
*
1717
* @param {number | string} [collectionIdOrAlias = ':root'] - A generic collection identifier, which can be either a string (for queries by CollectionAlias), or a number (for queries by CollectionId)
1818
* If this parameter is not set, the default value is: ':root'
19-
* @param {CollectionFeaturedItemsDTO} [newCollectionFeaturedItems] - CollectionFeaturedItemsDTO object including the updated collection featured items data.
20-
* @returns {Promise<CollectionFeaturedItem[]>} -This method returns the updated collection featured items upon successful completion.
19+
* @param {FeaturedItemsDTO} [featuredItemsDTO] - FeaturedItemsDTO object including the updated collection featured items data.
20+
* @returns {Promise<FeaturedItem[]>} -This method returns the updated collection featured items upon successful completion.
2121
* @throws {WriteError} - If there are errors while writing data.
2222
*/
2323
async execute(
2424
collectionIdOrAlias: number | string = ROOT_COLLECTION_ID,
25-
featuredItemsDTO: CollectionFeaturedItemsDTO
26-
): Promise<CollectionFeaturedItem[]> {
25+
featuredItemsDTO: FeaturedItemsDTO
26+
): Promise<FeaturedItem[]> {
2727
return await this.collectionsRepository.updateCollectionFeaturedItems(
2828
collectionIdOrAlias,
2929
featuredItemsDTO

src/collections/index.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import { UpdateCollectionFeaturedItems } from './domain/useCases/UpdateCollectio
1111
import { DeleteCollectionFeaturedItems } from './domain/useCases/DeleteCollectionFeaturedItems'
1212
import { DeleteCollection } from './domain/useCases/DeleteCollection'
1313
import { GetMyDataCollectionItems } from './domain/useCases/GetMyDataCollectionItems'
14+
import { DeleteCollectionFeaturedItem } from './domain/useCases/DeleteCollectionFeaturedItem'
1415

1516
const collectionsRepository = new CollectionsRepository()
1617

@@ -26,6 +27,7 @@ const getCollectionFeaturedItems = new GetCollectionFeaturedItems(collectionsRep
2627
const updateCollectionFeaturedItems = new UpdateCollectionFeaturedItems(collectionsRepository)
2728
const deleteCollectionFeaturedItems = new DeleteCollectionFeaturedItems(collectionsRepository)
2829
const deleteCollection = new DeleteCollection(collectionsRepository)
30+
const deleteCollectionFeaturedItem = new DeleteCollectionFeaturedItem(collectionsRepository)
2931

3032
export {
3133
getCollection,
@@ -39,7 +41,8 @@ export {
3941
getCollectionFeaturedItems,
4042
updateCollectionFeaturedItems,
4143
deleteCollectionFeaturedItems,
42-
deleteCollection
44+
deleteCollection,
45+
deleteCollectionFeaturedItem
4346
}
4447
export { Collection, CollectionInputLevel } from './domain/models/Collection'
4548
export { CollectionFacet } from './domain/models/CollectionFacet'
@@ -48,5 +51,5 @@ export { CollectionDTO, CollectionInputLevelDTO } from './domain/dtos/Collection
4851
export { CollectionPreview } from './domain/models/CollectionPreview'
4952
export { CollectionItemType } from './domain/models/CollectionItemType'
5053
export { CollectionSearchCriteria } from './domain/models/CollectionSearchCriteria'
51-
export { CollectionFeaturedItem } from './domain/models/CollectionFeaturedItem'
52-
export { CollectionFeaturedItemsDTO } from './domain/dtos/CollectionFeaturedItemsDTO'
54+
export { FeaturedItem } from './domain/models/FeaturedItem'
55+
export { FeaturedItemsDTO } from './domain/dtos/FeaturedItemsDTO'

0 commit comments

Comments
 (0)