From 682c9fc51d42b812c4ea77967e43477c6b062d06 Mon Sep 17 00:00:00 2001 From: Jyoti Wadhwani Date: Thu, 21 Oct 2021 16:36:39 -0700 Subject: [PATCH] add a restli delete method for subresource to support soft deletion of aspect --- .../restli/BaseVersionedAspectResource.java | 17 +++++++++++++++++ .../restli/BaseVersionedAspectResourceTest.java | 10 ++++++++++ 2 files changed, 27 insertions(+) diff --git a/restli-resources/src/main/java/com/linkedin/metadata/restli/BaseVersionedAspectResource.java b/restli-resources/src/main/java/com/linkedin/metadata/restli/BaseVersionedAspectResource.java index 371788843..4f7ebaae6 100644 --- a/restli-resources/src/main/java/com/linkedin/metadata/restli/BaseVersionedAspectResource.java +++ b/restli-resources/src/main/java/com/linkedin/metadata/restli/BaseVersionedAspectResource.java @@ -17,6 +17,7 @@ import com.linkedin.restli.server.CreateResponse; import com.linkedin.restli.server.PagingContext; import com.linkedin.restli.server.PathKeys; +import com.linkedin.restli.server.UpdateResponse; import com.linkedin.restli.server.annotations.PagingContextParam; import com.linkedin.restli.server.annotations.RestMethod; import com.linkedin.restli.server.annotations.ReturnEntity; @@ -111,6 +112,22 @@ public Task create(@Nonnull ASPECT aspect) { }); } + /** + * Soft deletes the latest version of aspect if it exists. + * + * @return {@link UpdateResponse} indicating the status code of the response. + */ + @RestMethod.Delete + @Nonnull + public Task delete() { + return RestliUtils.toTask(() -> { + final URN urn = getUrn(getContext().getPathKeys()); + final AuditStamp auditStamp = getAuditor().requestAuditStamp(getContext().getRawRequestContext()); + getLocalDAO().delete(urn, this._aspectClass, auditStamp); + return new UpdateResponse(HttpStatus.S_200_OK); + }); + } + /** * Similar to {@link #create(RecordTemplate)} but uses a create lambda instead. */ diff --git a/restli-resources/src/test/java/com/linkedin/metadata/restli/BaseVersionedAspectResourceTest.java b/restli-resources/src/test/java/com/linkedin/metadata/restli/BaseVersionedAspectResourceTest.java index 418590dcc..e3bfd9ef3 100644 --- a/restli-resources/src/test/java/com/linkedin/metadata/restli/BaseVersionedAspectResourceTest.java +++ b/restli-resources/src/test/java/com/linkedin/metadata/restli/BaseVersionedAspectResourceTest.java @@ -112,6 +112,16 @@ public void testCreate() { verifyNoMoreInteractions(_mockLocalDAO); } + @Test + public void testSoftDelete() { + + runAndWait(_resource.delete()); + + // this should test that delete method of DAO is being called once + verify(_mockLocalDAO, times(1)).delete(eq(ENTITY_URN), eq(AspectFoo.class), any(AuditStamp.class)); + verifyNoMoreInteractions(_mockLocalDAO); + } + @Test public void testCreateViaLambda() { AspectFoo foo = new AspectFoo().setValue("foo");