Skip to content

Linked Items BE: Add support for linking and unlinking items using GraphQL

In order to add and remove linked items using GraphQL we need to add the following functionality:

  1. Linking work items
  • New service to create the links WorkItems::RelatedWorkItemLinks::CreateService that inherits from IssuableLinks::CreateService and accepts multiple work item records as a param. The service must authenticate items with :admin_work_item_link (equivalent to admin_issue_link).
  • New fine-grained mutation WorkItemAddLinkedItems that accepts the following input:
    • id - global ID of the work item
    • workItemsIds - array containing global IDs of the work items to be added
    • linkType - the type of link, can be 'RELATED', 'BLOCKED_BY' or 'BLOCKS'
  • This mutation must validate that the FF linked_work_items is enabled before linking any items. Also, it should check that a licensed feature blocked_work_items is available (defined as STARTER) if the link type is 'BLOCKED_BY' or 'BLOCKS'.
Example mutation
mutation {
  workItemUpdateLinkedItems(
    input: {
      id: "gid://gitlab/WorkItem/1830",
      workItemsIds: ["gid://gitlab/WorkItem/1834", "gid://gitlab/WorkItem/1835"],
      linkType: RELATED
    }
  ) {
    workItem { id }
    errors
  }
}
  1. Unlinking work items
  • Similar to adding a link, we need a new WorkItems::RelatedWorkItemLinks::DestroyService to support removing items. This can inherit from IssuableLinks::DestroyService if we support removing one link at a time. In order to support removing multiple links at the time I opted for a different approach, see !124328 (comment 1453225643)
  • New fine-grained mutation WorkItemRemoveLinkedItems that accepts the following input:
    • id - global ID of the work item
    • workItemsIds - array containing global IDs of the work items to be removed
Example mutation
mutation {
  workItemRemoveLinkedItems(
    input: {
      id: "gid://gitlab/WorkItem/1830",
      workItemsIds: ["gid://gitlab/WorkItem/1834", "gid://gitlab/WorkItem/1835"]
    }
  ) {
    workItem { id }
    errors
  }
}
Edited by Eugenia Grieff