From 174a954312ca21e638312e671c0591d0badec252 Mon Sep 17 00:00:00 2001 From: sujata-m Date: Fri, 29 Aug 2025 19:55:53 +0530 Subject: [PATCH 1/2] Feature-2325 ## DevBoard Task https://dev.azure.com/TDEI-UW/TDEI/_workitems/edit/2325 ## Changes Introduced - New API to download the CSV file - API Path GET - `osw/dataset-viewer/feedbacks/download` - API Response - CSV file as attachment ## Impacted Areas for Testing - TDEI Portal - Added unit test cases --- tdei-api-gateway-prod.json | 166 ++++++++++++++++++++++++++++++++++++ tdei-api-gateway-stage.json | 166 ++++++++++++++++++++++++++++++++++++ tdei-api-gateway.json | 166 ++++++++++++++++++++++++++++++++++++ 3 files changed, 498 insertions(+) diff --git a/tdei-api-gateway-prod.json b/tdei-api-gateway-prod.json index d8cc828..b97bb56 100644 --- a/tdei-api-gateway-prod.json +++ b/tdei-api-gateway-prod.json @@ -2600,6 +2600,172 @@ ] } }, + "/api/v1/osw/dataset-viewer/feedbacks/download":{ + "get":{ + "tags":[ + "OSW" + ], + "summary":"Downloads dataset viewer feedbacks as a CSV.", + "description":"Streams all feedback for the specified project group in CSV format. Requires poc or osw_data_generator role.", + "operationId":"oswDatasetViewerFeedbacksDownload", + "parameters":[ + { + "name":"tdei_project_group_id", + "in":"query", + "required":true, + "description":"ID of the project group.", + "schema":{ + "type":"string" + } + }, + { + "name":"tdei_dataset_id", + "in":"query", + "required":false, + "description":"ID of the dataset.", + "schema":{ + "type":"string" + } + }, + { + "name":"from_date", + "in":"query", + "description":"from_date: Date in ISO 8601 format, filters feedback created after this date.", + "required":false, + "schema":{ + "type":"string", + "format":"date-time" + } + }, + { + "name":"to_date", + "in":"query", + "description":"to_date: Date in ISO 8601 format, filters feedback created before this date.", + "required":false, + "schema":{ + "type":"string", + "format":"date-time" + } + }, + { + "name":"status", + "in":"query", + "required":false, + "description":"status: Filters feedbacks by their status.", + "schema":{ + "type":"string", + "enum":[ + "open", + "resolved" + ] + } + }, + { + "name":"sort_by", + "in":"query", + "description":"sort_by: String, defaults to 'created_at'. Sorts feedbacks by the specified field.", + "required":false, + "schema":{ + "type":"string", + "default":"created_at", + "enum":[ + "created_at", + "due_date" + ] + } + }, + { + "name":"due_date", + "in":"query", + "description":"due_date: Legacy alias for sort_by. Use 'created_at' or 'due_date'.", + "required":false, + "schema":{ + "type":"string", + "enum":[ + "created_at", + "due_date" + ] + } + }, + { + "name":"sort_order", + "in":"query", + "description":"sort_order: String, defaults to 'desc'. Sorts feedbacks in ascending or descending order.", + "required":false, + "schema":{ + "type":"string", + "default":"desc", + "enum":[ + "asc", + "desc" + ] + } + }, + { + "name":"page_no", + "in":"query", + "description":"page_no: Integer, specifies the page number to retrieve. If omitted with page_size, the response is unpaginated.", + "required":false, + "schema":{ + "type":"integer", + "format":"int32" + } + }, + { + "name":"page_size", + "in":"query", + "description":"Page size: Integer, between 1 to 50. If omitted with page_no, the response is unpaginated.", + "required":false, + "schema":{ + "type":"integer", + "format":"int32" + } + }, + { + "name":"format", + "in":"query", + "required":false, + "description":"format: Output format. Only 'csv' is supported.", + "schema":{ + "type":"string", + "default":"csv", + "enum":[ + "csv" + ] + } + } + ], + "responses":{ + "200":{ + "description":"CSV file streamed successfully.", + "content":{ + "text/csv":{ + "schema":{ + "type":"string", + "format":"binary" + } + } + } + }, + "400":{ + "description":"Invalid request parameters." + }, + "422":{ + "description":"tdei_project_group_id is required." + }, + "500":{ + "description":"A server error occurred." + } + }, + "security":[ + { + "AuthorizationToken":[ + + ] + } + ] + } + }, "/api/v1/osw/dataset-viewer/feedbacks/metadata": { "get": { "tags": [ diff --git a/tdei-api-gateway-stage.json b/tdei-api-gateway-stage.json index 9aee3fe..323c371 100644 --- a/tdei-api-gateway-stage.json +++ b/tdei-api-gateway-stage.json @@ -2600,6 +2600,172 @@ ] } }, + "/api/v1/osw/dataset-viewer/feedbacks/download":{ + "get":{ + "tags":[ + "OSW" + ], + "summary":"Downloads dataset viewer feedbacks as a CSV.", + "description":"Streams all feedback for the specified project group in CSV format. Requires poc or osw_data_generator role.", + "operationId":"oswDatasetViewerFeedbacksDownload", + "parameters":[ + { + "name":"tdei_project_group_id", + "in":"query", + "required":true, + "description":"ID of the project group.", + "schema":{ + "type":"string" + } + }, + { + "name":"tdei_dataset_id", + "in":"query", + "required":false, + "description":"ID of the dataset.", + "schema":{ + "type":"string" + } + }, + { + "name":"from_date", + "in":"query", + "description":"from_date: Date in ISO 8601 format, filters feedback created after this date.", + "required":false, + "schema":{ + "type":"string", + "format":"date-time" + } + }, + { + "name":"to_date", + "in":"query", + "description":"to_date: Date in ISO 8601 format, filters feedback created before this date.", + "required":false, + "schema":{ + "type":"string", + "format":"date-time" + } + }, + { + "name":"status", + "in":"query", + "required":false, + "description":"status: Filters feedbacks by their status.", + "schema":{ + "type":"string", + "enum":[ + "open", + "resolved" + ] + } + }, + { + "name":"sort_by", + "in":"query", + "description":"sort_by: String, defaults to 'created_at'. Sorts feedbacks by the specified field.", + "required":false, + "schema":{ + "type":"string", + "default":"created_at", + "enum":[ + "created_at", + "due_date" + ] + } + }, + { + "name":"due_date", + "in":"query", + "description":"due_date: Legacy alias for sort_by. Use 'created_at' or 'due_date'.", + "required":false, + "schema":{ + "type":"string", + "enum":[ + "created_at", + "due_date" + ] + } + }, + { + "name":"sort_order", + "in":"query", + "description":"sort_order: String, defaults to 'desc'. Sorts feedbacks in ascending or descending order.", + "required":false, + "schema":{ + "type":"string", + "default":"desc", + "enum":[ + "asc", + "desc" + ] + } + }, + { + "name":"page_no", + "in":"query", + "description":"page_no: Integer, specifies the page number to retrieve. If omitted with page_size, the response is unpaginated.", + "required":false, + "schema":{ + "type":"integer", + "format":"int32" + } + }, + { + "name":"page_size", + "in":"query", + "description":"Page size: Integer, between 1 to 50. If omitted with page_no, the response is unpaginated.", + "required":false, + "schema":{ + "type":"integer", + "format":"int32" + } + }, + { + "name":"format", + "in":"query", + "required":false, + "description":"format: Output format. Only 'csv' is supported.", + "schema":{ + "type":"string", + "default":"csv", + "enum":[ + "csv" + ] + } + } + ], + "responses":{ + "200":{ + "description":"CSV file streamed successfully.", + "content":{ + "text/csv":{ + "schema":{ + "type":"string", + "format":"binary" + } + } + } + }, + "400":{ + "description":"Invalid request parameters." + }, + "422":{ + "description":"tdei_project_group_id is required." + }, + "500":{ + "description":"A server error occurred." + } + }, + "security":[ + { + "AuthorizationToken":[ + + ] + } + ] + } + }, "/api/v1/osw/dataset-viewer/feedbacks/metadata": { "get": { "tags": [ diff --git a/tdei-api-gateway.json b/tdei-api-gateway.json index 0368123..09fabb6 100644 --- a/tdei-api-gateway.json +++ b/tdei-api-gateway.json @@ -2600,6 +2600,172 @@ ] } }, + "/api/v1/osw/dataset-viewer/feedbacks/download":{ + "get":{ + "tags":[ + "OSW" + ], + "summary":"Downloads dataset viewer feedbacks as a CSV.", + "description":"Streams all feedback for the specified project group in CSV format. Requires poc or osw_data_generator role.", + "operationId":"oswDatasetViewerFeedbacksDownload", + "parameters":[ + { + "name":"tdei_project_group_id", + "in":"query", + "required":true, + "description":"ID of the project group.", + "schema":{ + "type":"string" + } + }, + { + "name":"tdei_dataset_id", + "in":"query", + "required":false, + "description":"ID of the dataset.", + "schema":{ + "type":"string" + } + }, + { + "name":"from_date", + "in":"query", + "description":"from_date: Date in ISO 8601 format, filters feedback created after this date.", + "required":false, + "schema":{ + "type":"string", + "format":"date-time" + } + }, + { + "name":"to_date", + "in":"query", + "description":"to_date: Date in ISO 8601 format, filters feedback created before this date.", + "required":false, + "schema":{ + "type":"string", + "format":"date-time" + } + }, + { + "name":"status", + "in":"query", + "required":false, + "description":"status: Filters feedbacks by their status.", + "schema":{ + "type":"string", + "enum":[ + "open", + "resolved" + ] + } + }, + { + "name":"sort_by", + "in":"query", + "description":"sort_by: String, defaults to 'created_at'. Sorts feedbacks by the specified field.", + "required":false, + "schema":{ + "type":"string", + "default":"created_at", + "enum":[ + "created_at", + "due_date" + ] + } + }, + { + "name":"due_date", + "in":"query", + "description":"due_date: Legacy alias for sort_by. Use 'created_at' or 'due_date'.", + "required":false, + "schema":{ + "type":"string", + "enum":[ + "created_at", + "due_date" + ] + } + }, + { + "name":"sort_order", + "in":"query", + "description":"sort_order: String, defaults to 'desc'. Sorts feedbacks in ascending or descending order.", + "required":false, + "schema":{ + "type":"string", + "default":"desc", + "enum":[ + "asc", + "desc" + ] + } + }, + { + "name":"page_no", + "in":"query", + "description":"page_no: Integer, specifies the page number to retrieve. If omitted with page_size, the response is unpaginated.", + "required":false, + "schema":{ + "type":"integer", + "format":"int32" + } + }, + { + "name":"page_size", + "in":"query", + "description":"Page size: Integer, between 1 to 50. If omitted with page_no, the response is unpaginated.", + "required":false, + "schema":{ + "type":"integer", + "format":"int32" + } + }, + { + "name":"format", + "in":"query", + "required":false, + "description":"format: Output format. Only 'csv' is supported.", + "schema":{ + "type":"string", + "default":"csv", + "enum":[ + "csv" + ] + } + } + ], + "responses":{ + "200":{ + "description":"CSV file streamed successfully.", + "content":{ + "text/csv":{ + "schema":{ + "type":"string", + "format":"binary" + } + } + } + }, + "400":{ + "description":"Invalid request parameters." + }, + "422":{ + "description":"tdei_project_group_id is required." + }, + "500":{ + "description":"A server error occurred." + } + }, + "security":[ + { + "AuthorizationToken":[ + + ] + } + ] + } + }, "/api/v1/osw/dataset-viewer/feedbacks/metadata": { "get": { "tags": [ From d7d0e9addb4d3158d7e0eee576d801a49ce50755 Mon Sep 17 00:00:00 2001 From: sujata-m Date: Mon, 1 Sep 2025 12:29:30 +0530 Subject: [PATCH 2/2] Updated API definition --- tdei-api-gateway-prod.json | 14 +------------- tdei-api-gateway-stage.json | 14 +------------- tdei-api-gateway.json | 14 +------------- 3 files changed, 3 insertions(+), 39 deletions(-) diff --git a/tdei-api-gateway-prod.json b/tdei-api-gateway-prod.json index b97bb56..8ae52e5 100644 --- a/tdei-api-gateway-prod.json +++ b/tdei-api-gateway-prod.json @@ -2600,7 +2600,7 @@ ] } }, - "/api/v1/osw/dataset-viewer/feedbacks/download":{ + "/api/v1/osw/dataset-viewer/feedbacks/download/{tdei_project_group_id}":{ "get":{ "tags":[ "OSW" @@ -2609,15 +2609,6 @@ "description":"Streams all feedback for the specified project group in CSV format. Requires poc or osw_data_generator role.", "operationId":"oswDatasetViewerFeedbacksDownload", "parameters":[ - { - "name":"tdei_project_group_id", - "in":"query", - "required":true, - "description":"ID of the project group.", - "schema":{ - "type":"string" - } - }, { "name":"tdei_dataset_id", "in":"query", @@ -2750,9 +2741,6 @@ "400":{ "description":"Invalid request parameters." }, - "422":{ - "description":"tdei_project_group_id is required." - }, "500":{ "description":"A server error occurred." } diff --git a/tdei-api-gateway-stage.json b/tdei-api-gateway-stage.json index 323c371..084fb7a 100644 --- a/tdei-api-gateway-stage.json +++ b/tdei-api-gateway-stage.json @@ -2600,7 +2600,7 @@ ] } }, - "/api/v1/osw/dataset-viewer/feedbacks/download":{ + "/api/v1/osw/dataset-viewer/feedbacks/download/{tdei_project_group_id}":{ "get":{ "tags":[ "OSW" @@ -2609,15 +2609,6 @@ "description":"Streams all feedback for the specified project group in CSV format. Requires poc or osw_data_generator role.", "operationId":"oswDatasetViewerFeedbacksDownload", "parameters":[ - { - "name":"tdei_project_group_id", - "in":"query", - "required":true, - "description":"ID of the project group.", - "schema":{ - "type":"string" - } - }, { "name":"tdei_dataset_id", "in":"query", @@ -2750,9 +2741,6 @@ "400":{ "description":"Invalid request parameters." }, - "422":{ - "description":"tdei_project_group_id is required." - }, "500":{ "description":"A server error occurred." } diff --git a/tdei-api-gateway.json b/tdei-api-gateway.json index 09fabb6..0b4c946 100644 --- a/tdei-api-gateway.json +++ b/tdei-api-gateway.json @@ -2600,7 +2600,7 @@ ] } }, - "/api/v1/osw/dataset-viewer/feedbacks/download":{ + "/api/v1/osw/dataset-viewer/feedbacks/download/{tdei_project_group_id}":{ "get":{ "tags":[ "OSW" @@ -2609,15 +2609,6 @@ "description":"Streams all feedback for the specified project group in CSV format. Requires poc or osw_data_generator role.", "operationId":"oswDatasetViewerFeedbacksDownload", "parameters":[ - { - "name":"tdei_project_group_id", - "in":"query", - "required":true, - "description":"ID of the project group.", - "schema":{ - "type":"string" - } - }, { "name":"tdei_dataset_id", "in":"query", @@ -2750,9 +2741,6 @@ "400":{ "description":"Invalid request parameters." }, - "422":{ - "description":"tdei_project_group_id is required." - }, "500":{ "description":"A server error occurred." }