Skip to content

Commit c611295

Browse files
committed
feat: infra domain and use cases
1 parent c420849 commit c611295

File tree

6 files changed

+71
-0
lines changed

6 files changed

+71
-0
lines changed
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
export interface CollectionFeaturedItem {
2+
id: number
3+
content: string
4+
imageFileName?: string
5+
imageFileUrl?: string
6+
displayOrder: number
7+
}

src/collections/domain/repositories/ICollectionsRepository.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { CollectionDTO } from '../dtos/CollectionDTO'
22
import { Collection } from '../models/Collection'
33
import { CollectionFacet } from '../models/CollectionFacet'
4+
import { CollectionFeaturedItem } from '../models/CollectionFeaturedItem'
45
import { CollectionItemSubset } from '../models/CollectionItemSubset'
56
import { CollectionSearchCriteria } from '../models/CollectionSearchCriteria'
67
import { CollectionUserPermissions } from '../models/CollectionUserPermissions'
@@ -26,4 +27,7 @@ export interface ICollectionsRepository {
2627
collectionIdOrAlias: number | string,
2728
updatedCollection: CollectionDTO
2829
): Promise<void>
30+
getCollectionFeaturedItems(
31+
collectionIdOrAlias: number | string
32+
): Promise<CollectionFeaturedItem[]>
2933
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import { UseCase } from '../../../core/domain/useCases/UseCase'
2+
import { ICollectionsRepository } from '../repositories/ICollectionsRepository'
3+
import { ROOT_COLLECTION_ID } from '../models/Collection'
4+
import { CollectionFeaturedItem } from '../models/CollectionFeaturedItem'
5+
6+
export class GetCollectionFeaturedItems implements UseCase<CollectionFeaturedItem[]> {
7+
private collectionsRepository: ICollectionsRepository
8+
9+
constructor(collectionsRepository: ICollectionsRepository) {
10+
this.collectionsRepository = collectionsRepository
11+
}
12+
13+
/**
14+
* Returns a CollectionFeaturedItem array containing the featured items of the requested collection, given the collection identifier or alias.
15+
*
16+
* @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)
17+
* If this parameter is not set, the default value is: ':root'
18+
* @returns {Promise<CollectionFeaturedItem>}
19+
*/
20+
async execute(
21+
collectionIdOrAlias: number | string = ROOT_COLLECTION_ID
22+
): Promise<CollectionFeaturedItem[]> {
23+
return await this.collectionsRepository.getCollectionFeaturedItems(collectionIdOrAlias)
24+
}
25+
}

src/collections/infra/repositories/CollectionsRepository.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ import {
1717
SortType
1818
} from '../../domain/models/CollectionSearchCriteria'
1919
import { CollectionItemType } from '../../domain/models/CollectionItemType'
20+
import { CollectionFeaturedItem } from '../../domain/models/CollectionFeaturedItem'
21+
import { transformCollectionFeaturedItemsPayloadToCollectionFeaturedItems } from './transformers/collectionFeaturedItemsTransformer'
2022

2123
export interface NewCollectionRequestPayload {
2224
alias: string
@@ -240,4 +242,16 @@ export class CollectionsRepository extends ApiRepository implements ICollections
240242
})
241243
}
242244
}
245+
246+
public async getCollectionFeaturedItems(
247+
collectionIdOrAlias: number | string
248+
): Promise<CollectionFeaturedItem[]> {
249+
return this.doGet(`/${this.collectionsResourceName}/${collectionIdOrAlias}/featuredItems`, true)
250+
.then((response) =>
251+
transformCollectionFeaturedItemsPayloadToCollectionFeaturedItems(response.data.data)
252+
)
253+
.catch((error) => {
254+
throw error
255+
})
256+
}
243257
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
export interface CollectionFeaturedItemPayload {
2+
id: number
3+
content: string
4+
imageFileName: string | null
5+
imageFileUrl: string | null
6+
displayOrder: number
7+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import { CollectionFeaturedItem } from '../../../domain/models/CollectionFeaturedItem'
2+
import { CollectionFeaturedItemPayload } from './CollectionFeaturedItemPayload'
3+
4+
export const transformCollectionFeaturedItemsPayloadToCollectionFeaturedItems = (
5+
collectionFeaturedItemsPayload: CollectionFeaturedItemPayload[]
6+
): CollectionFeaturedItem[] => {
7+
return collectionFeaturedItemsPayload.map((collectionFeaturedItemPayload) => ({
8+
id: collectionFeaturedItemPayload.id,
9+
content: collectionFeaturedItemPayload.content,
10+
imageFileUrl: collectionFeaturedItemPayload.imageFileUrl,
11+
imageFileName: collectionFeaturedItemPayload.imageFileName,
12+
displayOrder: collectionFeaturedItemPayload.displayOrder
13+
}))
14+
}

0 commit comments

Comments
 (0)