diff --git a/CHANGELOG.md b/CHANGELOG.md index b6a2276b85..f91d557b2a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,13 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), ## [Unreleased] ### Added + +### Changed + +### Removed + +## [7.1.0 - 29.09.2023] +### Added - Splitscreen View with sliders on parts and otherParts View - New test data for as planned assets aswell as JustInSequence and TractionBatteryCode - Toggle for parts and other parts to switch views asPlanned/asBuilt @@ -14,6 +21,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), - safety and security doc including roles matrix - handling for duplicate shellDescriptor ids when refreshing registry - Extendend testdata to reflect better overview of assets +- Support for TractionBatteryCode ### Changed - added sorting for /api/investigations received and created endpoints diff --git a/tx-backend/openapi/traceability-foss-backend.json b/tx-backend/openapi/traceability-foss-backend.json index 1f04efaf73..6f2d0e5241 100644 --- a/tx-backend/openapi/traceability-foss-backend.json +++ b/tx-backend/openapi/traceability-foss-backend.json @@ -41,18 +41,20 @@ "description" : "The endpoint returns a result of BPN EDC URL mappings.", "operationId" : "getBpnEdcs", "responses" : { - "404" : { - "description" : "Not found.", + "200" : { + "description" : "Returns the paged result found", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "maxItems" : 2147483647, + "minItems" : 0, + "type" : "array" } } } }, - "400" : { - "description" : "Bad request.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -61,8 +63,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -71,8 +73,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -91,20 +93,18 @@ } } }, - "200" : { - "description" : "Returns the paged result found", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { - "maxItems" : 2147483647, - "minItems" : 0, - "type" : "array" + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "429" : { - "description" : "Too many requests.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -147,7 +147,7 @@ "minItems" : 0, "type" : "array", "items" : { - "$ref" : "#/components/schemas/BpnEdcMappingRequest" + "$ref" : "#/components/schemas/BpnMappingRequest" } } } @@ -165,20 +165,18 @@ } } }, - "200" : { - "description" : "Returns the paged result found for BpnEdcMapping", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { - "maxItems" : 2147483647, - "minItems" : 0, - "type" : "array" + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "400" : { - "description" : "Bad request.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -187,8 +185,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -197,18 +195,20 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "200" : { + "description" : "Returns the paged result found for BpnEdcMapping", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "maxItems" : 2147483647, + "minItems" : 0, + "type" : "array" } } } }, - "403" : { - "description" : "Forbidden.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -217,8 +217,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -261,7 +261,7 @@ "minItems" : 0, "type" : "array", "items" : { - "$ref" : "#/components/schemas/BpnEdcMappingRequest" + "$ref" : "#/components/schemas/BpnMappingRequest" } } } @@ -279,20 +279,18 @@ } } }, - "200" : { - "description" : "Returns the paged result found for BpnEdcMapping", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { - "maxItems" : 2147483647, - "minItems" : 0, - "type" : "array" + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "400" : { - "description" : "Bad request.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -301,8 +299,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -311,18 +309,20 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "200" : { + "description" : "Returns the paged result found for BpnEdcMapping", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "maxItems" : 2147483647, + "minItems" : 0, + "type" : "array" } } } }, - "403" : { - "description" : "Forbidden.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -331,8 +331,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -400,8 +400,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -410,8 +410,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -420,8 +420,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -430,18 +430,18 @@ } } }, - "201" : { - "description" : "Created.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/QualityNotificationIdResponse" + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "429" : { - "description" : "Too many requests.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -450,12 +450,12 @@ } } }, - "500" : { - "description" : "Internal server error.", + "201" : { + "description" : "Created.", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "$ref" : "#/components/schemas/QualityNotificationIdResponse" } } } @@ -520,8 +520,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -530,11 +530,8 @@ } } }, - "204" : { - "description" : "No content." - }, - "401" : { - "description" : "Authorization failed.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -543,8 +540,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -553,8 +550,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -572,6 +569,9 @@ } } } + }, + "204" : { + "description" : "No content." } }, "security" : [ @@ -633,8 +633,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -643,11 +643,8 @@ } } }, - "204" : { - "description" : "No content." - }, - "401" : { - "description" : "Authorization failed.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -656,8 +653,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -666,8 +663,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -685,6 +682,9 @@ } } } + }, + "204" : { + "description" : "No content." } }, "security" : [ @@ -736,8 +736,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -746,11 +746,8 @@ } } }, - "204" : { - "description" : "No content." - }, - "401" : { - "description" : "Authorization failed.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -759,8 +756,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -769,8 +766,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -788,6 +785,9 @@ } } } + }, + "204" : { + "description" : "No content." } }, "security" : [ @@ -839,8 +839,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -849,11 +849,8 @@ } } }, - "204" : { - "description" : "No content." - }, - "401" : { - "description" : "Authorization failed.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -862,8 +859,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -872,8 +869,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -891,6 +888,9 @@ } } } + }, + "204" : { + "description" : "No content." } }, "security" : [ @@ -941,8 +941,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -951,8 +951,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -961,8 +961,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -971,18 +971,18 @@ } } }, - "201" : { - "description" : "Created.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/CreateNotificationContractResponse" + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "429" : { - "description" : "Too many requests.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -991,12 +991,12 @@ } } }, - "500" : { - "description" : "Internal server error.", + "201" : { + "description" : "Created.", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "$ref" : "#/components/schemas/CreateNotificationContractResponse" } } } @@ -1050,8 +1050,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -1060,8 +1060,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -1070,8 +1070,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -1080,11 +1080,8 @@ } } }, - "201" : { - "description" : "Created." - }, - "429" : { - "description" : "Too many requests.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -1102,6 +1099,9 @@ } } } + }, + "201" : { + "description" : "Created." } }, "security" : [ @@ -1152,8 +1152,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -1162,8 +1162,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -1172,8 +1172,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -1182,20 +1182,18 @@ } } }, - "200" : { - "description" : "Returns the paged result found for Asset", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { - "maxItems" : 2147483647, - "minItems" : 0, - "type" : "array" + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "429" : { - "description" : "Too many requests.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -1204,12 +1202,14 @@ } } }, - "500" : { - "description" : "Internal server error.", + "200" : { + "description" : "Returns the paged result found for Asset", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "maxItems" : 2147483647, + "minItems" : 0, + "type" : "array" } } } @@ -1263,8 +1263,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -1273,8 +1273,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -1283,8 +1283,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -1293,11 +1293,8 @@ } } }, - "201" : { - "description" : "Created." - }, - "429" : { - "description" : "Too many requests.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -1315,6 +1312,9 @@ } } } + }, + "201" : { + "description" : "Created." } }, "security" : [ @@ -1365,8 +1365,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -1375,12 +1375,14 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "200" : { + "description" : "Returns the paged result found for Asset", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "maxItems" : 2147483647, + "minItems" : 0, + "type" : "array" } } } @@ -1395,8 +1397,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -1405,8 +1407,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -1415,14 +1417,12 @@ } } }, - "200" : { - "description" : "Returns the paged result found for Asset", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { - "maxItems" : 2147483647, - "minItems" : 0, - "type" : "array" + "$ref" : "#/components/schemas/ErrorResponse" } } } @@ -1476,8 +1476,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -1486,8 +1486,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -1496,8 +1496,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -1506,18 +1506,18 @@ } } }, - "201" : { - "description" : "Created.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/QualityNotificationIdResponse" + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "429" : { - "description" : "Too many requests.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -1526,12 +1526,12 @@ } } }, - "500" : { - "description" : "Internal server error.", + "201" : { + "description" : "Created.", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "$ref" : "#/components/schemas/QualityNotificationIdResponse" } } } @@ -1596,8 +1596,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -1606,11 +1606,8 @@ } } }, - "204" : { - "description" : "No content." - }, - "401" : { - "description" : "Authorization failed.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -1619,8 +1616,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -1629,8 +1626,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -1648,6 +1645,9 @@ } } } + }, + "204" : { + "description" : "No content." } }, "security" : [ @@ -1709,8 +1709,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -1719,11 +1719,8 @@ } } }, - "204" : { - "description" : "No content." - }, - "401" : { - "description" : "Authorization failed.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -1732,8 +1729,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -1742,8 +1739,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -1761,6 +1758,9 @@ } } } + }, + "204" : { + "description" : "No content." } }, "security" : [ @@ -1812,8 +1812,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -1822,11 +1822,8 @@ } } }, - "204" : { - "description" : "No content." - }, - "401" : { - "description" : "Authorization failed.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -1835,8 +1832,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -1845,8 +1842,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -1864,6 +1861,9 @@ } } } + }, + "204" : { + "description" : "No content." } }, "security" : [ @@ -1915,8 +1915,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -1925,11 +1925,8 @@ } } }, - "204" : { - "description" : "No content." - }, - "401" : { - "description" : "Authorization failed.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -1938,8 +1935,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -1948,8 +1945,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -1967,6 +1964,9 @@ } } } + }, + "204" : { + "description" : "No content." } }, "security" : [ @@ -2007,6 +2007,36 @@ } } }, + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "429" : { + "description" : "Too many requests.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "403" : { + "description" : "Forbidden.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, "200" : { "description" : "Returns the assets found", "content" : { @@ -2134,8 +2164,8 @@ } } }, - "400" : { - "description" : "Bad request.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -2154,38 +2184,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "429" : { - "description" : "Too many requests.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "500" : { - "description" : "Internal server error.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -2231,36 +2231,6 @@ "required" : true }, "responses" : { - "404" : { - "description" : "Not found.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "400" : { - "description" : "Bad request.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "415" : { - "description" : "Unsupported media type", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, "200" : { "description" : "Returns the updated asset", "content" : { @@ -2388,8 +2358,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -2398,8 +2368,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -2418,6 +2388,36 @@ } } }, + "403" : { + "description" : "Forbidden.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "401" : { + "description" : "Authorization failed.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "415" : { + "description" : "Unsupported media type", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, "500" : { "description" : "Internal server error.", "content" : { @@ -2457,6 +2457,36 @@ } ], "responses" : { + "404" : { + "description" : "Not found.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "429" : { + "description" : "Too many requests.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, "200" : { "description" : "Returns the assets found", "content" : { @@ -2584,28 +2614,8 @@ } } }, - "404" : { - "description" : "Not found.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "400" : { - "description" : "Bad request.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "415" : { - "description" : "Unsupported media type", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -2624,18 +2634,8 @@ } } }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "429" : { - "description" : "Too many requests.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -2711,16 +2711,6 @@ } } }, - "415" : { - "description" : "Unsupported media type", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, "200" : { "description" : "Returns the updated asset", "content" : { @@ -2848,8 +2838,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -2868,8 +2858,18 @@ } } }, - "429" : { - "description" : "Too many requests.", + "401" : { + "description" : "Authorization failed.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -2966,8 +2966,18 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "429" : { + "description" : "Too many requests.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -2999,18 +3009,8 @@ } } }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "429" : { - "description" : "Too many requests.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -3067,11 +3067,8 @@ } } }, - "204" : { - "description" : "Deleted." - }, - "415" : { - "description" : "Unsupported media type", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -3080,8 +3077,11 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "204" : { + "description" : "Deleted." + }, + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -3090,8 +3090,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -3100,8 +3100,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -3159,8 +3159,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -3169,11 +3169,8 @@ } } }, - "202" : { - "description" : "Created registry reload job." - }, - "401" : { - "description" : "Authorization failed.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -3182,8 +3179,11 @@ } } }, - "403" : { - "description" : "Forbidden.", + "202" : { + "description" : "Created registry reload job." + }, + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -3192,8 +3192,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -3301,8 +3301,18 @@ } } }, - "200" : { - "description" : "OK.", + "429" : { + "description" : "Too many requests.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "200" : { + "description" : "OK.", "content" : { "application/json" : { "schema" : { @@ -3317,8 +3327,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -3337,18 +3347,8 @@ } } }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "429" : { - "description" : "Too many requests.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -3416,18 +3416,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "401" : { - "description" : "Authorization failed.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -3458,8 +3448,18 @@ } } }, - "429" : { - "description" : "Too many requests.", + "401" : { + "description" : "Authorization failed.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -3527,30 +3527,30 @@ } } }, - "200" : { - "description" : "Returns the paged result found for Asset", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { - "maxItems" : 2147483647, - "minItems" : 0, - "type" : "array" + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "415" : { - "description" : "Unsupported media type", + "200" : { + "description" : "Returns the paged result found for Asset", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "maxItems" : 2147483647, + "minItems" : 0, + "type" : "array" } } } }, - "401" : { - "description" : "Authorization failed.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -3559,8 +3559,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -3569,8 +3569,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -3719,8 +3719,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -3729,12 +3729,12 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "200" : { + "description" : "Returns dashboard data", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "$ref" : "#/components/schemas/DashboardResponse" } } } @@ -3749,18 +3749,18 @@ } } }, - "200" : { - "description" : "Returns dashboard data", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/DashboardResponse" + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "429" : { - "description" : "Too many requests.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -3815,19 +3815,6 @@ } } }, - "/bpnEdcMappingException" : { - "get" : { - "tags" : [ - "dummy-controller" - ], - "operationId" : "bpnEdcMappingException", - "responses" : { - "200" : { - "description" : "OK" - } - } - } - }, "/authenticationCredentialsNotFoundException" : { "get" : { "tags" : [ @@ -3892,6 +3879,66 @@ } } }, + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "429" : { + "description" : "Too many requests.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "403" : { + "description" : "Forbidden.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "401" : { + "description" : "Authorization failed.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "415" : { + "description" : "Unsupported media type", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "500" : { + "description" : "Internal server error.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, "200" : { "description" : "Returns the paged result found for Asset", "content" : { @@ -4023,66 +4070,6 @@ } } } - }, - "400" : { - "description" : "Bad request.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "415" : { - "description" : "Unsupported media type", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "401" : { - "description" : "Authorization failed.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "429" : { - "description" : "Too many requests.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "500" : { - "description" : "Internal server error.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } } }, "security" : [ @@ -4141,6 +4128,16 @@ } } }, + "429" : { + "description" : "Too many requests.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, "200" : { "description" : "Returns the asset by childId", "content" : { @@ -4268,8 +4265,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -4288,18 +4285,8 @@ } } }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "429" : { - "description" : "Too many requests.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -4357,20 +4344,18 @@ } ], "responses" : { - "200" : { - "description" : "Returns a distinct filter values for given fieldName.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { - "maxItems" : 2147483647, - "minItems" : 0, - "type" : "array" + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "404" : { - "description" : "Not found.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -4379,8 +4364,8 @@ } } }, - "400" : { - "description" : "Bad request.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -4389,18 +4374,20 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "200" : { + "description" : "Returns a distinct filter values for given fieldName.", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "maxItems" : 2147483647, + "minItems" : 0, + "type" : "array" } } } }, - "401" : { - "description" : "Authorization failed.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -4409,8 +4396,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -4419,8 +4406,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -4481,7 +4468,7 @@ } }, { - "name" : "filter", + "name" : "searchCriteriaRequestParam", "in" : "query", "required" : true, "schema" : { @@ -4510,6 +4497,16 @@ } } }, + "429" : { + "description" : "Too many requests.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, "200" : { "description" : "Returns the paged result found for Asset", "content" : { @@ -4642,8 +4639,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -4662,18 +4659,8 @@ } } }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "429" : { - "description" : "Too many requests.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -4739,8 +4726,48 @@ } } }, - "400" : { - "description" : "Bad request.", + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "429" : { + "description" : "Too many requests.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "403" : { + "description" : "Forbidden.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "401" : { + "description" : "Authorization failed.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -4749,8 +4776,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -4885,46 +4912,6 @@ } } } - }, - "401" : { - "description" : "Authorization failed.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "429" : { - "description" : "Too many requests.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "500" : { - "description" : "Internal server error.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } } }, "security" : [ @@ -4965,20 +4952,18 @@ } ], "responses" : { - "200" : { - "description" : "Returns a distinct filter values for given fieldName.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { - "maxItems" : 2147483647, - "minItems" : 0, - "type" : "array" + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "404" : { - "description" : "Not found.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -4987,8 +4972,8 @@ } } }, - "400" : { - "description" : "Bad request.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -4997,18 +4982,20 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "200" : { + "description" : "Returns a distinct filter values for given fieldName.", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "maxItems" : 2147483647, + "minItems" : 0, + "type" : "array" } } } }, - "401" : { - "description" : "Authorization failed.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -5017,8 +5004,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -5027,8 +5014,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -5086,6 +5073,16 @@ } } }, + "429" : { + "description" : "Too many requests.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, "200" : { "description" : "Returns the assets found", "content" : { @@ -5100,8 +5097,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -5120,18 +5117,8 @@ } } }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "429" : { - "description" : "Too many requests.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -5213,6 +5200,16 @@ } } }, + "429" : { + "description" : "Too many requests.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, "200" : { "description" : "OK.", "content" : { @@ -5228,8 +5225,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -5248,18 +5245,8 @@ } } }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "429" : { - "description" : "Too many requests.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -5307,19 +5294,18 @@ } ], "responses" : { - "200" : { - "description" : "Returns the paged result found for Asset", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { - "maxItems" : 2147483647, - "type" : "array" + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "404" : { - "description" : "Not found.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -5328,8 +5314,8 @@ } } }, - "400" : { - "description" : "Bad request.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -5338,8 +5324,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -5358,8 +5344,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -5368,8 +5354,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -5378,12 +5364,13 @@ } } }, - "500" : { - "description" : "Internal server error.", + "200" : { + "description" : "Returns the paged result found for Asset", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "maxItems" : 2147483647, + "type" : "array" } } } @@ -5417,19 +5404,18 @@ } ], "responses" : { - "200" : { - "description" : "Returns the paged result found for Asset", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { - "maxItems" : 2147483647, - "type" : "array" + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "404" : { - "description" : "Not found.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -5438,8 +5424,8 @@ } } }, - "400" : { - "description" : "Bad request.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -5448,8 +5434,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -5468,8 +5454,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -5478,8 +5464,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -5488,12 +5474,13 @@ } } }, - "500" : { - "description" : "Internal server error.", + "200" : { + "description" : "Returns the paged result found for Asset", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "maxItems" : 2147483647, + "type" : "array" } } } @@ -5560,8 +5547,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -5580,11 +5567,8 @@ } } }, - "204" : { - "description" : "Deleted." - }, - "429" : { - "description" : "Too many requests.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -5602,6 +5586,9 @@ } } } + }, + "204" : { + "description" : "Deleted." } }, "security" : [ @@ -5616,7 +5603,7 @@ }, "components" : { "schemas" : { - "BpnEdcMappingRequest" : { + "BpnMappingRequest" : { "required" : [ "bpn", "url" @@ -5920,9 +5907,48 @@ }, { "$ref" : "#/components/schemas/PartSiteInformationAsPlannedResponse" + }, + { + "$ref" : "#/components/schemas/DetailAspectDataTractionBatteryCodeResponse" } ] }, + "DetailAspectDataTractionBatteryCodeResponse" : { + "type" : "object", + "properties" : { + "productType" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string" + }, + "tractionBatteryCode" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string" + }, + "subcomponents" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/DetailAspectDataTractionBatteryCodeSubcomponentResponse" + } + } + } + }, + "DetailAspectDataTractionBatteryCodeSubcomponentResponse" : { + "type" : "object", + "properties" : { + "productType" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string" + }, + "tractionBatteryCode" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string" + } + } + }, "DetailAspectModelResponse" : { "type" : "object", "properties" : { diff --git a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/application/asbuilt/mapper/AssetAsBuiltResponseMapper.java b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/application/asbuilt/mapper/AssetAsBuiltResponseMapper.java index ddbc218c33..83a62c3ef4 100644 --- a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/application/asbuilt/mapper/AssetAsBuiltResponseMapper.java +++ b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/application/asbuilt/mapper/AssetAsBuiltResponseMapper.java @@ -22,12 +22,9 @@ import org.eclipse.tractusx.traceability.assets.application.base.mapper.AssetBaseResponseMapper; import org.eclipse.tractusx.traceability.assets.domain.base.model.AssetBase; import org.eclipse.tractusx.traceability.common.model.PageResult; -import org.eclipse.tractusx.traceability.qualitynotification.domain.base.model.QualityNotification; import java.util.List; -import static java.util.Objects.isNull; - public class AssetAsBuiltResponseMapper extends AssetBaseResponseMapper { public static AssetAsBuiltResponse from(final AssetBase asset) { diff --git a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/application/asbuilt/rest/AssetAsBuiltController.java b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/application/asbuilt/rest/AssetAsBuiltController.java index 9368957e0f..0fe1cd9c89 100644 --- a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/application/asbuilt/rest/AssetAsBuiltController.java +++ b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/application/asbuilt/rest/AssetAsBuiltController.java @@ -44,7 +44,13 @@ import org.eclipse.tractusx.traceability.common.response.ErrorResponse; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.web.bind.annotation.*; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PatchMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; import java.util.List; import java.util.Map; @@ -176,9 +182,9 @@ public void sync(@Valid @RequestBody SyncAssetsRequest syncAssetsRequest) { mediaType = "application/json", schema = @Schema(implementation = ErrorResponse.class)))}) @GetMapping("") - public PageResult assets(OwnPageable pageable, @QueryParam("owner") Owner owner, SearchCriteriaRequestParam filter) { - filter.addOwnerCriteria(owner); - return AssetAsBuiltResponseMapper.from(assetBaseService.getAssets(OwnPageable.toPageable(pageable), filter.toSearchCriteria())); + public PageResult assets(OwnPageable pageable, @QueryParam("owner") Owner owner, SearchCriteriaRequestParam searchCriteriaRequestParam) { + searchCriteriaRequestParam.addOwnerCriteria(owner); + return AssetAsBuiltResponseMapper.from(assetBaseService.getAssets(OwnPageable.toPageable(pageable), searchCriteriaRequestParam.toSearchCriteria())); } diff --git a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/application/base/mapper/AssetBaseResponseMapper.java b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/application/base/mapper/AssetBaseResponseMapper.java index 09245bf4fc..3b30cdc323 100644 --- a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/application/base/mapper/AssetBaseResponseMapper.java +++ b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/application/base/mapper/AssetBaseResponseMapper.java @@ -19,6 +19,8 @@ package org.eclipse.tractusx.traceability.assets.application.base.mapper; import assets.response.asbuilt.DetailAspectDataAsBuiltResponse; +import assets.response.asbuilt.DetailAspectDataTractionBatteryCodeResponse; +import assets.response.asbuilt.DetailAspectDataTractionBatteryCodeResponse.DetailAspectDataTractionBatteryCodeSubcomponentResponse; import assets.response.asplanned.DetailAspectDataAsPlannedResponse; import assets.response.asplanned.PartSiteInformationAsPlannedResponse; import assets.response.base.DescriptionsResponse; @@ -32,8 +34,9 @@ import lombok.Data; import lombok.experimental.SuperBuilder; import lombok.extern.slf4j.Slf4j; -import org.eclipse.tractusx.traceability.assets.application.asplanned.mapper.AssetAsPlannedResponseMapper; import org.eclipse.tractusx.traceability.assets.domain.asbuilt.model.aspect.DetailAspectDataAsBuilt; +import org.eclipse.tractusx.traceability.assets.domain.asbuilt.model.aspect.DetailAspectDataTractionBatteryCode; +import org.eclipse.tractusx.traceability.assets.domain.asbuilt.model.aspect.DetailAspectDataTractionBatteryCode.DetailAspectDataTractionBatteryCodeSubcomponent; import org.eclipse.tractusx.traceability.assets.domain.asplanned.model.aspect.DetailAspectDataAsPlanned; import org.eclipse.tractusx.traceability.assets.domain.asplanned.model.aspect.DetailAspectDataPartSiteInformationAsPlanned; import org.eclipse.tractusx.traceability.assets.domain.base.model.Descriptions; @@ -57,7 +60,7 @@ public class AssetBaseResponseMapper { public static List fromList(List detailAspectModels) { List list = emptyIfNull(detailAspectModels).stream() - .map(AssetAsPlannedResponseMapper::from) + .map(AssetBaseResponseMapper::from) .toList(); log.info(list.toString()); return list; @@ -76,6 +79,14 @@ public static DetailAspectTypeResponse from(DetailAspectType detailAspectType) { public static DetailAspectDataResponse from(DetailAspectData detailAspectData) { + if (detailAspectData instanceof DetailAspectDataTractionBatteryCode detailAspectDataTractionBatteryCode) { + return DetailAspectDataTractionBatteryCodeResponse.builder() + .tractionBatteryCode(detailAspectDataTractionBatteryCode.getTractionBatteryCode()) + .productType(detailAspectDataTractionBatteryCode.getProductType()) + .subcomponents(from(detailAspectDataTractionBatteryCode.getSubcomponents())) + .build(); + } + if (detailAspectData instanceof DetailAspectDataPartSiteInformationAsPlanned detailAspectDataPartSiteInformationAsPlanned) { return PartSiteInformationAsPlannedResponse.builder().catenaXSiteId(detailAspectDataPartSiteInformationAsPlanned.getCatenaXSiteId()) .function(detailAspectDataPartSiteInformationAsPlanned.getFunction()) @@ -130,4 +141,9 @@ protected static Integer countNotificationsInActiveState(List from(List subcomponents) { + return subcomponents.stream().map(entry -> DetailAspectDataTractionBatteryCodeSubcomponentResponse.builder().tractionBatteryCode(entry.getTractionBatteryCode()) + .productType(entry.getProductType()).build()).toList(); + } } diff --git a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/domain/asbuilt/model/aspect/DetailAspectDataTractionBatteryCode.java b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/domain/asbuilt/model/aspect/DetailAspectDataTractionBatteryCode.java new file mode 100644 index 0000000000..5e58c47ecd --- /dev/null +++ b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/domain/asbuilt/model/aspect/DetailAspectDataTractionBatteryCode.java @@ -0,0 +1,65 @@ +/******************************************************************************** + * Copyright (c) 2023 Contributors to the Eclipse Foundation + * + * See the NOTICE file(s) distributed with this work for additional + * information regarding copyright ownership. + * + * This program and the accompanying materials are made available under the + * terms of the Apache License, Version 2.0 which is available at + * https://www.apache.org/licenses/LICENSE-2.0. + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + * SPDX-License-Identifier: Apache-2.0 + ********************************************************************************/ +package org.eclipse.tractusx.traceability.assets.domain.asbuilt.model.aspect; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import org.eclipse.tractusx.traceability.assets.domain.base.model.aspect.DetailAspectData; +import org.eclipse.tractusx.traceability.assets.infrastructure.base.irs.model.response.semanticdatamodel.SemanticDataModel; + +import java.util.List; +import java.util.Objects; + +@Builder +@Setter +@Getter +@AllArgsConstructor +@NoArgsConstructor +public class DetailAspectDataTractionBatteryCode extends SemanticDataModel implements DetailAspectData { + String productType; + String tractionBatteryCode; + List subcomponents; + + @Builder + @Setter + @Getter + @AllArgsConstructor + @NoArgsConstructor + public static class DetailAspectDataTractionBatteryCodeSubcomponent { + String productType; + String tractionBatteryCode; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + if (!super.equals(o)) return false; + DetailAspectDataTractionBatteryCode that = (DetailAspectDataTractionBatteryCode) o; + return Objects.equals(productType, that.productType) && Objects.equals(tractionBatteryCode, that.tractionBatteryCode) && Objects.equals(subcomponents, that.subcomponents); + } + + @Override + public int hashCode() { + return Objects.hash(super.hashCode(), productType, tractionBatteryCode, subcomponents); + } +} diff --git a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/domain/base/model/aspect/DetailAspectModel.java b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/domain/base/model/aspect/DetailAspectModel.java index 3fa7c0bbc0..c8ea0a3cdd 100644 --- a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/domain/base/model/aspect/DetailAspectModel.java +++ b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/domain/base/model/aspect/DetailAspectModel.java @@ -27,10 +27,13 @@ import lombok.Builder; import lombok.Getter; import lombok.Setter; +import org.apache.logging.log4j.util.Strings; import org.eclipse.tractusx.traceability.assets.domain.asbuilt.model.aspect.DetailAspectDataAsBuilt; +import org.eclipse.tractusx.traceability.assets.domain.asbuilt.model.aspect.DetailAspectDataTractionBatteryCode; import org.eclipse.tractusx.traceability.assets.domain.asplanned.model.aspect.DetailAspectDataAsPlanned; import org.eclipse.tractusx.traceability.assets.domain.asplanned.model.aspect.DetailAspectDataPartSiteInformationAsPlanned; import org.eclipse.tractusx.traceability.assets.infrastructure.asbuilt.model.AssetAsBuiltEntity; +import org.eclipse.tractusx.traceability.assets.infrastructure.asbuilt.model.TractionBatteryCode; import org.eclipse.tractusx.traceability.assets.infrastructure.asplanned.model.AssetAsPlannedEntity; import org.eclipse.tractusx.traceability.assets.infrastructure.base.irs.model.response.semanticdatamodel.ManufacturingInformation; import org.eclipse.tractusx.traceability.assets.infrastructure.base.irs.model.response.semanticdatamodel.PartTypeInformation; @@ -40,7 +43,6 @@ import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; -import java.util.Optional; import static org.apache.commons.collections4.ListUtils.emptyIfNull; @@ -57,7 +59,6 @@ public static DetailAspectModel from(DetailAspectModelResponse detailAspectModel return DetailAspectModel.builder() .type(DetailAspectType.valueOf(detailAspectType.name())) .data(from(detailAspectData)).build(); - } public static DetailAspectData from(DetailAspectDataResponse detailAspectDataResponse) { @@ -89,15 +90,9 @@ public static DetailAspectData from(DetailAspectDataResponse detailAspectDataRes return DetailAspectDataPartSiteInformationAsPlanned.builder().build(); } - public static Optional getDetailAspectDataByType(List detailAspectModels, DetailAspectType type) { - return detailAspectModels.stream() - .filter(detailAspectModel -> detailAspectModel.getType().equals(type)) - .findFirst(); - } - public static List from(AssetAsBuiltEntity entity) { - DetailAspectModel detailAspectModel = DetailAspectModel.builder() + DetailAspectModel detailAspectModelAsBuilt = DetailAspectModel.builder() .type(DetailAspectType.AS_BUILT) .data(DetailAspectDataAsBuilt.builder() .partId(entity.getManufacturerPartId()) @@ -107,8 +102,23 @@ public static List from(AssetAsBuiltEntity entity) { .manufacturingDate(entity.getManufacturingDate() != null ? entity.getManufacturingDate() : null) .build()) .build(); + List detailAspectModels = new ArrayList<>(List.of(detailAspectModelAsBuilt)); + + if (!Strings.isEmpty(entity.getTractionBatteryCode())) { + DetailAspectModel detailAspectModelTractionBatteryCode = DetailAspectModel. + builder() + .type(DetailAspectType.TRACTION_BATTERY_CODE) + .data(DetailAspectDataTractionBatteryCode.builder() + .tractionBatteryCode(entity.getTractionBatteryCode()) + .productType(entity.getProductType()) + .subcomponents(TractionBatteryCode.toDomain(entity)) + .build() + ).build(); + + detailAspectModels.add(detailAspectModelTractionBatteryCode); + } - return List.of(detailAspectModel); + return detailAspectModels; } public static List from(AssetAsPlannedEntity entity) { @@ -133,7 +143,6 @@ public static List from(AssetAsPlannedEntity entity) { return List.of(asPlannedInfo, partSiteInfo); } - public static List extractDetailAspectModelsPartSiteInformationAsPlanned(List sites) { List detailAspectModels = new ArrayList<>(); emptyIfNull(sites).forEach(site -> { @@ -169,4 +178,8 @@ public static DetailAspectModel extractDetailAspectModelsAsBuilt(ManufacturingIn .build(); return DetailAspectModel.builder().data(detailAspectDataAsBuilt).type(DetailAspectType.AS_BUILT).build(); } + + public static DetailAspectModel extractDetailAspectModelTractionBatteryCode(DetailAspectDataTractionBatteryCode detailAspectDataTractionBatteryCode) { + return DetailAspectModel.builder().data(detailAspectDataTractionBatteryCode).type(DetailAspectType.TRACTION_BATTERY_CODE).build(); + } } diff --git a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/infrastructure/asbuilt/model/AssetAsBuiltEntity.java b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/infrastructure/asbuilt/model/AssetAsBuiltEntity.java index 2eca1bf972..8914b5d0fb 100644 --- a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/infrastructure/asbuilt/model/AssetAsBuiltEntity.java +++ b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/infrastructure/asbuilt/model/AssetAsBuiltEntity.java @@ -62,6 +62,13 @@ public class AssetAsBuiltEntity extends AssetBaseEntity { private String manufacturerId; private String nameAtCustomer; private String customerPartId; + private String productType; + private String tractionBatteryCode; + + @ElementCollection + @CollectionTable(name = "traction_battery_code_subcomponent", joinColumns = {@JoinColumn(name = "traction_battery_code")}) + private List subcomponents; + @ElementCollection @CollectionTable(name = "assets_as_built_childs", joinColumns = {@JoinColumn(name = "asset_as_built_id")}) @@ -79,6 +86,7 @@ public class AssetAsBuiltEntity extends AssetBaseEntity { public static AssetAsBuiltEntity from(AssetBase asset) { ManufacturingInfo manufacturingInfo = ManufacturingInfo.from(asset.getDetailAspectModels()); + TractionBatteryCode tractionBatteryCodeObj = TractionBatteryCode.from(asset.getDetailAspectModels()); return AssetAsBuiltEntity.builder() .id(asset.getId()) @@ -105,6 +113,9 @@ public static AssetAsBuiltEntity from(AssetBase asset) { .classification(asset.getClassification()) .inInvestigation(asset.isUnderInvestigation()) .semanticDataModel(SemanticDataModelEntity.from(asset.getSemanticDataModel())) + .productType(tractionBatteryCodeObj.getProductType()) + .tractionBatteryCode(tractionBatteryCodeObj.getTractionBatteryCode()) + .subcomponents(tractionBatteryCodeObj.getSubcomponents()) .build(); } @@ -133,6 +144,7 @@ public static AssetBase toDomain(AssetAsBuiltEntity entity) { .detailAspectModels(DetailAspectModel.from(entity)) .qualityAlerts(emptyIfNull(entity.alerts).stream().map(AlertEntity::toDomain).toList()) .qualityInvestigations(emptyIfNull(entity.investigations).stream().map(InvestigationEntity::toDomain).toList()) + .build(); } @@ -168,4 +180,15 @@ public static class ParentDescription { private String id; private String idShort; } + + + @Builder + @NoArgsConstructor + @AllArgsConstructor + @Data + @Embeddable + public static class TractionBatteryCodeSubcomponents { + private String subcomponentTractionBatteryCode; + private String productType; + } } diff --git a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/infrastructure/asbuilt/model/TractionBatteryCode.java b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/infrastructure/asbuilt/model/TractionBatteryCode.java new file mode 100644 index 0000000000..6a32539e14 --- /dev/null +++ b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/infrastructure/asbuilt/model/TractionBatteryCode.java @@ -0,0 +1,77 @@ +/******************************************************************************** + * Copyright (c) 2023 Contributors to the Eclipse Foundation + * + * See the NOTICE file(s) distributed with this work for additional + * information regarding copyright ownership. + * + * This program and the accompanying materials are made available under the + * terms of the Apache License, Version 2.0 which is available at + * https://www.apache.org/licenses/LICENSE-2.0. + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + * SPDX-License-Identifier: Apache-2.0 + ********************************************************************************/ +package org.eclipse.tractusx.traceability.assets.infrastructure.asbuilt.model; + +import lombok.Builder; +import lombok.Getter; +import org.eclipse.tractusx.traceability.assets.domain.asbuilt.model.aspect.DetailAspectDataTractionBatteryCode; +import org.eclipse.tractusx.traceability.assets.domain.asbuilt.model.aspect.DetailAspectDataTractionBatteryCode.DetailAspectDataTractionBatteryCodeSubcomponent; +import org.eclipse.tractusx.traceability.assets.domain.base.model.aspect.DetailAspectModel; +import org.eclipse.tractusx.traceability.assets.domain.base.model.aspect.DetailAspectType; + +import java.util.Collections; +import java.util.List; +import java.util.Optional; + +@Getter +@Builder +public class TractionBatteryCode { + private String productType; + private String tractionBatteryCode; + + private List subcomponents; + + + public static TractionBatteryCode from(List detailAspectModels) { + Optional tractionBatteryCodeAspectModel = detailAspectModels + .stream() + .filter(detailAspectModel -> DetailAspectType.TRACTION_BATTERY_CODE.equals(detailAspectModel.getType())) + .findFirst(); + + String tractionBatteryCode = tractionBatteryCodeAspectModel.map(detailAspectModel -> (DetailAspectDataTractionBatteryCode) detailAspectModel.getData()) + .map(DetailAspectDataTractionBatteryCode::getTractionBatteryCode).orElse(""); + + String productType = tractionBatteryCodeAspectModel.map(detailAspectModel -> (DetailAspectDataTractionBatteryCode) detailAspectModel.getData()) + .map(DetailAspectDataTractionBatteryCode::getProductType).orElse(""); + + List subcomponents = tractionBatteryCodeAspectModel.map(detailAspectModel -> (DetailAspectDataTractionBatteryCode) detailAspectModel.getData()) + .map(DetailAspectDataTractionBatteryCode::getSubcomponents) + .orElse(Collections.emptyList()) + .stream() + .map(TractionBatteryCode::convertSubcomponents).toList(); + + return TractionBatteryCode.builder().productType(productType).tractionBatteryCode(tractionBatteryCode).subcomponents(subcomponents).build(); + + } + + private static AssetAsBuiltEntity.TractionBatteryCodeSubcomponents convertSubcomponents(DetailAspectDataTractionBatteryCodeSubcomponent detailAspectDataTractionBatteryCode) { + return AssetAsBuiltEntity.TractionBatteryCodeSubcomponents.builder().subcomponentTractionBatteryCode(detailAspectDataTractionBatteryCode.getTractionBatteryCode()) + .productType(detailAspectDataTractionBatteryCode.getProductType()).build(); + } + + public static List toDomain(AssetAsBuiltEntity entity) { + return entity.getSubcomponents().stream().map(entry -> DetailAspectDataTractionBatteryCodeSubcomponent + .builder() + .tractionBatteryCode(entry.getSubcomponentTractionBatteryCode()) + .productType(entry.getProductType()) + .build()).toList(); + } + + +} diff --git a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/infrastructure/base/irs/model/response/JobDetailResponse.java b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/infrastructure/base/irs/model/response/JobDetailResponse.java index 9002e99acf..8e3fb1fde9 100644 --- a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/infrastructure/base/irs/model/response/JobDetailResponse.java +++ b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/infrastructure/base/irs/model/response/JobDetailResponse.java @@ -26,6 +26,7 @@ import com.fasterxml.jackson.annotation.JsonSetter; import com.fasterxml.jackson.annotation.Nulls; import lombok.extern.slf4j.Slf4j; +import org.eclipse.tractusx.traceability.assets.domain.asbuilt.model.aspect.DetailAspectDataTractionBatteryCode; import org.eclipse.tractusx.traceability.assets.domain.base.model.AssetBase; import org.eclipse.tractusx.traceability.assets.domain.base.model.Descriptions; import org.eclipse.tractusx.traceability.assets.domain.base.model.Owner; @@ -34,9 +35,15 @@ import org.eclipse.tractusx.traceability.assets.infrastructure.base.irs.model.response.relationship.Relationship; import org.eclipse.tractusx.traceability.assets.infrastructure.base.irs.model.response.semanticdatamodel.SemanticDataModel; -import java.util.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.Optional; import java.util.stream.Collectors; +import static org.eclipse.tractusx.traceability.assets.infrastructure.base.irs.model.response.relationship.Aspect.TRACTION_BATTERY_CODE; + @Slf4j public record JobDetailResponse( JobStatus jobStatus, @@ -73,11 +80,16 @@ static JobDetailResponse of( // E.g. import the schema for JustInSequencePart https://github.com/eclipse-tractusx/sldt-semantic-models/blob/main/io.catenax.just_in_sequence_part/1.0.0/gen/JustInSequencePart-schema.json // and generate a Java class List semanticDataModels = submodels.stream() - .filter(submodel -> submodel.getPayload() instanceof SemanticDataModel) + .filter(submodel -> submodel.getPayload() instanceof SemanticDataModel || submodel.getPayload() instanceof DetailAspectDataTractionBatteryCode) .map(submodel -> { - SemanticDataModel payload = (SemanticDataModel) submodel.getPayload(); - payload.setAspectType(submodel.getAspectType()); - return payload; + if (submodel.getPayload() instanceof DetailAspectDataTractionBatteryCode detailAspectDataTractionBatteryCode) { + detailAspectDataTractionBatteryCode.setAspectType(submodel.getAspectType()); + return detailAspectDataTractionBatteryCode; + } else { + SemanticDataModel payload = (SemanticDataModel) submodel.getPayload(); + payload.setAspectType(submodel.getAspectType()); + return payload; + } }).toList(); return new JobDetailResponse( @@ -142,7 +154,9 @@ private boolean isSupplierDirection() { } private List mapToOtherPartsAsBuilt(Map shortIds, Owner owner, Map bpnMapping) { - List otherParts = semanticDataModels().stream().filter(semanticDataModel -> !isOwnPart(semanticDataModel, jobStatus)).toList(); + List otherParts = semanticDataModels().stream() + .filter(semanticDataModel -> !(semanticDataModel instanceof DetailAspectDataTractionBatteryCode)).filter(semanticDataModel -> !isOwnPart(semanticDataModel, jobStatus)) + .toList(); log.info(":: mapToOtherPartsAsBuilt()"); log.info(":: otherParts: {}", otherParts); @@ -150,7 +164,7 @@ private List mapToOtherPartsAsBuilt(Map shortIds, Own .stream() .map(semanticDataModel -> semanticDataModel.toDomainAsBuilt(semanticDataModel.localIdentifiers(), shortIds, owner, bpnMapping, Collections.emptyList(), - Collections.emptyList())) + Collections.emptyList(), Optional.empty())) .toList(); log.info(":: mapped assets: {}", assets); return assets; @@ -218,7 +232,10 @@ private static void addPartSiteInformationAsPlannedToOwnPartsAsPlanned(List mapToOwnPartsAsBuilt(Map shortIds, Map bpnMapping) { - List ownParts = semanticDataModels().stream().filter(semanticDataModel -> isOwnPart(semanticDataModel, jobStatus)).toList(); + List ownParts = semanticDataModels().stream() + .filter(semanticDataModel -> Aspect.isMasterAspect(semanticDataModel.getAspectType())) + .filter(semanticDataModel -> isOwnPart(semanticDataModel, jobStatus)) + .toList(); log.info(":: mapToOwnPartsAsBuilt()"); log.info(":: ownParts: {}", ownParts); // The Relationship on supplierPart catenaXId contains the id of the asset which has a relationship @@ -231,11 +248,18 @@ private List mapToOwnPartsAsBuilt(Map shortIds, Map SINGLE_LEVEL_USAGE_AS_BUILT.equals(relationship.aspectType().getAspectName())) .collect(Collectors.groupingBy(Relationship::childCatenaXId, Collectors.toList())); + //TRACEFOSS-2333: A tractionBatteryCode has no catenaxId. If a tractionBatteryCode is present for the requested + // global_asset_id, then it can be automatically mapped to the own SerialPart + Optional tractionBatteryCodeOptional = semanticDataModels.stream() + .filter(semanticDataModel -> semanticDataModel.getAspectType().contains(TRACTION_BATTERY_CODE.getAspectName())) + .map(DetailAspectDataTractionBatteryCode.class::cast).findFirst(); + final List assets = ownParts .stream() .map(semanticDataModel -> semanticDataModel.toDomainAsBuilt(semanticDataModel.localIdentifiers(), shortIds, Owner.OWN, bpnMapping, getParentParts(customerPartsMap, shortIds, semanticDataModel.catenaXId()), - getChildParts(supplierPartsMap, shortIds, semanticDataModel.catenaXId()))) + getChildParts(supplierPartsMap, shortIds, semanticDataModel.catenaXId()), + tractionBatteryCodeOptional)) .toList(); log.info(":: mapped assets: {}", assets); return assets; diff --git a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/infrastructure/base/irs/model/response/Submodel.java b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/infrastructure/base/irs/model/response/Submodel.java index 84a0f6e8e2..20da2c5254 100644 --- a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/infrastructure/base/irs/model/response/Submodel.java +++ b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/infrastructure/base/irs/model/response/Submodel.java @@ -26,6 +26,7 @@ import com.fasterxml.jackson.annotation.JsonSubTypes; import com.fasterxml.jackson.annotation.JsonSubTypes.Type; import com.fasterxml.jackson.annotation.JsonTypeInfo; +import org.eclipse.tractusx.traceability.assets.domain.asbuilt.model.aspect.DetailAspectDataTractionBatteryCode; import org.eclipse.tractusx.traceability.assets.infrastructure.base.irs.model.response.semanticdatamodel.SemanticDataModel; class Submodel { @@ -57,6 +58,9 @@ class Submodel { }), @Type(value = SemanticDataModel.class, names = { "urn:bamm:io.catenax.just_in_sequence_part:1.0.0#JustInSequencePart" + }), + @Type(value = DetailAspectDataTractionBatteryCode.class, names = { + "urn:bamm:io.catenax.traction_battery_code:1.0.0#TractionBatteryCode" }) }) private Object payload; diff --git a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/infrastructure/base/irs/model/response/relationship/Aspect.java b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/infrastructure/base/irs/model/response/relationship/Aspect.java index c2ddabfe91..cb15a7414e 100644 --- a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/infrastructure/base/irs/model/response/relationship/Aspect.java +++ b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/infrastructure/base/irs/model/response/relationship/Aspect.java @@ -32,7 +32,8 @@ public enum Aspect { SINGLE_LEVEL_BOM_AS_PLANNED("SingleLevelBomAsPlanned"), PART_SITE_INFORMATION_AS_PLANNED("PartSiteInformationAsPlanned"), PART_AS_PLANNED("PartAsPlanned"), - JUST_IN_SEQUENCE_PART("JustInSequencePart"); + JUST_IN_SEQUENCE_PART("JustInSequencePart"), + TRACTION_BATTERY_CODE("TractionBatteryCode"); private final String aspectName; diff --git a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/infrastructure/base/irs/model/response/semanticdatamodel/SemanticDataModel.java b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/infrastructure/base/irs/model/response/semanticdatamodel/SemanticDataModel.java index 8887e2a4ff..fa23d08b51 100644 --- a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/infrastructure/base/irs/model/response/semanticdatamodel/SemanticDataModel.java +++ b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/infrastructure/base/irs/model/response/semanticdatamodel/SemanticDataModel.java @@ -25,6 +25,7 @@ import lombok.NoArgsConstructor; import lombok.Setter; import lombok.extern.slf4j.Slf4j; +import org.eclipse.tractusx.traceability.assets.domain.asbuilt.model.aspect.DetailAspectDataTractionBatteryCode; import org.eclipse.tractusx.traceability.assets.domain.base.model.AssetBase; import org.eclipse.tractusx.traceability.assets.domain.base.model.Descriptions; import org.eclipse.tractusx.traceability.assets.domain.base.model.Owner; @@ -41,6 +42,7 @@ import java.util.concurrent.atomic.AtomicReference; import static org.apache.commons.collections4.ListUtils.emptyIfNull; +import static org.eclipse.tractusx.traceability.assets.domain.base.model.aspect.DetailAspectModel.extractDetailAspectModelTractionBatteryCode; import static org.eclipse.tractusx.traceability.assets.domain.base.model.aspect.DetailAspectModel.extractDetailAspectModelsAsBuilt; import static org.eclipse.tractusx.traceability.assets.domain.base.model.aspect.DetailAspectModel.extractDetailAspectModelsAsPlanned; import static org.eclipse.tractusx.traceability.assets.domain.base.model.aspect.DetailAspectModel.extractDetailAspectModelsPartSiteInformationAsPlanned; @@ -57,7 +59,7 @@ public class SemanticDataModel { ValidityPeriod validityPeriod; List sites; String aspectType; - private String catenaXId; + String catenaXId; public SemanticDataModel( String catenaXId, @@ -84,7 +86,6 @@ public Optional getLocalId(LocalIdKey key) { } - public Optional getLocalIdByInput(LocalIdKey key, List localIds) { return localIds.stream() .filter(localId -> localId.key() == key) @@ -92,8 +93,11 @@ public Optional getLocalIdByInput(LocalIdKey key, List localIds .map(LocalId::value); } - public AssetBase toDomainAsBuilt(List localIds, Map shortIds, Owner owner, Map bpns, List parentRelations, List childRelations) { + public AssetBase toDomainAsBuilt(List localIds, Map shortIds, Owner owner, Map bpns, List parentRelations, List childRelations, + Optional tractionBatteryCodeOptional) { final String manufacturerName = bpns.get(manufacturerId()); + ArrayList detailAspectModels = new ArrayList<>(); final AtomicReference semanticModelId = new AtomicReference<>(); final AtomicReference semanticDataModel = new AtomicReference<>(); @@ -101,6 +105,7 @@ public AssetBase toDomainAsBuilt(List localIds, Map sho getLocalIdByInput(LocalIdKey.PART_INSTANCE_ID, localIds).ifPresent(s -> { semanticModelId.set(s); semanticDataModel.set(org.eclipse.tractusx.traceability.assets.domain.base.model.SemanticDataModel.SERIALPART); + tractionBatteryCodeOptional.ifPresent(tbc -> detailAspectModels.add(extractDetailAspectModelTractionBatteryCode(tbc))); }); getLocalIdByInput(LocalIdKey.BATCH_ID, localIds).ifPresent(s -> { @@ -118,13 +123,13 @@ public AssetBase toDomainAsBuilt(List localIds, Map sho semanticDataModel.set(org.eclipse.tractusx.traceability.assets.domain.base.model.SemanticDataModel.UNKNOWN); } - DetailAspectModel detailAspectModel = extractDetailAspectModelsAsBuilt(manufacturingInformation, partTypeInformation); + detailAspectModels.add(extractDetailAspectModelsAsBuilt(manufacturingInformation, partTypeInformation)); return AssetBase.builder() .id(catenaXId()) .idShort(defaultValue(shortIds.get(catenaXId()))) .semanticModelId(semanticModelId.get()) - .detailAspectModels(List.of(detailAspectModel)) + .detailAspectModels(detailAspectModels) .manufacturerId(manufacturerId()) .manufacturerName(defaultValue(manufacturerName)) .nameAtManufacturer(partTypeInformation.nameAtManufacturer()) @@ -141,6 +146,7 @@ public AssetBase toDomainAsBuilt(List localIds, Map sho .build(); } + public AssetBase toDomainAsPlanned(Map shortIds, Owner owner, Map bpns, List parentRelations, List childRelations) { final String manufacturerName = bpns.get(manufacturerId()); final String[] manufacturerId = {"--"}; diff --git a/tx-backend/src/main/resources/data/irs_assets_tractionbatterycode.json b/tx-backend/src/main/resources/data/irs_assets_tractionbatterycode.json new file mode 100644 index 0000000000..5d2653a61b --- /dev/null +++ b/tx-backend/src/main/resources/data/irs_assets_tractionbatterycode.json @@ -0,0 +1,172 @@ +{ + "job" : { + "id" : "ff51b6b2-c3b5-43b8-befd-ae0a011f604b", + "globalAssetId" : "urn:uuid:d387fa8e-603c-42bd-98c3-4d87fef8d2bb", + "state" : "COMPLETED", + "exception" : null, + "createdOn" : "2022-09-01T10:49:30.099898402Z", + "startedOn" : "2022-09-01T10:49:30.100119699Z", + "lastModifiedOn" : "2022-09-01T10:53:12.845021701Z", + "completedOn" : "2022-09-01T10:53:12.845072801Z", + "owner" : "sa-cl6-cx-9", + "summary" : { + "asyncFetchedItems" : { + "running" : 0, + "completed" : 13, + "failed" : 0 + } + }, + "parameter" : { + "bomLifecycle" : "asBuilt", + "aspects" : [ + "SingleLevelBomAsBuilt", + "SerialPart" + ], + "depth" : 10, + "direction" : "downward", + "collectAspects" : true + } + }, + "relationships" : [], + "shells" : [ + { + "administration" : null, + "description" : [ + { + "language" : "en", + "text" : "Vehicle Hybrid" + } + ], + "globalAssetId" : { + "value" : [ + "urn:uuid:d387fa8e-603c-42bd-98c3-4d87fef8d2bb" + ] + }, + "idShort" : "vehicle_hybrid.asm", + "identification" : "urn:uuid:d387fa8e-603c-42bd-98c3-4d87fef8d2bb", + "specificAssetIds" : [ + { + "key" : "http://pwc.t-systems.com/datamodel/common", + "subjectId" : null, + "value" : "OMA-TGFAYUHXFLHHUQQMPLTE", + "semanticId" : null + }, + { + "key" : "urn:VR:wt.part.WTPart#", + "subjectId" : null, + "value" : "KR-09", + "semanticId" : null + } + ], + "submodelDescriptors" : [ + { + "administration" : null, + "description" : [], + "idShort" : "serial-part", + "identification" : "urn:uuid:781dabcb-93e7-442d-bc38-8ba1451c0218", + "semanticId" : { + "value" : [ + "urn:bamm:io.catenax.serial_part:1.0.0#SerialPart" + ] + }, + "endpoints" : [ + { + "protocolInformation" : { + "endpointAddress" : "http://irs-provider-controlplane:8282/urn:uuid:d387fa8e-603c-42bd-98c3-4d87fef8d2bb-urn:uuid:781dabcb-93e7-442d-bc38-8ba1451c0218/submodel?content=value&extent=withBlobValue", + "endpointProtocol" : "AAS/SUBMODEL", + "endpointProtocolVersion" : "1.0RC02", + "subprotocol" : null, + "subprotocolBody" : null, + "subprotocolBodyEncoding" : null + }, + "interface" : "https://BPNL00000003B2OM.connector" + } + ] + }, + { + "administration" : null, + "description" : [], + "idShort" : "assembly-part-relationship", + "identification" : "urn:uuid:50de024d-60b3-49cd-ac74-37d81ce4bb7b", + "semanticId" : { + "value" : [ + "urn:bamm:com.catenax.single_level_bom_as_built:1.0.0#SingleLevelBomAsBuilt" + ] + }, + "endpoints" : [ + { + "protocolInformation" : { + "endpointAddress" : "http://irs-provider-controlplane:8282/urn:uuid:d387fa8e-603c-42bd-98c3-4d87fef8d2bb-urn:uuid:50de024d-60b3-49cd-ac74-37d81ce4bb7b/submodel?content=value&extent=withBlobValue", + "endpointProtocol" : "AAS/SUBMODEL", + "endpointProtocolVersion" : "1.0RC02", + "subprotocol" : null, + "subprotocolBody" : null, + "subprotocolBodyEncoding" : null + }, + "interface" : "https://BPNL00000003AYRE.connector" + } + ] + } + ] + } + ], + "tombstones" : [], + "submodels" : [ + { + "identification" : "urn:uuid:781dabcb-93e7-442d-bc38-8ba1451c0218", + "aspectType" : "urn:bamm:io.catenax.serial_part:1.0.0#SerialPart", + "payload" : { + "localIdentifiers" : [ + { + "value" : "BPNL00000003AYRE", + "key" : "manufacturerId" + }, + { + "value" : "KR-09", + "key" : "manufacturerPartId" + }, + { + "value" : "OMA-TGFAYUHXFLHHUQQMPLTE", + "key" : "partInstanceId" + }, + { + "value" : "OMA-TGFAYUHXFLHHUQQMPLTE", + "key" : "van" + } + ], + "manufacturingInformation" : { + "date" : "2014-11-18T09:23:55.000Z", + "country" : "DEU" + }, + "catenaXId" : "urn:uuid:d387fa8e-603c-42bd-98c3-4d87fef8d2bb", + "partTypeInformation" : { + "manufacturerPartId" : "KR-09", + "customerPartId" : "KR-09", + "classification" : "component", + "nameAtManufacturer" : "a/dev Door Key", + "nameAtCustomer" : "Door Key" + } + } + }, + { + "identification" : "urn:uuid:781dabcb-93e7-442d-bc38-8ba1451c0217", + "aspectType" : "urn:bamm:io.catenax.traction_battery_code:1.0.0#TractionBatteryCode", + "payload" : { + "tractionBatteryCode" : "X12MCPM27KLPCLX2M2382320", + "subcomponents" : [ + { + "tractionBatteryCode" : "X12MCPM27KLPCLX2M2382320", + "productType" : "cell" + } + ], + "productType" : "cell" + } + } + ], + "bpns" : [ + { + "manufacturerId" : "BPNL00000003AYRE", + "manufacturerName" : "Manufacturer Name 1" + } + ] +} diff --git a/tx-backend/src/main/resources/db/migration/V38__add_traction_battery_code_subcomponent_table.sql b/tx-backend/src/main/resources/db/migration/V38__add_traction_battery_code_subcomponent_table.sql new file mode 100644 index 0000000000..8a3e098d98 --- /dev/null +++ b/tx-backend/src/main/resources/db/migration/V38__add_traction_battery_code_subcomponent_table.sql @@ -0,0 +1,12 @@ +create table traction_battery_code_subcomponent +( + traction_battery_code varchar(255) not null, + subcomponent_traction_battery_code varchar(255) not null, + product_type varchar(255) +); + +ALTER TABLE assets_as_built + add column product_type varchar(255); + +ALTER TABLE assets_as_built + add column traction_battery_code varchar(255); diff --git a/tx-backend/src/test/java/org/eclipse/tractusx/traceability/integration/assets/AssetAsBuiltControllerAllIT.java b/tx-backend/src/test/java/org/eclipse/tractusx/traceability/integration/assets/AssetAsBuiltControllerAllIT.java index 2a7b1ce6c2..219a890ff0 100644 --- a/tx-backend/src/test/java/org/eclipse/tractusx/traceability/integration/assets/AssetAsBuiltControllerAllIT.java +++ b/tx-backend/src/test/java/org/eclipse/tractusx/traceability/integration/assets/AssetAsBuiltControllerAllIT.java @@ -179,4 +179,26 @@ void shouldGetPageOfAssets() throws JoseException { .body("pageSize", Matchers.is(2)); } + @Test + void shouldGetTractionBatteryCodeAsset() throws JoseException { + //GIVEN + assetsSupport.tractionBatteryCodeAssetsStored(); + + //THEN + given() + .header(oAuth2Support.jwtAuthorization(ADMIN)) + .contentType(ContentType.JSON) + .param("page", "0") + .param("size", "10") + .when() + .log().all() + .get("/api/assets/as-built") + .then() + .log().all() + .statusCode(200) + .body("page", Matchers.is(0)) + .body("pageSize", Matchers.is(10)) + .body("content[0].detailAspectModels[1]", hasEntry("type", "TRACTION_BATTERY_CODE")); + } + } diff --git a/tx-backend/src/test/java/org/eclipse/tractusx/traceability/integration/common/support/AssetTestData.java b/tx-backend/src/test/java/org/eclipse/tractusx/traceability/integration/common/support/AssetTestData.java index 201589e58a..e397698786 100644 --- a/tx-backend/src/test/java/org/eclipse/tractusx/traceability/integration/common/support/AssetTestData.java +++ b/tx-backend/src/test/java/org/eclipse/tractusx/traceability/integration/common/support/AssetTestData.java @@ -51,6 +51,16 @@ List readAndConvertAssetsForTests() { } } + List readAndConvertTractionBatteryCodeAssetsForTests() { + try { + InputStream file = AssetTestData.class.getResourceAsStream("/data/irs_assets_tractionbatterycode.json"); + JobDetailResponse response = mapper.readValue(file, JobDetailResponse.class); + return response.convertAssets(); + } catch (IOException e) { + return Collections.emptyList(); + } + } + List readAndConvertAssetsAsPlannedForTests() { try { InputStream file = AssetTestData.class.getResourceAsStream("/data/irs_assets_as_planned_v4.json"); diff --git a/tx-backend/src/test/java/org/eclipse/tractusx/traceability/integration/common/support/AssetsSupport.java b/tx-backend/src/test/java/org/eclipse/tractusx/traceability/integration/common/support/AssetsSupport.java index 8919570937..c83fe4610b 100644 --- a/tx-backend/src/test/java/org/eclipse/tractusx/traceability/integration/common/support/AssetsSupport.java +++ b/tx-backend/src/test/java/org/eclipse/tractusx/traceability/integration/common/support/AssetsSupport.java @@ -50,6 +50,10 @@ public void defaultAssetsStored() { assetRepositoryProvider.assetAsBuiltRepository().saveAll(assetRepositoryProvider.assetsConverter().readAndConvertAssetsForTests()); } + public void tractionBatteryCodeAssetsStored() { + assetRepositoryProvider.assetAsBuiltRepository().saveAll(assetRepositoryProvider.assetsConverter().readAndConvertTractionBatteryCodeAssetsForTests()); + } + public void defaultAssetsAsPlannedStored() { assetRepositoryProvider.assetAsPlannedRepository().saveAll(assetRepositoryProvider.assetsConverter().readAndConvertAssetsAsPlannedForTests()); } diff --git a/tx-backend/src/test/java/org/eclipse/tractusx/traceability/integration/common/support/DatabaseSupport.java b/tx-backend/src/test/java/org/eclipse/tractusx/traceability/integration/common/support/DatabaseSupport.java index 728839cff1..5a58641cd7 100644 --- a/tx-backend/src/test/java/org/eclipse/tractusx/traceability/integration/common/support/DatabaseSupport.java +++ b/tx-backend/src/test/java/org/eclipse/tractusx/traceability/integration/common/support/DatabaseSupport.java @@ -46,7 +46,8 @@ public class DatabaseSupport { "shell_descriptor", "bpn_storage", "investigation_notification", - "investigation" + "investigation", + "traction_battery_code_subcomponent" }); diff --git a/tx-models/src/main/java/assets/response/asbuilt/DetailAspectDataTractionBatteryCodeResponse.java b/tx-models/src/main/java/assets/response/asbuilt/DetailAspectDataTractionBatteryCodeResponse.java new file mode 100644 index 0000000000..a5d0262854 --- /dev/null +++ b/tx-models/src/main/java/assets/response/asbuilt/DetailAspectDataTractionBatteryCodeResponse.java @@ -0,0 +1,51 @@ +/******************************************************************************** + * Copyright (c) 2023 Contributors to the Eclipse Foundation + * + * See the NOTICE file(s) distributed with this work for additional + * information regarding copyright ownership. + * + * This program and the accompanying materials are made available under the + * terms of the Apache License, Version 2.0 which is available at + * https://www.apache.org/licenses/LICENSE-2.0. + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + * SPDX-License-Identifier: Apache-2.0 + ********************************************************************************/ +package assets.response.asbuilt; + +import assets.response.base.DetailAspectDataResponse; +import io.swagger.annotations.ApiModelProperty; +import jakarta.validation.constraints.Size; +import lombok.Builder; +import lombok.Getter; + +import java.util.List; + +@Builder +@Getter +public class DetailAspectDataTractionBatteryCodeResponse implements DetailAspectDataResponse { + @ApiModelProperty(example = "pack") + @Size(max = 255) + private String productType; + @ApiModelProperty(example = "X12MCPM27KLPCLX2M2382320") + @Size(max = 255) + private String tractionBatteryCode; + @ApiModelProperty + private List subcomponents; + + @Builder + @Getter + public static class DetailAspectDataTractionBatteryCodeSubcomponentResponse { + @ApiModelProperty(example = "pack") + @Size(max = 255) + private String productType; + @ApiModelProperty(example = "X12MCPM27KLPCLX2M2382320") + @Size(max = 255) + private String tractionBatteryCode; + } +} diff --git a/tx-models/src/main/java/assets/response/base/DetailAspectDataResponse.java b/tx-models/src/main/java/assets/response/base/DetailAspectDataResponse.java index b3b3ec7317..30440cf70f 100644 --- a/tx-models/src/main/java/assets/response/base/DetailAspectDataResponse.java +++ b/tx-models/src/main/java/assets/response/base/DetailAspectDataResponse.java @@ -19,11 +19,13 @@ package assets.response.base; import assets.response.asbuilt.DetailAspectDataAsBuiltResponse; +import assets.response.asbuilt.DetailAspectDataTractionBatteryCodeResponse; import assets.response.asplanned.DetailAspectDataAsPlannedResponse; import assets.response.asplanned.PartSiteInformationAsPlannedResponse; import io.swagger.v3.oas.annotations.media.Schema; -@Schema(oneOf = {DetailAspectDataAsBuiltResponse.class, DetailAspectDataAsPlannedResponse.class, PartSiteInformationAsPlannedResponse.class}) +@Schema(oneOf = {DetailAspectDataAsBuiltResponse.class, DetailAspectDataAsPlannedResponse.class, + PartSiteInformationAsPlannedResponse.class, DetailAspectDataTractionBatteryCodeResponse.class}) public interface DetailAspectDataResponse { }