diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/EntityRepository.java b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/EntityRepository.java index a0298045422..9326ff52490 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/EntityRepository.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/EntityRepository.java @@ -2461,7 +2461,7 @@ public abstract class EntityRepository { updated.setExperts(updatedExperts); } - private void updateReviewers() { + protected void updateReviewers() { if (!supportsReviewers) { return; } diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/GlossaryTermRepository.java b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/GlossaryTermRepository.java index 31dc4ab6d78..33c715fb0c4 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/GlossaryTermRepository.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/GlossaryTermRepository.java @@ -90,6 +90,7 @@ import org.openmetadata.service.util.EntityUtil; import org.openmetadata.service.util.EntityUtil.Fields; import org.openmetadata.service.util.FullyQualifiedName; import org.openmetadata.service.util.JsonUtils; +import org.openmetadata.service.util.RestUtil; import org.openmetadata.service.util.WebsocketNotificationHandler; @Slf4j @@ -777,6 +778,33 @@ public class GlossaryTermRepository extends EntityRepository { super(original, updated, operation); } + @Override + public void updateReviewers() { + super.updateReviewers(); + + // adding the reviewer should add the person as assignee to the task + if (updated.getStatus() == Status.DRAFT) { + + EntityLink about = new EntityLink(GLOSSARY_TERM, updated.getFullyQualifiedName()); + FeedRepository feedRepository = Entity.getFeedRepository(); + Thread originalTask = feedRepository.getTask(about, TaskType.RequestApproval); + + if (TaskStatus.Open.equals(originalTask.getTask().getStatus())) { + + Thread updatedTask = JsonUtils.deepCopy(originalTask, Thread.class); + updatedTask.getTask().withAssignees(updated.getReviewers()); + JsonPatch patch = JsonUtils.getJsonPatch(originalTask, updatedTask); + + RestUtil.PatchResponse thread = + feedRepository.patchThread( + null, originalTask.getId(), updatedTask.getUpdatedBy(), patch); + + // Send WebSocket Notification + WebsocketNotificationHandler.handleTaskNotification(thread.entity()); + } + } + } + @Transaction @Override public void entitySpecificUpdate() { diff --git a/openmetadata-service/src/test/java/org/openmetadata/service/resources/EntityResourceTest.java b/openmetadata-service/src/test/java/org/openmetadata/service/resources/EntityResourceTest.java index 131aec880ad..dc380e20e2b 100644 --- a/openmetadata-service/src/test/java/org/openmetadata/service/resources/EntityResourceTest.java +++ b/openmetadata-service/src/test/java/org/openmetadata/service/resources/EntityResourceTest.java @@ -283,6 +283,7 @@ public abstract class EntityResourceTest assignee.getId().equals(DATA_CONSUMER_REF.getId())), + "The list of assignees does not contain the expected ID: " + DATA_CONSUMER_REF.getId()); } @Test diff --git a/openmetadata-service/src/test/java/org/openmetadata/service/resources/teams/UserResourceTest.java b/openmetadata-service/src/test/java/org/openmetadata/service/resources/teams/UserResourceTest.java index 90476c245d7..417aaa5a6ee 100644 --- a/openmetadata-service/src/test/java/org/openmetadata/service/resources/teams/UserResourceTest.java +++ b/openmetadata-service/src/test/java/org/openmetadata/service/resources/teams/UserResourceTest.java @@ -170,6 +170,7 @@ public class UserResourceTest extends EntityResourceTest { createRequest("user-data-consumer", "", "", null) .withRoles(List.of(DATA_CONSUMER_ROLE.getId())); DATA_CONSUMER = createEntity(create, ADMIN_AUTH_HEADERS); + DATA_CONSUMER_REF = DATA_CONSUMER.getEntityReference(); // USER_TEAM21 is part of TEAM21 create = createRequest(test, 2).withTeams(List.of(TEAM21.getId()));