Skip to content

Commit 6e237c7

Browse files
committed
Merge branch 'develop' into 360-modify-notvalid-deaccession-reason
2 parents 0c74992 + 46fb69d commit 6e237c7

28 files changed

+1256
-169
lines changed
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
## Notifications API Update
2+
3+
**Endpoint:** `notifications/all`
4+
5+
**Enhancements:**
6+
7+
* When the query parameter `inAppNotificationFormat=true` is set:
8+
9+
* Notifications of types:
10+
11+
* `REQUESTFILEACCESS`
12+
* `REQUESTEDFILEACCESS`
13+
* `GRANTFILEACCESS`
14+
* `REJECTFILEACCESS`
15+
16+
now return both the **dataset display name** and **dataset persistent identifier**.
17+
18+
* Notifications of type `DATASETMENTIONED` now return a **formatted JSON** in the `additionalInfo` field when this field contains a valid persisted JSON string, instead of a raw JSON string.
19+
20+
Related issue: #11804
21+
Related PR: #11851
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
This release adds database indexes on GuestbookResponse and DatasetMetrtics, speeding up Dataset deletes. It also adds a constraint preventing null VersionState, as a matter of good housekeeping practice.
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
### Big Data Admin Section
2+
3+
- A new section - Scaling Dataverse with Data Size - has been added to the Admin Guide. It is intended to help administrators configure Dataverse appropriately to handle larger amounts of data.
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
## Notifications API Update
2+
3+
**Endpoint:** `notifications/all`
4+
5+
The user notifications endpoint has been enhanced with new optional query parameters to allow for more specific and
6+
efficient data retrieval.
7+
8+
**1. Filter by Unread Status**
9+
10+
You can now fetch only unread notifications by using the `onlyUnread` boolean parameter.
11+
12+
* **`onlyUnread`**: (Optional, boolean) When set to `true`, the API will only return notifications that the user has not
13+
yet marked as read.
14+
15+
**Example:**
16+
17+
```bash
18+
curl -H "X-Dataverse-key:$API_TOKEN" "$SERVER_URL/api/notifications/all?onlyUnread=true"
19+
```
20+
21+
**2. Pagination Support**
22+
23+
Pagination is now supported through the limit and offset parameters, allowing you to retrieve notifications in smaller,
24+
manageable chunks.
25+
26+
- **`limit`**: (Optional, integer) Specifies the maximum number of notifications to return.
27+
28+
- **`offset`**: (Optional, integer) Specifies the number of notifications to skip before starting to return results.
29+
30+
Example (Retrieve notifications 11 through 20):
31+
32+
```bash
33+
curl -H "X-Dataverse-key:$API_TOKEN" "$SERVER_URL/api/notifications/all?limit=10&offset=10"
34+
```
35+
36+
**3 Breaking Change: API Response Format Updated**
37+
38+
To support pagination and improve consistency across the API, the JSON response format for this endpoint has been
39+
changed. This is a breaking change and will require updates to any client code currently using this endpoint.
40+
41+
**Old Format:**
42+
43+
Previously, the response nested the notification list inside a notifications object within the data field.
44+
45+
```
46+
{
47+
"status": "OK",
48+
"data": {
49+
"notifications": [
50+
/ ... /
51+
]
52+
}
53+
}
54+
```
55+
56+
**New Format:**
57+
58+
The response now includes a top-level totalCount field (required for pagination) and places the notification list
59+
directly in the data field. This flattens the structure and makes it consistent with other paginated endpoints.
60+
61+
```
62+
{
63+
"status": "OK",
64+
"totalCount": 2,
65+
"data": [
66+
/ ... /
67+
]
68+
}
69+
```
70+
71+
Related issue: #11852
72+
Related PR: #11854

doc/sphinx-guides/source/admin/big-data-administration.rst

Lines changed: 321 additions & 0 deletions
Large diffs are not rendered by default.

doc/sphinx-guides/source/admin/index.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,3 +35,4 @@ This guide documents the functionality only available to superusers (such as "da
3535
maintenance
3636
backups
3737
troubleshooting
38+
big-data-administration

doc/sphinx-guides/source/api/changelog.rst

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,14 @@ v6.9
1313
- The POST /api/admin/makeDataCount/{id}/updateCitationsForDataset processing is now asynchronous and the response no longer includes the number of citations. The response can be OK if the request is queued or 503 if the queue is full (default queue size is 1000).
1414
- The way to set per-format size limits for tabular ingest has changed. JSON input is now used. See :ref:`:TabularIngestSizeLimit`.
1515
- In the past, the settings API would accept any key and value. This is no longer the case because validation has been added. See :ref:`settings_put_single`, for example.
16+
- For GET /api/notifications/all the JSON response has changed breaking the backward compatibility of the API.
1617

1718
v6.8
1819
----
1920

2021
- For POST /api/files/{id}/metadata passing an empty string ("description":"") or array ("categories":[]) will no longer be ignored. Empty fields will now clear out the values in the file's metadata. To ignore the fields simply do not include them in the JSON string.
2122
- For PUT /api/datasets/{id}/editMetadata the query parameter "sourceInternalVersionNumber" has been removed and replaced with "sourceLastUpdateTime" to verify that the data being edited hasn't been modified and isn't stale.
22-
- For GET /api/dataverses/$dataverse-alias/links the Json response has changed breaking the backward compatibility of the API.
23+
- For GET /api/dataverses/$dataverse-alias/links the JSON response has changed breaking the backward compatibility of the API.
2324
- For GET /api/admin/dataverse/{dataverse-alias}/storageDriver and /api/datasets/{identifier}/storageDriver the driver name is no longer returned in data.message. This value is now returned in data.name.
2425
- For PUT /api/dataverses/$dataverse-alias/inputLevels custom input levels that had been previously set will no longer be deleted. To delete input levels send an empty list (deletes all), then send the new/modified list.
2526
- For GET /api/externalTools and /api/externalTools/{id} the responses are now formatted as JSON (previously the toolParameters and allowedApiCalls were a JSON object and array (respectively) that were serialized as JSON strings) and any configured "requirements" are included.

doc/sphinx-guides/source/api/native-api.rst

Lines changed: 47 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -6520,44 +6520,65 @@ The expected OK (200) response looks something like this:
65206520
65216521
{
65226522
"status": "OK",
6523-
"data": {
6524-
"notifications": [
6525-
{
6526-
"id": 38,
6527-
"type": "CREATEACC",
6528-
"displayAsRead": true,
6529-
"subjectText": "Root: Your account has been created",
6530-
"messageText": "Hello, \nWelcome to...",
6531-
"sentTimestamp": "2025-07-21T19:15:37Z"
6532-
}
6523+
"totalCount": 15,
6524+
"data": [
6525+
{
6526+
"id": 38,
6527+
"type": "CREATEACC",
6528+
"displayAsRead": true,
6529+
"subjectText": "Root: Your account has been created",
6530+
"messageText": "Hello, \nWelcome to...",
6531+
"sentTimestamp": "2025-07-21T19:15:37Z"
6532+
}
65336533
...
65346534
6535-
This endpoint supports an optional query parameter ``inAppNotificationFormat`` which, if sent as ``true``, retrieves the fields needed to build the in-app notifications for the Notifications section of the Dataverse UI, omitting fields related to email notifications.
6535+
This endpoint supports several optional query parameters to filter and paginate the results.
6536+
6537+
The ``inAppNotificationFormat`` parameter, if sent as ``true``, retrieves the fields needed to build the in-app notifications for the Notifications section of the Dataverse UI, omitting fields related to email notifications.
65366538
65376539
.. code-block:: bash
65386540
65396541
curl -H "X-Dataverse-key:$API_TOKEN" "$SERVER_URL/api/notifications/all?inAppNotificationFormat=true"
65406542
6541-
The expected OK (200) response looks something like this:
6543+
The ``onlyUnread`` parameter, if sent as ``true``, filters the results to include only notifications that have not been marked as read.
6544+
6545+
.. code-block:: bash
6546+
6547+
curl -H "X-Dataverse-key:$API_TOKEN" "$SERVER_URL/api/notifications/all?onlyUnread=true"
6548+
6549+
The ``limit`` and ``offset`` parameters can be used for pagination. ``limit`` specifies the maximum number of notifications to return, and ``offset`` specifies the number of notifications to skip from the beginning of the list. For example, to retrieve notifications 11 through 15:
6550+
6551+
To aid in pagination the JSON response also includes the total number of rows (totalCount) available.
6552+
6553+
.. code-block:: bash
6554+
6555+
curl -H "X-Dataverse-key:$API_TOKEN" "$SERVER_URL/api/notifications/all?limit=5&offset=10"
6556+
6557+
All parameters can be combined. For instance, to get the first page of 10 unread notifications in the in-app format:
6558+
6559+
.. code-block:: bash
6560+
6561+
curl -H "X-Dataverse-key:$API_TOKEN" "$SERVER_URL/api/notifications/all?inAppNotificationFormat=true&onlyUnread=true&limit=1&offset=0"
6562+
6563+
The expected OK (200) response for an in-app format request looks something like this:
65426564
65436565
.. code-block:: text
65446566
65456567
{
65466568
"status": "OK",
6547-
"data": {
6548-
"notifications": [
6549-
{
6550-
"id": 79,
6551-
"type": "CREATEACC",
6552-
"displayAsRead": false,
6553-
"sentTimestamp": "2025-08-08T08:00:16Z",
6554-
"installationBrandName": "Your Installation Name",
6555-
"userGuidesBaseUrl": "https://guides.dataverse.org",
6556-
"userGuidesVersion": "6.7.1",
6557-
"userGuidesSectionPath": "user/index.html"
6558-
}
6559-
]
6560-
}
6569+
"totalCount": 15,
6570+
"data": [
6571+
{
6572+
"id": 79,
6573+
"type": "CREATEACC",
6574+
"displayAsRead": false,
6575+
"sentTimestamp": "2025-08-08T08:00:16Z",
6576+
"installationBrandName": "Your Installation Name",
6577+
"userGuidesBaseUrl": "https://guides.dataverse.org",
6578+
"userGuidesVersion": "6.7.1",
6579+
"userGuidesSectionPath": "user/index.html"
6580+
}
6581+
]
65616582
}
65626583
...
65636584

doc/sphinx-guides/source/container/running/production.rst

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,14 @@
11
Production
22
==========
33

4+
.. _production-security-warning:
5+
6+
.. warning::
7+
8+
The :doc:`demo` tutorial is **NOT SECURE BY DEFAULT**. It uses public, hardcoded passwords and secrets for demonstration purposes only.
9+
10+
If you use the demo as a structural template, you MUST replace all default secrets before deploying your instance. Failure to do so will result in a vulnerable production environment.
11+
412
.. contents:: |toctitle|
513
:local:
614

@@ -11,7 +19,7 @@ As of Dataverse 6.8, when we introduced image tagging per version (see the :ref:
1119

1220
The images and the documentation is not perfect, of course.
1321

14-
For now, we recommend following the :doc:`demo` tutorial. It will help you learn how to configure and secure your installation. Not that instead of "latest" you might want to select a specific version. Again see :ref:`app-image-supported-tags`.
22+
For now, we recommend following the :doc:`demo` as a structural template. Note that instead of "latest" you might want to select a specific version. Again see :ref:`app-image-supported-tags`.
1523

1624
The Dataverse guides were originally written with a non-Docker installation in mind so we'd like rewrite them with both Docker and non-Docker in mind. This is a big job, obviously. 😅 We know we'd like to write more about ports. We'd like to explain `how to set up Rserve <https://github.com/IQSS/dataverse/issues/11731>`_. Etc., etc.
1725

@@ -30,4 +38,4 @@ Please try the images (see :doc:`demo`) and give feedback (see :ref:`helping-con
3038
Alternatives
3139
------------
3240

33-
The traditional (non-Docker) installation method is described in the :doc:`/installation/index`.
41+
The traditional (non-Docker) installation method is described in the :doc:`/installation/index`.

doc/sphinx-guides/source/developers/big-data-support.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,6 @@ As described in that document, Globus transfers can be initiated by choosing the
196196

197197
An overview of the control and data transfer interactions between components was presented at the 2022 Dataverse Community Meeting and can be viewed in the `Integrations and Tools Session Video <https://youtu.be/3ek7F_Dxcjk?t=5289>`_ around the 1 hr 28 min mark.
198198

199-
See also :ref:`Globus settings <:GlobusSettings>`.
199+
See also :ref:`Globus settings <:GlobusSettings>` and :ref:`globus-stores`.
200200

201201
An alternative, experimental implementation of Globus polling of ongoing upload transfers has been added in v6.4. This framework does not rely on the instance staying up continuously for the duration of the transfer and saves the state information about Globus upload requests in the database. Due to its experimental nature it is not enabled by default. See the ``globus-use-experimental-async-framework`` feature flag (see :ref:`feature-flags`) and the JVM option :ref:`dataverse.files.globus-monitoring-server`.

0 commit comments

Comments
 (0)