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());
|
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(
|
@SqlQuery(
|
||||||
"SELECT entityLink, type, taskStatus, COUNT(id) as count "
|
"SELECT entityLink, type, taskStatus, COUNT(id) as count "
|
||||||
+ "FROM ( "
|
+ "FROM ( "
|
||||||
|
@ -68,6 +68,7 @@ import org.openmetadata.schema.api.teams.CreateTeam;
|
|||||||
import org.openmetadata.schema.api.teams.CreateTeam.TeamType;
|
import org.openmetadata.schema.api.teams.CreateTeam.TeamType;
|
||||||
import org.openmetadata.schema.entity.teams.Team;
|
import org.openmetadata.schema.entity.teams.Team;
|
||||||
import org.openmetadata.schema.entity.teams.TeamHierarchy;
|
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.ChangeDescription;
|
||||||
import org.openmetadata.schema.type.ChangeEvent;
|
import org.openmetadata.schema.type.ChangeEvent;
|
||||||
import org.openmetadata.schema.type.EntityReference;
|
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.CatalogExceptionMessage;
|
||||||
import org.openmetadata.service.exception.EntityNotFoundException;
|
import org.openmetadata.service.exception.EntityNotFoundException;
|
||||||
import org.openmetadata.service.jdbi3.CollectionDAO.EntityRelationshipRecord;
|
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.resources.teams.TeamResource;
|
||||||
import org.openmetadata.service.security.policyevaluator.SubjectContext;
|
import org.openmetadata.service.security.policyevaluator.SubjectContext;
|
||||||
import org.openmetadata.service.util.EntityUtil;
|
import org.openmetadata.service.util.EntityUtil;
|
||||||
@ -328,6 +330,10 @@ public class TeamRepository extends EntityRepository<Team> {
|
|||||||
return SubjectContext.getRolesForTeams(getParentsForInheritedRoles(team));
|
return SubjectContext.getRolesForTeams(getParentsForInheritedRoles(team));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected void entitySpecificCleanup(User entityInterface) {
|
||||||
|
FeedUtil.cleanUpTaskForAssignees(entityInterface.getId(), TEAM);
|
||||||
|
}
|
||||||
|
|
||||||
private TeamHierarchy getTeamHierarchy(Team team) {
|
private TeamHierarchy getTeamHierarchy(Team team) {
|
||||||
return new TeamHierarchy()
|
return new TeamHierarchy()
|
||||||
.withId(team.getId())
|
.withId(team.getId())
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package org.openmetadata.service.jdbi3;
|
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.schema.type.EventType.ENTITY_UPDATED;
|
||||||
import static org.openmetadata.service.Entity.getEntityReferenceByName;
|
import static org.openmetadata.service.Entity.getEntityReferenceByName;
|
||||||
|
|
||||||
@ -334,8 +335,9 @@ public class TestCaseResolutionStatusRepository
|
|||||||
|
|
||||||
private void patchTaskAssignee(Thread originalTask, EntityReference newAssignee, String user) {
|
private void patchTaskAssignee(Thread originalTask, EntityReference newAssignee, String user) {
|
||||||
Thread updatedTask = JsonUtils.deepCopy(originalTask, Thread.class);
|
Thread updatedTask = JsonUtils.deepCopy(originalTask, Thread.class);
|
||||||
updatedTask.setTask(
|
List<EntityReference> updatedAssignees =
|
||||||
updatedTask.getTask().withAssignees(Collections.singletonList(newAssignee)));
|
nullOrEmpty(newAssignee) ? new ArrayList<>() : Collections.singletonList(newAssignee);
|
||||||
|
updatedTask.setTask(updatedTask.getTask().withAssignees(updatedAssignees));
|
||||||
|
|
||||||
JsonPatch patch = JsonUtils.getJsonPatch(originalTask, updatedTask);
|
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.CatalogExceptionMessage;
|
||||||
import org.openmetadata.service.exception.EntityNotFoundException;
|
import org.openmetadata.service.exception.EntityNotFoundException;
|
||||||
import org.openmetadata.service.jdbi3.CollectionDAO.EntityRelationshipRecord;
|
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.resources.teams.UserResource;
|
||||||
import org.openmetadata.service.secrets.SecretsManager;
|
import org.openmetadata.service.secrets.SecretsManager;
|
||||||
import org.openmetadata.service.secrets.SecretsManagerFactory;
|
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 */
|
/* Validate if the user is already part of the given team */
|
||||||
public void validateTeamAddition(UUID userId, UUID teamId) {
|
public void validateTeamAddition(UUID userId, UUID teamId) {
|
||||||
User user = find(userId, NON_DELETED);
|
User user = find(userId, NON_DELETED);
|
||||||
|
@ -13,8 +13,13 @@
|
|||||||
|
|
||||||
package org.openmetadata.service.resources.feeds;
|
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.entity.feed.Thread;
|
||||||
|
import org.openmetadata.schema.type.EntityReference;
|
||||||
import org.openmetadata.schema.type.Post;
|
import org.openmetadata.schema.type.Post;
|
||||||
|
import org.openmetadata.service.Entity;
|
||||||
|
import org.openmetadata.service.util.JsonUtils;
|
||||||
|
|
||||||
public final class FeedUtil {
|
public final class FeedUtil {
|
||||||
|
|
||||||
@ -25,4 +30,19 @@ public final class FeedUtil {
|
|||||||
thread.getPosts().add(post);
|
thread.getPosts().add(post);
|
||||||
thread.withPostsCount(thread.getPosts().size());
|
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