Skip to content

Commit 3c8bb11

Browse files
committed
Merge develop into fea/352-external-tool-use-cases
2 parents 5ab5852 + 39aa3da commit 3c8bb11

35 files changed

+1194
-2
lines changed

docs/useCases.md

Lines changed: 139 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,8 +89,16 @@ The different use cases currently available in the package are classified below,
8989
- [Get Maximum Embargo Duration In Months](#get-maximum-embargo-duration-in-months)
9090
- [Get ZIP Download Limit](#get-zip-download-limit)
9191
- [Get Application Terms of Use](#get-application-terms-of-use)
92+
- [Get Available Dataset Metadata Export Formats](#get-available-dataset-metadata-export-formats)
93+
- [Licenses](#Licenses)
94+
- [Get Available Standard License Terms](#get-available-standard-license-terms)
9295
- [Contact](#Contact)
9396
- [Send Feedback to Object Contacts](#send-feedback-to-object-contacts)
97+
- [Notifications](#Notifications)
98+
- [Get All Notifications by User](#get-all-notifications-by-user)
99+
- [Delete Notification](#delete-notification)
100+
- [Get Unread Count](#get-unread-count)
101+
- [Mark As Read](#mark-as-read)
94102
- [Search](#Search)
95103
- [Get Search Services](#get-search-services)
96104
- [External Tools](#external-tools)
@@ -2089,6 +2097,51 @@ getApplicationTermsOfUse.execute().then((termsOfUse: string) => {
20892097

20902098
_See [use case](../src/info/domain/useCases/GetApplicationTermsOfUse.ts) implementation_.
20912099

2100+
#### Get Available Dataset Metadata Export Formats
2101+
2102+
Returns a [DatasetMetadataExportFormats](../src/info/domain/models/DatasetMetadataExportFormats.ts) object containing the available dataset metadata export formats.
2103+
2104+
##### Example call:
2105+
2106+
```typescript
2107+
import {
2108+
getAvailableDatasetMetadataExportFormats,
2109+
DatasetMetadataExportFormats
2110+
} from '@iqss/dataverse-client-javascript'
2111+
2112+
/* ... */
2113+
2114+
getAvailableDatasetMetadataExportFormats
2115+
.execute()
2116+
.then((datasetMetadataExportFormats: DatasetMetadataExportFormats) => {
2117+
/* ... */
2118+
})
2119+
2120+
/* ... */
2121+
```
2122+
2123+
_See [use case](../src/info/domain/useCases/GetAvailableDatasetMetadataExportFormats.ts) implementation_.
2124+
2125+
## Licenses
2126+
2127+
### Get Available Standard License Terms
2128+
2129+
Returns a list of available standard licenses that can be selected for a dataset.
2130+
2131+
##### Example call:
2132+
2133+
```typescript
2134+
import { getAvailableStandardLicenses, License } from '@iqss/dataverse-client-javascript'
2135+
2136+
/* ... */
2137+
2138+
getAvailableStandardLicenses.execute().then((licenses: License[]) => {
2139+
/* ... */
2140+
})
2141+
```
2142+
2143+
_See [use case](../src/licenses/domain/useCases/GetAvailableStandardLicenses.ts) implementation_.
2144+
20922145
## Contact
20932146

20942147
#### Send Feedback to Object Contacts
@@ -2126,6 +2179,92 @@ In ContactDTO, it takes the following information:
21262179
- **body**: the email body to send.
21272180
- **fromEmail**: the email to list in the reply-to field.
21282181

2182+
## Notifications
2183+
2184+
#### Get All Notifications by User
2185+
2186+
Returns a [Notification](../src/notifications/domain/models/Notification.ts) array containing all notifications for the current authenticated user.
2187+
2188+
##### Example call:
2189+
2190+
```typescript
2191+
import { getAllNotificationsByUser } from '@iqss/dataverse-client-javascript'
2192+
2193+
/* ... */
2194+
2195+
getAllNotificationsByUser.execute().then((notifications: Notification[]) => {
2196+
/* ... */
2197+
})
2198+
2199+
/* ... */
2200+
```
2201+
2202+
_See [use case](../src/notifications/domain/useCases/GetAllNotificationsByUser.ts) implementation_.
2203+
2204+
#### Delete Notification
2205+
2206+
Deletes a specific notification for the current authenticated user by its ID.
2207+
2208+
##### Example call:
2209+
2210+
```typescript
2211+
import { deleteNotification } from '@iqss/dataverse-client-javascript'
2212+
2213+
/* ... */
2214+
2215+
const notificationId = 123
2216+
2217+
deleteNotification.execute(notificationId: number).then(() => {
2218+
/* ... */
2219+
})
2220+
2221+
/* ... */
2222+
```
2223+
2224+
_See [use case](../src/notifications/domain/useCases/DeleteNotification.ts) implementation_.
2225+
2226+
#### Get Unread Count
2227+
2228+
Returns the number of unread notifications for the current authenticated user.
2229+
2230+
##### Example call:
2231+
2232+
```typescript
2233+
import { getUnreadNotificationsCount } from '@iqss/dataverse-client-javascript'
2234+
2235+
/* ... */
2236+
2237+
getUnreadNotificationsCount.execute().then((count: number) => {
2238+
console.log(`You have ${count} unread notifications`)
2239+
})
2240+
2241+
/* ... */
2242+
```
2243+
2244+
_See [use case](../src/notifications/domain/useCases/GetUnreadNotificationsCount.ts) implementation_.
2245+
2246+
#### Mark As Read
2247+
2248+
Marks a specific notification as read for the current authenticated user. This operation is idempotent - marking an already-read notification as read will not cause an error.
2249+
2250+
##### Example call:
2251+
2252+
```typescript
2253+
import { markNotificationAsRead } from '@iqss/dataverse-client-javascript'
2254+
2255+
/* ... */
2256+
2257+
const notificationId = 123
2258+
2259+
markNotificationAsRead.execute(notificationId).then(() => {
2260+
console.log('Notification marked as read')
2261+
})
2262+
2263+
/* ... */
2264+
```
2265+
2266+
_See [use case](../src/notifications/domain/useCases/MarkNotificationAsRead.ts) implementation_.
2267+
21292268
## Search
21302269

21312270
#### Get Search Services

src/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,7 @@ export * from './collections'
88
export * from './metadataBlocks'
99
export * from './files'
1010
export * from './contactInfo'
11+
export * from './notifications'
1112
export * from './search'
13+
export * from './licenses'
1214
export * from './externalTools'
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
export type DatasetMetadataExportFormats = Record<string, DatasetMetadataExportFormat>
2+
3+
type DatasetMetadataExportFormat = DatasetMetadataExportFormatBase | XmlDatasetMetadataExportFormat
4+
5+
interface DatasetMetadataExportFormatBase {
6+
displayName: string
7+
mediaType: string
8+
isHarvestable: boolean
9+
isVisibleInUserInterface: boolean
10+
}
11+
12+
interface XmlDatasetMetadataExportFormat extends DatasetMetadataExportFormatBase {
13+
XMLNameSpace: string
14+
XMLSchemaLocation: string
15+
XMLSchemaVersion: string
16+
}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
1+
import { DatasetMetadataExportFormats } from '../models/DatasetMetadataExportFormats'
12
import { DataverseVersion } from '../models/DataverseVersion'
23

34
export interface IDataverseInfoRepository {
45
getDataverseVersion(): Promise<DataverseVersion>
56
getZipDownloadLimit(): Promise<number>
67
getMaxEmbargoDurationInMonths(): Promise<number>
78
getApplicationTermsOfUse(lang?: string): Promise<string>
9+
getAvailableDatasetMetadataExportFormats(): Promise<DatasetMetadataExportFormats>
810
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import { UseCase } from '../../../core/domain/useCases/UseCase'
2+
import { DatasetMetadataExportFormats } from '../models/DatasetMetadataExportFormats'
3+
import { IDataverseInfoRepository } from '../repositories/IDataverseInfoRepository'
4+
5+
export class GetAvailableDatasetMetadataExportFormats
6+
implements UseCase<DatasetMetadataExportFormats>
7+
{
8+
private dataverseInfoRepository: IDataverseInfoRepository
9+
10+
constructor(dataverseInfoRepository: IDataverseInfoRepository) {
11+
this.dataverseInfoRepository = dataverseInfoRepository
12+
}
13+
14+
/**
15+
* Returns a DatasetMetadataExportFormats object containing the available dataset metadata export formats.
16+
*
17+
* @returns {Promise<DatasetMetadataExportFormats>}
18+
*/
19+
async execute(): Promise<DatasetMetadataExportFormats> {
20+
return await this.dataverseInfoRepository.getAvailableDatasetMetadataExportFormats()
21+
}
22+
}

src/info/index.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,24 @@ import { GetDataverseVersion } from './domain/useCases/GetDataverseVersion'
33
import { GetZipDownloadLimit } from './domain/useCases/GetZipDownloadLimit'
44
import { GetMaxEmbargoDurationInMonths } from './domain/useCases/GetMaxEmbargoDurationInMonths'
55
import { GetApplicationTermsOfUse } from './domain/useCases/GetApplicationTermsOfUse'
6+
import { GetAvailableDatasetMetadataExportFormats } from './domain/useCases/GetAvailableDatasetMetadataExportFormats'
67

78
const dataverseInfoRepository = new DataverseInfoRepository()
89

910
const getDataverseVersion = new GetDataverseVersion(dataverseInfoRepository)
1011
const getZipDownloadLimit = new GetZipDownloadLimit(dataverseInfoRepository)
1112
const getMaxEmbargoDurationInMonths = new GetMaxEmbargoDurationInMonths(dataverseInfoRepository)
1213
const getApplicationTermsOfUse = new GetApplicationTermsOfUse(dataverseInfoRepository)
14+
const getAvailableDatasetMetadataExportFormats = new GetAvailableDatasetMetadataExportFormats(
15+
dataverseInfoRepository
16+
)
1317

1418
export {
1519
getDataverseVersion,
1620
getZipDownloadLimit,
1721
getMaxEmbargoDurationInMonths,
18-
getApplicationTermsOfUse
22+
getApplicationTermsOfUse,
23+
getAvailableDatasetMetadataExportFormats
1924
}
25+
26+
export { DatasetMetadataExportFormats } from './domain/models/DatasetMetadataExportFormats'

src/info/infra/repositories/DataverseInfoRepository.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { ApiRepository } from '../../../core/infra/repositories/ApiRepository'
22
import { IDataverseInfoRepository } from '../../domain/repositories/IDataverseInfoRepository'
33
import { DataverseVersion } from '../../domain/models/DataverseVersion'
44
import { AxiosResponse } from 'axios'
5+
import { DatasetMetadataExportFormats } from '../../domain/models/DatasetMetadataExportFormats'
56

67
export class DataverseInfoRepository extends ApiRepository implements IDataverseInfoRepository {
78
private readonly infoResourceName: string = 'info'
@@ -55,4 +56,14 @@ export class DataverseInfoRepository extends ApiRepository implements IDataverse
5556
throw error
5657
})
5758
}
59+
60+
public async getAvailableDatasetMetadataExportFormats(): Promise<DatasetMetadataExportFormats> {
61+
return this.doGet(this.buildApiEndpoint(this.infoResourceName, `exportFormats`))
62+
.then((response: AxiosResponse<{ data: DatasetMetadataExportFormats }>) => {
63+
return response.data.data
64+
})
65+
.catch((error) => {
66+
throw error
67+
})
68+
}
5869
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
export interface License {
2+
id: number
3+
name: string
4+
shortDescription?: string
5+
uri: string
6+
iconUri?: string
7+
active: boolean
8+
isDefault: boolean
9+
sortOrder: number
10+
rightsIdentifier?: string
11+
rightsIdentifierScheme?: string
12+
schemeUri?: string
13+
languageCode?: string
14+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import { License } from '../models/License'
2+
3+
export interface ILicensesRepository {
4+
getAvailableStandardLicenses(): Promise<License[]>
5+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
export interface LicensePayload {
2+
id: number
3+
name: string
4+
shortDescription?: string
5+
uri: string
6+
iconUrl?: string
7+
active: boolean
8+
isDefault: boolean
9+
sortOrder: number
10+
rightsIdentifier?: string
11+
rightsIdentifierScheme?: string
12+
schemeUri?: string
13+
languageCode?: string
14+
}

0 commit comments

Comments
 (0)