Add support for multiple timeboxes across the product
This is the first step in implementing multiple milestones for Issues, Merge Requests and Epics (#5135 (closed))
To keep changes to a minimum, I think we can start by preparing our backend storage to support multiple milestones while keeping everything else working the same way.
The idea is to create separate tables issue_milestones
, merge_request_milestones
, and epic_milestones
and then reading / writing to that instead of milestone_id
. Old data would have to be migrated too.
We would still support just 1 milestone for now and then we would need something like:
def milestone
milestones.first
end
def milestone=(milestone)
self.milestones = [milestone]
end
Though in reality it's not that simple and a lot of things may break. Here are some things mentioned previously that need to be considered:
- API
- Webhooks
- Quick actions
- Filters
- Epic milestone date calculation
- Any code that has
where(milestone_id: ...)
would break and would need to aJOIN
now.
Edited by Gabe Weaver