Skip to content

Bug Report: Rundowns are not correctly scoped under playlists #1686

@justandras

Description

@justandras

About me

This bug report is posted on behalf of CBC

Observed Behavior

Internal rundownIds are generated from the studioId and the rundownExternalId which doesn't allow you to create a rundown in another playlist with the same rundownExternalId. playlistExternalId is not considered.

This overrides the content of an already existing rundown with a different playlistExternalId.

export function getRundownId(studioId: StudioId, rundownExternalId: string): RundownId {
	if (!studioId) throw new Error('getRundownId: studio not set!')
	if (!rundownExternalId) throw new Error('getRundownId: rundownExternalId must be set!')
	return protectString<RundownId>(getHash(`${studioId}_${rundownExternalId}`))
}

On other content levels the Id's are based on the parent's Id. (eg.: allowing two rundowns to both have a segment with the segmentExternalId of 'Intro'):

export function getSegmentId(rundownId: RundownId, segmentExternalId: string): SegmentId {
	if (!rundownId) throw new Error('getSegmentId: rundownId must be set!')
	if (!segmentExternalId) throw new Error('getSegmentId: segmentExternalId must be set!')
	return protectString<SegmentId>(getHash(`${rundownId}_segment_${segmentExternalId}`))
}
export function getPartId(rundownId: RundownId, partExternalId: string): PartId {
	if (!rundownId) throw new Error('getPartId: rundownId must be set!')
	if (!partExternalId) throw new Error('getPartId: partExternalId must be set!')
	return protectString<PartId>(getHash(`${rundownId}_part_${partExternalId}`))
}

Expected Behavior

Internal Id's should be unique for each ingested rundown.

Version

26.3.0-2

Severity / Impact

  • Temporary fixes can be made to block the creation of new rundowns with existing rundownExternalIds however that doesn't follow the pattern of other content levels.
  • Patching just the function would break the current stable Id's in the system, especially since the Ids cascade.

Level of Involvement

  • I am implementing a temporary fix for the Ingest API to block unintended updates
  • We need to come up with a plan to roll out a proper fix and also explore ways to make Id's more stable.

Metadata

Metadata

Assignees

No one assigned

    Labels

    help wantedNoone is actively working on this, contributions are welcome🐛bugSomething isn't working

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions