mirror of
https://github.com/open-metadata/OpenMetadata.git
synced 2025-08-27 10:26:09 +00:00
Fix Test Case Assignee not cleared from incident tasks (#21314)
This commit is contained in:
parent
96d8a14c97
commit
3830e79f52
@ -2058,6 +2058,14 @@ public interface CollectionDAO {
|
||||
glossaryTermLink.getFullyQualifiedFieldType());
|
||||
}
|
||||
|
||||
default List<String> listThreadsByTaskAssignee(String taskAssigneesId) {
|
||||
String condition = String.format(" WHERE taskAssigneesIds LIKE '%%%s%%'", taskAssigneesId);
|
||||
return listThreadsByTaskAssigneesId(condition);
|
||||
}
|
||||
|
||||
@SqlQuery("SELECT json FROM thread_entity <cond>")
|
||||
List<String> listThreadsByTaskAssigneesId(@Define("cond") String cond);
|
||||
|
||||
@SqlQuery(
|
||||
"SELECT entityLink, type, taskStatus, COUNT(id) as count "
|
||||
+ "FROM ( "
|
||||
|
@ -68,6 +68,7 @@ import org.openmetadata.schema.api.teams.CreateTeam;
|
||||
import org.openmetadata.schema.api.teams.CreateTeam.TeamType;
|
||||
import org.openmetadata.schema.entity.teams.Team;
|
||||
import org.openmetadata.schema.entity.teams.TeamHierarchy;
|
||||
import org.openmetadata.schema.entity.teams.User;
|
||||
import org.openmetadata.schema.type.ChangeDescription;
|
||||
import org.openmetadata.schema.type.ChangeEvent;
|
||||
import org.openmetadata.schema.type.EntityReference;
|
||||
@ -86,6 +87,7 @@ import org.openmetadata.service.Entity;
|
||||
import org.openmetadata.service.exception.CatalogExceptionMessage;
|
||||
import org.openmetadata.service.exception.EntityNotFoundException;
|
||||
import org.openmetadata.service.jdbi3.CollectionDAO.EntityRelationshipRecord;
|
||||
import org.openmetadata.service.resources.feeds.FeedUtil;
|
||||
import org.openmetadata.service.resources.teams.TeamResource;
|
||||
import org.openmetadata.service.security.policyevaluator.SubjectContext;
|
||||
import org.openmetadata.service.util.EntityUtil;
|
||||
@ -328,6 +330,10 @@ public class TeamRepository extends EntityRepository<Team> {
|
||||
return SubjectContext.getRolesForTeams(getParentsForInheritedRoles(team));
|
||||
}
|
||||
|
||||
protected void entitySpecificCleanup(User entityInterface) {
|
||||
FeedUtil.cleanUpTaskForAssignees(entityInterface.getId(), TEAM);
|
||||
}
|
||||
|
||||
private TeamHierarchy getTeamHierarchy(Team team) {
|
||||
return new TeamHierarchy()
|
||||
.withId(team.getId())
|
||||
|
@ -1,5 +1,6 @@
|
||||
package org.openmetadata.service.jdbi3;
|
||||
|
||||
import static org.openmetadata.common.utils.CommonUtil.nullOrEmpty;
|
||||
import static org.openmetadata.schema.type.EventType.ENTITY_UPDATED;
|
||||
import static org.openmetadata.service.Entity.getEntityReferenceByName;
|
||||
|
||||
@ -334,8 +335,9 @@ public class TestCaseResolutionStatusRepository
|
||||
|
||||
private void patchTaskAssignee(Thread originalTask, EntityReference newAssignee, String user) {
|
||||
Thread updatedTask = JsonUtils.deepCopy(originalTask, Thread.class);
|
||||
updatedTask.setTask(
|
||||
updatedTask.getTask().withAssignees(Collections.singletonList(newAssignee)));
|
||||
List<EntityReference> updatedAssignees =
|
||||
nullOrEmpty(newAssignee) ? new ArrayList<>() : Collections.singletonList(newAssignee);
|
||||
updatedTask.setTask(updatedTask.getTask().withAssignees(updatedAssignees));
|
||||
|
||||
JsonPatch patch = JsonUtils.getJsonPatch(originalTask, updatedTask);
|
||||
|
||||
|
@ -69,6 +69,7 @@ import org.openmetadata.service.exception.BadRequestException;
|
||||
import org.openmetadata.service.exception.CatalogExceptionMessage;
|
||||
import org.openmetadata.service.exception.EntityNotFoundException;
|
||||
import org.openmetadata.service.jdbi3.CollectionDAO.EntityRelationshipRecord;
|
||||
import org.openmetadata.service.resources.feeds.FeedUtil;
|
||||
import org.openmetadata.service.resources.teams.UserResource;
|
||||
import org.openmetadata.service.secrets.SecretsManager;
|
||||
import org.openmetadata.service.secrets.SecretsManagerFactory;
|
||||
@ -328,6 +329,10 @@ public class UserRepository extends EntityRepository<User> {
|
||||
}
|
||||
}
|
||||
|
||||
protected void entitySpecificCleanup(User entityInterface) {
|
||||
FeedUtil.cleanUpTaskForAssignees(entityInterface.getId(), USER);
|
||||
}
|
||||
|
||||
/* Validate if the user is already part of the given team */
|
||||
public void validateTeamAddition(UUID userId, UUID teamId) {
|
||||
User user = find(userId, NON_DELETED);
|
||||
|
@ -13,8 +13,13 @@
|
||||
|
||||
package org.openmetadata.service.resources.feeds;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
import org.openmetadata.schema.entity.feed.Thread;
|
||||
import org.openmetadata.schema.type.EntityReference;
|
||||
import org.openmetadata.schema.type.Post;
|
||||
import org.openmetadata.service.Entity;
|
||||
import org.openmetadata.service.util.JsonUtils;
|
||||
|
||||
public final class FeedUtil {
|
||||
|
||||
@ -25,4 +30,19 @@ public final class FeedUtil {
|
||||
thread.getPosts().add(post);
|
||||
thread.withPostsCount(thread.getPosts().size());
|
||||
}
|
||||
|
||||
public static void cleanUpTaskForAssignees(UUID entityId, String entityType) {
|
||||
List<String> userTasks =
|
||||
Entity.getCollectionDAO().feedDAO().listThreadsByTaskAssignee(entityId.toString());
|
||||
List<Thread> threads = JsonUtils.readObjects(userTasks, Thread.class);
|
||||
for (Thread thread : threads) {
|
||||
List<EntityReference> assignees = thread.getTask().getAssignees();
|
||||
assignees.removeIf(
|
||||
entityReference ->
|
||||
entityReference.getId().equals(entityId)
|
||||
&& entityReference.getType().equals(entityType));
|
||||
thread.getTask().setAssignees(assignees);
|
||||
Entity.getCollectionDAO().feedDAO().update(thread.getId(), JsonUtils.pojoToJson(thread));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user