|
|
@ -215,17 +215,36 @@ func (r *itemRepository) Fetch(ctx context.Context, filter models.ItemFilter) ([ |
|
|
|
} |
|
|
|
|
|
|
|
res = genutils.RetainInPlace(res, func(item entities.Item) bool { |
|
|
|
good := false |
|
|
|
|
|
|
|
for _, tag := range filter.Tags { |
|
|
|
if item.HasTag(tag) { |
|
|
|
return true |
|
|
|
} else if item.RequirementID != nil && |
|
|
|
(genutils.Contains(requirementTagMap[*item.RequirementID], tag) || |
|
|
|
genutils.Contains(projectTagMap[*item.ProjectID], tag)) { |
|
|
|
return true |
|
|
|
if strings.HasPrefix(tag, "!") { |
|
|
|
tag = tag[1:] |
|
|
|
|
|
|
|
if !item.HasTag(tag) { |
|
|
|
if item.RequirementID != nil { |
|
|
|
if !genutils.Contains(requirementTagMap[*item.RequirementID], tag) && |
|
|
|
!genutils.Contains(projectTagMap[*item.ProjectID], tag) { |
|
|
|
return false |
|
|
|
} |
|
|
|
} else { |
|
|
|
return false |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
good = true |
|
|
|
} else { |
|
|
|
if item.HasTag(tag) { |
|
|
|
good = true |
|
|
|
} else if item.RequirementID != nil && |
|
|
|
(genutils.Contains(requirementTagMap[*item.RequirementID], tag) || |
|
|
|
genutils.Contains(projectTagMap[*item.ProjectID], tag)) { |
|
|
|
good = true |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
return false |
|
|
|
return good |
|
|
|
}) |
|
|
|
} |
|
|
|
|
|
|
|