Skip to content

Commit b5e62a6

Browse files
committed
Merge branch 'develop' into feat/258-replace-file-use-case
2 parents f875666 + 3446807 commit b5e62a6

File tree

24 files changed

+647
-23
lines changed

24 files changed

+647
-23
lines changed

.github/workflows/copy_labels.yml

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
name: Copy labels from issue to pull request
2+
3+
on:
4+
pull_request:
5+
types: [opened]
6+
7+
jobs:
8+
copy-labels:
9+
runs-on: ubuntu-latest
10+
name: Copy labels from linked issues
11+
steps:
12+
- name: copy-labels
13+
uses: michalvankodev/[email protected]
14+
with:
15+
repo-token: ${{ secrets.GITHUB_TOKEN }}
16+
labels-to-exclude: |
17+
Size: 3
18+
Size: 10
19+
Size: 20
20+
Size: 33
21+
Size: 80
22+
Original size: 3
23+
Original size: 10
24+
Original size: 20
25+
Original size: 33
26+
Original size: 80

docs/useCases.md

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ The different use cases currently available in the package are classified below,
1919
- [Create a Collection](#create-a-collection)
2020
- [Update a Collection](#update-a-collection)
2121
- [Publish a Collection](#publish-a-collection)
22+
- [Delete a Collection](#delete-a-collection)
2223
- [Update Collection Featured Items](#update-collection-featured-items)
2324
- [Delete Collection Featured Items](#delete-collection-featured-items)
2425
- [Datasets](#Datasets)
@@ -52,6 +53,7 @@ The different use cases currently available in the package are classified below,
5253
- [File Uploading Use Cases](#file-uploading-use-cases)
5354
- [Delete a File](#delete-a-file)
5455
- [Replace a File](#replace-a-file)
56+
- [Restrict or Unrestrict a File](#restrict-or-unrestrict-a-file)
5557
- [Metadata Blocks](#metadata-blocks)
5658
- [Metadata Blocks read use cases](#metadata-blocks-read-use-cases)
5759
- [Get All Facetable Metadata Fields](#get-all-facetable-metadata-fields)
@@ -320,6 +322,24 @@ The `collectionIdOrAlias` is a generic collection identifier, which can be eithe
320322

321323
_See [use case](../src/collections/domain/useCases/PublishCollection.ts)_ definition.
322324

325+
### Delete a Collection
326+
327+
```typescript
328+
import { deleteCollection } from '@iqss/dataverse-client-javascript'
329+
330+
/* ... */
331+
332+
const collectionIdOrAlias = 12345
333+
334+
deleteCollection.execute(collectionIdOrAlias)
335+
336+
/* ... */
337+
```
338+
339+
The `collectionIdOrAlias` is a generic collection identifier, which can be either a string (for queries by CollectionAlias), or a number (for queries by CollectionId).
340+
341+
_See [use case](../src/collections/domain/useCases/DeleteCollection.ts)_ definition.
342+
323343
#### Update Collection Featured Items
324344

325345
Updates all featured items, given a collection identifier and a CollectionFeaturedItemsDTO.
@@ -1296,6 +1316,28 @@ The `fileId` parameter should be a number, the numeric identifier.
12961316

12971317
The `uploadedFileDTO` parameter is a [UploadedFileDTO](../src/files/domain/dtos/UploadedFileDTO.ts) and includes properties related to the uploaded files. Some of these properties should be calculated from the uploaded File Blob objects and the resulting storage identifiers from the Upload File use case.
12981318

1319+
#### Restrict or Unrestrict a File
1320+
1321+
Restrict or unrestrict an existing file.
1322+
1323+
##### Example call:
1324+
1325+
```typescript
1326+
import { restrictFile } from '@iqss/dataverse-client-javascript'
1327+
1328+
/* ... */
1329+
1330+
const fileId = 12345
1331+
1332+
restrictFile.execute(fileId, true)
1333+
1334+
/* ... */
1335+
```
1336+
1337+
_See [use case](../src/files/domain/useCases/RestrictFile.ts) implementation_.
1338+
1339+
The `fileId` parameter can be a string, for persistent identifiers, or a number, for numeric identifiers.
1340+
12991341
## Metadata Blocks
13001342

13011343
### Metadata Blocks read use cases

src/collections/domain/models/Collection.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ export interface Collection {
1515
contacts?: CollectionContact[]
1616
isMetadataBlockRoot: boolean
1717
isFacetRoot: boolean
18+
childCount: number
1819
}
1920

2021
export interface CollectionInputLevel {

src/collections/domain/repositories/ICollectionsRepository.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ export interface ICollectionsRepository {
1414
parentCollectionId: number | string
1515
): Promise<number>
1616
publishCollection(collectionIdOrAlias: number | string): Promise<void>
17+
deleteCollection(collectionIdOrAlias: number | string): Promise<void>
1718
getCollectionFacets(collectionIdOrAlias: number | string): Promise<CollectionFacet[]>
1819
getCollectionUserPermissions(
1920
collectionIdOrAlias: number | string
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 { ICollectionsRepository } from '../repositories/ICollectionsRepository'
3+
4+
export class DeleteCollection implements UseCase<void> {
5+
private collectionsRepository: ICollectionsRepository
6+
7+
constructor(collectionsRepository: ICollectionsRepository) {
8+
this.collectionsRepository = collectionsRepository
9+
}
10+
11+
/**
12+
* Deletes the Dataverse collection whose database ID or alias is given:
13+
*
14+
* @param {number | string} [collectionIdOrAlias] - A generic collection identifier, which can be either a string (for queries by CollectionAlias), or a number (for queries by CollectionId)
15+
* @returns {Promise<void>} -This method does not return anything upon successful completion.
16+
*/
17+
async execute(collectionIdOrAlias: number | string): Promise<void> {
18+
return await this.collectionsRepository.deleteCollection(collectionIdOrAlias)
19+
}
20+
}

src/collections/index.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import { GetCollectionFeaturedItems } from './domain/useCases/GetCollectionFeatu
99
import { CollectionsRepository } from './infra/repositories/CollectionsRepository'
1010
import { UpdateCollectionFeaturedItems } from './domain/useCases/UpdateCollectionFeaturedItems'
1111
import { DeleteCollectionFeaturedItems } from './domain/useCases/DeleteCollectionFeaturedItems'
12+
import { DeleteCollection } from './domain/useCases/DeleteCollection'
1213

1314
const collectionsRepository = new CollectionsRepository()
1415

@@ -22,6 +23,7 @@ const updateCollection = new UpdateCollection(collectionsRepository)
2223
const getCollectionFeaturedItems = new GetCollectionFeaturedItems(collectionsRepository)
2324
const updateCollectionFeaturedItems = new UpdateCollectionFeaturedItems(collectionsRepository)
2425
const deleteCollectionFeaturedItems = new DeleteCollectionFeaturedItems(collectionsRepository)
26+
const deleteCollection = new DeleteCollection(collectionsRepository)
2527

2628
export {
2729
getCollection,
@@ -33,7 +35,8 @@ export {
3335
updateCollection,
3436
getCollectionFeaturedItems,
3537
updateCollectionFeaturedItems,
36-
deleteCollectionFeaturedItems
38+
deleteCollectionFeaturedItems,
39+
deleteCollection
3740
}
3841
export { Collection, CollectionInputLevel } from './domain/models/Collection'
3942
export { CollectionFacet } from './domain/models/CollectionFacet'

src/collections/infra/repositories/CollectionsRepository.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,8 @@ export class CollectionsRepository extends ApiRepository implements ICollections
7070
collectionIdOrAlias: number | string = ROOT_COLLECTION_ID
7171
): Promise<Collection> {
7272
return this.doGet(`/${this.collectionsResourceName}/${collectionIdOrAlias}`, true, {
73-
returnOwners: true
73+
returnOwners: true,
74+
returnChildCount: true
7475
})
7576
.then((response) => transformCollectionResponseToCollection(response))
7677
.catch((error) => {
@@ -102,6 +103,7 @@ export class CollectionsRepository extends ApiRepository implements ICollections
102103
throw error
103104
})
104105
}
106+
105107
public async publishCollection(collectionIdOrAlias: string | number): Promise<void> {
106108
return this.doPost(
107109
`/${this.collectionsResourceName}/${collectionIdOrAlias}/actions/:publish`,
@@ -113,6 +115,14 @@ export class CollectionsRepository extends ApiRepository implements ICollections
113115
})
114116
}
115117

118+
public async deleteCollection(collectionIdOrAlias: number | string): Promise<void> {
119+
return this.doDelete(`/${this.collectionsResourceName}/${collectionIdOrAlias}`)
120+
.then(() => undefined)
121+
.catch((error) => {
122+
throw error
123+
})
124+
}
125+
116126
public async getCollectionUserPermissions(
117127
collectionIdOrAlias: number | string
118128
): Promise<CollectionUserPermissions> {

src/collections/infra/repositories/transformers/CollectionPayload.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ export interface CollectionPayload {
1313
dataverseType: string
1414
isMetadataBlockRoot: boolean
1515
isFacetRoot: boolean
16+
childCount: number
1617
}
1718

1819
export interface CollectionInputLevelPayload {

src/collections/infra/repositories/transformers/collectionTransformers.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import {
66
CollectionPayload
77
} from './CollectionPayload'
88
import { transformPayloadToOwnerNode } from '../../../../core/infra/repositories/transformers/dvObjectOwnerNodeTransformer'
9-
import { transformHtmlToMarkdown } from '../../../../datasets/infra/repositories/transformers/datasetTransformers'
109
import { CollectionFacet } from '../../../domain/models/CollectionFacet'
1110
import { CollectionFacetPayload } from './CollectionFacetPayload'
1211
import {
@@ -53,9 +52,8 @@ const transformPayloadToCollection = (collectionPayload: CollectionPayload): Col
5352
type: collectionPayload.dataverseType as CollectionType,
5453
isMetadataBlockRoot: collectionPayload.isMetadataBlockRoot,
5554
isFacetRoot: collectionPayload.isFacetRoot,
56-
...(collectionPayload.description && {
57-
description: transformHtmlToMarkdown(collectionPayload.description)
58-
}),
55+
description: collectionPayload.description,
56+
childCount: collectionPayload.childCount,
5957
...(collectionPayload.isPartOf && {
6058
isPartOf: transformPayloadToOwnerNode(collectionPayload.isPartOf)
6159
}),

src/core/infra/repositories/ApiRepository.ts

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ export abstract class ApiRepository {
2020

2121
public async doPost(
2222
apiEndpoint: string,
23-
data: string | object,
23+
data: string | object | boolean,
2424
queryParams: object = {},
2525
contentType: string = ApiConstants.CONTENT_TYPE_APPLICATION_JSON
2626
): Promise<AxiosResponse> {
@@ -29,7 +29,7 @@ export abstract class ApiRepository {
2929

3030
public async doPut(
3131
apiEndpoint: string,
32-
data: string | object,
32+
data: string | object | boolean,
3333
queryParams: object = {},
3434
contentType: string = ApiConstants.CONTENT_TYPE_APPLICATION_JSON
3535
): Promise<AxiosResponse> {
@@ -70,12 +70,18 @@ export abstract class ApiRepository {
7070
private async doRequest(
7171
method: 'post' | 'put',
7272
apiEndpoint: string,
73-
data: string | object,
73+
data: string | object | boolean,
7474
queryParams: object = {},
7575
contentType: string = ApiConstants.CONTENT_TYPE_APPLICATION_JSON
7676
): Promise<AxiosResponse> {
77-
const requestData =
78-
contentType == ApiConstants.CONTENT_TYPE_APPLICATION_JSON ? JSON.stringify(data) : data
77+
let requestData = data
78+
79+
if (contentType === ApiConstants.CONTENT_TYPE_APPLICATION_JSON) {
80+
if (typeof data === 'object' || typeof data === 'boolean') {
81+
requestData = JSON.stringify(data)
82+
}
83+
}
84+
7985
const requestUrl = buildRequestUrl(apiEndpoint)
8086
const requestConfig = buildRequestConfig(true, queryParams, contentType)
8187

0 commit comments

Comments
 (0)