From ba230f0536053708b98fc44cbfa8049ec883dde1 Mon Sep 17 00:00:00 2001 From: Avgustin Marinov Date: Wed, 16 Oct 2024 16:26:14 +0300 Subject: [PATCH] Deprecate tagging (REST) with request bodies (in favour of just ids) (#1884) Signed-off-by: Marinov Avgustin --- ...gmtAssignedDistributionSetRequestBody.java | 1 + .../tag/MgmtAssignedTargetRequestBody.java | 1 + .../api/MgmtDistributionSetTagRestApi.java | 118 ++++++++++++------ .../MgmtDistributionSetTagResource.java | 27 ++-- .../MgmtDistributionSetTagResourceTest.java | 2 +- 5 files changed, 101 insertions(+), 48 deletions(-) diff --git a/hawkbit-rest/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/tag/MgmtAssignedDistributionSetRequestBody.java b/hawkbit-rest/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/tag/MgmtAssignedDistributionSetRequestBody.java index 6b0d4f09b..acbf62e63 100644 --- a/hawkbit-rest/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/tag/MgmtAssignedDistributionSetRequestBody.java +++ b/hawkbit-rest/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/tag/MgmtAssignedDistributionSetRequestBody.java @@ -26,6 +26,7 @@ import lombok.experimental.Accessors; @ToString @JsonInclude(Include.NON_NULL) @JsonIgnoreProperties(ignoreUnknown = true) +@Deprecated(forRemoval = true) public class MgmtAssignedDistributionSetRequestBody { @JsonProperty(value = "id", required = true) diff --git a/hawkbit-rest/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/tag/MgmtAssignedTargetRequestBody.java b/hawkbit-rest/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/tag/MgmtAssignedTargetRequestBody.java index 4fce8d360..8637a5cbe 100644 --- a/hawkbit-rest/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/tag/MgmtAssignedTargetRequestBody.java +++ b/hawkbit-rest/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/tag/MgmtAssignedTargetRequestBody.java @@ -26,6 +26,7 @@ import lombok.experimental.Accessors; @ToString @JsonInclude(Include.NON_NULL) @JsonIgnoreProperties(ignoreUnknown = true) +@Deprecated(forRemoval = true) public class MgmtAssignedTargetRequestBody { @JsonProperty(required = true) diff --git a/hawkbit-rest/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtDistributionSetTagRestApi.java b/hawkbit-rest/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtDistributionSetTagRestApi.java index 45a7fb3d6..62c56dd91 100644 --- a/hawkbit-rest/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtDistributionSetTagRestApi.java +++ b/hawkbit-rest/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtDistributionSetTagRestApi.java @@ -340,10 +340,8 @@ public interface MgmtDistributionSetTagRestApi { /** * Handles the POST request to assign distribution sets to the given tag id. * - * @param distributionsetTagId - * the ID of the distribution set tag to retrieve - * @param assignedDSRequestBodies - * list of distribution sets ids to be assigned + * @param distributionsetTagId the ID of the distribution set tag to retrieve + * @param distributionsetId the distribution sets ids to be assigned * * @return the list of assigned distribution set. */ @@ -376,54 +374,51 @@ public interface MgmtDistributionSetTagRestApi { }) @PostMapping(value = MgmtRestConstants.DISTRIBUTIONSET_TAG_V1_REQUEST_MAPPING + MgmtRestConstants.DISTRIBUTIONSET_TAG_DISTRIBUTIONSETS_REQUEST_MAPPING + "/{distributionsetId}") - ResponseEntity assignTag( + ResponseEntity assignDistributionSet( @PathVariable("distributionsetTagId") Long distributionsetTagId, @PathVariable("distributionsetId") Long distributionsetId); /** * Handles the POST request to assign distribution sets to the given tag id. * - * @param distributionsetTagId - * the ID of the distribution set tag to retrieve - * @param assignedDSRequestBodies - * list of distribution sets ids to be assigned - * + * @param distributionsetTagId the ID of the distribution set tag to retrieve + * @param distributionsetIds list of distribution sets ids to be assigned * @return the list of assigned distribution set. */ @Operation(summary = "Assign distribution sets to the given tag id", description = "Handles the POST request of distribution assignment. Already assigned distribution will " + "be ignored.") @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "Successfully retrieved"), - @ApiResponse(responseCode = "400", description = "Bad Request - e.g. invalid parameters", - content = @Content(mediaType = "application/json", schema = @Schema(implementation = ExceptionInfo.class))), - @ApiResponse(responseCode = "401", description = "The request requires user authentication.", - content = @Content(mediaType = "application/json", schema = @Schema(hidden = true))), - @ApiResponse(responseCode = "403", - description = "Insufficient permissions, entity is not allowed to be changed (i.e. read-only) or " + - "data volume restriction applies.", - content = @Content(mediaType = "application/json", schema = @Schema(hidden = true))), - @ApiResponse(responseCode = "405", description = "The http request method is not allowed on the resource.", - content = @Content(mediaType = "application/json", schema = @Schema(hidden = true))), - @ApiResponse(responseCode = "406", description = "In case accept header is specified and not application/json.", - content = @Content(mediaType = "application/json", schema = @Schema(hidden = true))), - @ApiResponse(responseCode = "409", description = "E.g. in case an entity is created or modified by another " + - "user in another request at the same time. You may retry your modification request.", - content = @Content(mediaType = "application/json", schema = @Schema(hidden = true))), - @ApiResponse(responseCode = "415", description = "The request was attempt with a media-type which is not " + - "supported by the server for this resource.", - content = @Content(mediaType = "application/json", schema = @Schema(hidden = true))), - @ApiResponse(responseCode = "429", description = "Too many requests. The server will refuse further attempts " + - "and the client has to wait another second.", - content = @Content(mediaType = "application/json", schema = @Schema(hidden = true))) + @ApiResponse(responseCode = "200", description = "Successfully retrieved"), + @ApiResponse(responseCode = "400", description = "Bad Request - e.g. invalid parameters", + content = @Content(mediaType = "application/json", schema = @Schema(implementation = ExceptionInfo.class))), + @ApiResponse(responseCode = "401", description = "The request requires user authentication.", + content = @Content(mediaType = "application/json", schema = @Schema(hidden = true))), + @ApiResponse(responseCode = "403", + description = "Insufficient permissions, entity is not allowed to be changed (i.e. read-only) or " + + "data volume restriction applies.", + content = @Content(mediaType = "application/json", schema = @Schema(hidden = true))), + @ApiResponse(responseCode = "405", description = "The http request method is not allowed on the resource.", + content = @Content(mediaType = "application/json", schema = @Schema(hidden = true))), + @ApiResponse(responseCode = "406", description = "In case accept header is specified and not application/json.", + content = @Content(mediaType = "application/json", schema = @Schema(hidden = true))), + @ApiResponse(responseCode = "409", description = "E.g. in case an entity is created or modified by another " + + "user in another request at the same time. You may retry your modification request.", + content = @Content(mediaType = "application/json", schema = @Schema(hidden = true))), + @ApiResponse(responseCode = "415", description = "The request was attempt with a media-type which is not " + + "supported by the server for this resource.", + content = @Content(mediaType = "application/json", schema = @Schema(hidden = true))), + @ApiResponse(responseCode = "429", description = "Too many requests. The server will refuse further attempts " + + "and the client has to wait another second.", + content = @Content(mediaType = "application/json", schema = @Schema(hidden = true))) }) - @PostMapping(value = MgmtRestConstants.DISTRIBUTIONSET_TAG_V1_REQUEST_MAPPING + @PutMapping(value = MgmtRestConstants.DISTRIBUTIONSET_TAG_V1_REQUEST_MAPPING + MgmtRestConstants.DISTRIBUTIONSET_TAG_DISTRIBUTIONSETS_REQUEST_MAPPING, consumes = { - MediaTypes.HAL_JSON_VALUE, MediaType.APPLICATION_JSON_VALUE }, produces = { - MediaTypes.HAL_JSON_VALUE, MediaType.APPLICATION_JSON_VALUE }) - ResponseEntity> assignTag( + MediaTypes.HAL_JSON_VALUE, MediaType.APPLICATION_JSON_VALUE }, produces = { + MediaTypes.HAL_JSON_VALUE, MediaType.APPLICATION_JSON_VALUE }) + ResponseEntity> assignDistributionSets( @PathVariable("distributionsetTagId") Long distributionsetTagId, - List assignedDSRequestBodies); + List distributionsetIds); /** * Handles the DELETE request to unassign one distribution set from the given tag id. @@ -456,7 +451,7 @@ public interface MgmtDistributionSetTagRestApi { }) @DeleteMapping(value = MgmtRestConstants.DISTRIBUTIONSET_TAG_V1_REQUEST_MAPPING + MgmtRestConstants.DISTRIBUTIONSET_TAG_DISTRIBUTIONSETS_REQUEST_MAPPING + "/{distributionsetId}") - ResponseEntity unassignTag( + ResponseEntity unassignDistributionSet( @PathVariable("distributionsetTagId") Long distributionsetTagId, @PathVariable("distributionsetId") Long distributionsetId); @@ -491,7 +486,7 @@ public interface MgmtDistributionSetTagRestApi { }) @DeleteMapping(value = MgmtRestConstants.DISTRIBUTIONSET_TAG_V1_REQUEST_MAPPING + MgmtRestConstants.DISTRIBUTIONSET_TAG_DISTRIBUTIONSETS_REQUEST_MAPPING) - ResponseEntity unassignTag( + ResponseEntity unassignDistributionSets( @PathVariable("distributionsetTagId") Long distributionsetTagId, List distributionsetId); @@ -536,7 +531,52 @@ public interface MgmtDistributionSetTagRestApi { }) @PostMapping(value = MgmtRestConstants.DISTRIBUTIONSET_TAG_V1_REQUEST_MAPPING + MgmtRestConstants.DISTRIBUTIONSET_TAG_DISTRIBUTIONSETS_REQUEST_MAPPING + "/toggleTagAssignment") + @Deprecated(forRemoval = true) ResponseEntity toggleTagAssignment( @PathVariable("distributionsetTagId") Long distributionsetTagId, List assignedDSRequestBodies); + + /** + * Handles the POST request to assign distribution sets to the given tag id. + * + * @deprecated since 0.6.0 in favor or assign by ds ids + * @param distributionsetTagId the ID of the distribution set tag to retrieve + * @param assignedDSRequestBodies list of distribution sets ids to be assigned + * @return the list of assigned distribution set. + */ + @Operation(summary = "[DEPRECATED] Assign distribution sets to the given tag id", + description = "Handles the POST request of distribution assignment. Already assigned distribution will " + + "be ignored.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "Successfully retrieved"), + @ApiResponse(responseCode = "400", description = "Bad Request - e.g. invalid parameters", + content = @Content(mediaType = "application/json", schema = @Schema(implementation = ExceptionInfo.class))), + @ApiResponse(responseCode = "401", description = "The request requires user authentication.", + content = @Content(mediaType = "application/json", schema = @Schema(hidden = true))), + @ApiResponse(responseCode = "403", + description = "Insufficient permissions, entity is not allowed to be changed (i.e. read-only) or " + + "data volume restriction applies.", + content = @Content(mediaType = "application/json", schema = @Schema(hidden = true))), + @ApiResponse(responseCode = "405", description = "The http request method is not allowed on the resource.", + content = @Content(mediaType = "application/json", schema = @Schema(hidden = true))), + @ApiResponse(responseCode = "406", description = "In case accept header is specified and not application/json.", + content = @Content(mediaType = "application/json", schema = @Schema(hidden = true))), + @ApiResponse(responseCode = "409", description = "E.g. in case an entity is created or modified by another " + + "user in another request at the same time. You may retry your modification request.", + content = @Content(mediaType = "application/json", schema = @Schema(hidden = true))), + @ApiResponse(responseCode = "415", description = "The request was attempt with a media-type which is not " + + "supported by the server for this resource.", + content = @Content(mediaType = "application/json", schema = @Schema(hidden = true))), + @ApiResponse(responseCode = "429", description = "Too many requests. The server will refuse further attempts " + + "and the client has to wait another second.", + content = @Content(mediaType = "application/json", schema = @Schema(hidden = true))) + }) + @PostMapping(value = MgmtRestConstants.DISTRIBUTIONSET_TAG_V1_REQUEST_MAPPING + + MgmtRestConstants.DISTRIBUTIONSET_TAG_DISTRIBUTIONSETS_REQUEST_MAPPING, consumes = { + MediaTypes.HAL_JSON_VALUE, MediaType.APPLICATION_JSON_VALUE }, produces = { + MediaTypes.HAL_JSON_VALUE, MediaType.APPLICATION_JSON_VALUE }) + @Deprecated(forRemoval = true) + ResponseEntity> assignDistributionSetsByRequestBody( + @PathVariable("distributionsetTagId") Long distributionsetTagId, + List assignedDSRequestBodies); } \ No newline at end of file diff --git a/hawkbit-rest/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTagResource.java b/hawkbit-rest/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTagResource.java index 0e086b284..d83d27206 100644 --- a/hawkbit-rest/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTagResource.java +++ b/hawkbit-rest/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTagResource.java @@ -163,7 +163,7 @@ public class MgmtDistributionSetTagResource implements MgmtDistributionSetTagRes } @Override - public ResponseEntity assignTag( + public ResponseEntity assignDistributionSet( @PathVariable("distributionsetTagId") final Long distributionsetTagId, @PathVariable("distributionsetId") final Long distributionsetId) { log.debug("Assign ds {} for ds tag {}", distributionsetId, distributionsetTagId); @@ -172,18 +172,18 @@ public class MgmtDistributionSetTagResource implements MgmtDistributionSetTagRes } @Override - public ResponseEntity> assignTag( - @PathVariable("distributionsetTagId") final Long distributionsetTagId, - @RequestBody final List assignedDSRequestBodies) { - log.debug("Assign DistributionSet {} for ds tag {}", assignedDSRequestBodies.size(), distributionsetTagId); + public ResponseEntity> assignDistributionSets( + final Long distributionsetTagId, + final List distributionsetIds) { + log.debug("Assign DistributionSet {} for ds tag {}", distributionsetIds.size(), distributionsetTagId); final List assignedDs = this.distributionSetManagement - .assignTag(findDistributionSetIds(assignedDSRequestBodies), distributionsetTagId); + .assignTag(distributionsetIds, distributionsetTagId); log.debug("Assigned DistributionSet {}", assignedDs.size()); return ResponseEntity.ok(MgmtDistributionSetMapper.toResponseDistributionSets(assignedDs)); } @Override - public ResponseEntity unassignTag( + public ResponseEntity unassignDistributionSet( @PathVariable("distributionsetTagId") final Long distributionsetTagId, @PathVariable("distributionsetId") final Long distributionsetId) { log.debug("Unassign ds {} for ds tag {}", distributionsetId, distributionsetTagId); @@ -192,7 +192,7 @@ public class MgmtDistributionSetTagResource implements MgmtDistributionSetTagRes } @Override - public ResponseEntity unassignTag( + public ResponseEntity unassignDistributionSets( @PathVariable("distributionsetTagId") final Long distributionsetTagId, @RequestBody final List distributionsetIds) { log.debug("Unassign DistributionSet {} for ds tag {}", distributionsetIds.size(), distributionsetTagId); @@ -236,4 +236,15 @@ public class MgmtDistributionSetTagResource implements MgmtDistributionSetTagRes return ResponseEntity.ok(tagAssigmentResultRest); } + + @Override + public ResponseEntity> assignDistributionSetsByRequestBody( + @PathVariable("distributionsetTagId") final Long distributionsetTagId, + @RequestBody final List assignedDSRequestBodies) { + log.debug("Assign DistributionSet {} for ds tag {}", assignedDSRequestBodies.size(), distributionsetTagId); + final List assignedDs = this.distributionSetManagement + .assignTag(findDistributionSetIds(assignedDSRequestBodies), distributionsetTagId); + log.debug("Assigned DistributionSet {}", assignedDs.size()); + return ResponseEntity.ok(MgmtDistributionSetMapper.toResponseDistributionSets(assignedDs)); + } } diff --git a/hawkbit-rest/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTagResourceTest.java b/hawkbit-rest/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTagResourceTest.java index 91333f579..9aed80268 100644 --- a/hawkbit-rest/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTagResourceTest.java +++ b/hawkbit-rest/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTagResourceTest.java @@ -345,7 +345,7 @@ public class MgmtDistributionSetTagResourceTest extends AbstractManagementApiInt @ExpectEvents({ @Expect(type = DistributionSetTagCreatedEvent.class, count = 1), @Expect(type = DistributionSetCreatedEvent.class, count = 2), @Expect(type = DistributionSetUpdatedEvent.class, count = 2) }) - public void assignTag() throws Exception { + public void assignDistributionSets() throws Exception { final DistributionSetTag tag = testdataFactory.createDistributionSetTags(1).get(0); final int setsAssigned = 2; final List sets = testdataFactory.createDistributionSetsWithoutModules(setsAssigned);