Skip to content

Commit f925ec0

Browse files
committed
feat: change structure of ExpectedPackage documents
This is a preparation step for the documents having multiple owners. In the current iteration, each document will remain with one owner.
1 parent 83f5032 commit f925ec0

File tree

56 files changed

+1613
-913
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

56 files changed

+1613
-913
lines changed

meteor/server/api/__tests__/cleanup.test.ts

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@ async function setDefaultDatatoDB(env: DefaultEnvironment, now: number) {
193193
startSegmentId: segmentId,
194194
timelineObjectsString: '' as any,
195195
}
196-
const pieceId = await Pieces.mutableCollection.insertAsync(piece)
196+
await Pieces.mutableCollection.insertAsync(piece)
197197

198198
await AdLibActions.mutableCollection.insertAsync({
199199
_id: getRandomId(),
@@ -256,22 +256,12 @@ async function setDefaultDatatoDB(env: DefaultEnvironment, now: number) {
256256
})
257257
const packageId = await ExpectedPackages.mutableCollection.insertAsync({
258258
_id: getRandomId(),
259-
blueprintPackageId: '',
260-
// @ts-expect-error bucketId is not a part of all ExpectedPackageDBs
261-
bucketId,
262-
content: {} as any,
263-
contentVersionHash: '',
264-
created: 0,
265-
fromPieceType: '' as any,
266-
layers: [],
267-
pieceId,
268-
rundownId,
269-
segmentId,
270-
sideEffect: {} as any,
271259
studioId,
272-
sources: {} as any,
273-
type: '' as any,
274-
version: {} as any,
260+
rundownId,
261+
bucketId: null,
262+
created: 0,
263+
package: {} as any,
264+
ingestSources: [] as any,
275265
})
276266
await ExpectedPackageWorkStatuses.insertAsync({
277267
_id: getRandomId(),

meteor/server/api/ingest/debug.ts

Lines changed: 0 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import { QueueStudioJob } from '../../worker/worker'
88
import { StudioJobs } from '@sofie-automation/corelib/dist/worker/studio'
99
import { RundownPlaylistId, SegmentId } from '@sofie-automation/corelib/dist/dataModel/Ids'
1010
import { MeteorDebugMethods } from '../../methods'
11-
import { DBRundown } from '@sofie-automation/corelib/dist/dataModel/Rundown'
1211

1312
MeteorDebugMethods({
1413
/**
@@ -47,31 +46,4 @@ MeteorDebugMethods({
4746
segmentExternalId: segment.externalId,
4847
})
4948
},
50-
/**
51-
* Regenerate all the expected packages for all rundowns in the system.
52-
* Additionally it will recreate any expectedMediaItems and expectedPlayoutItems.
53-
* This shouldn't be necessary as ingest will do this for each rundown as part of its workflow
54-
*/
55-
debug_recreateExpectedPackages: async () => {
56-
const rundowns = (await Rundowns.findFetchAsync(
57-
{},
58-
{
59-
projection: {
60-
_id: 1,
61-
studioId: 1,
62-
source: 1,
63-
},
64-
}
65-
)) as Array<Pick<DBRundown, '_id' | 'studioId' | 'source'>>
66-
67-
await Promise.all(
68-
rundowns
69-
.filter((rundown) => rundown.source.type !== 'snapshot')
70-
.map(async (rundown) =>
71-
runIngestOperation(rundown.studioId, IngestJobs.ExpectedPackagesRegenerate, {
72-
rundownId: rundown._id,
73-
})
74-
)
75-
)
76-
},
7749
})

meteor/server/api/ingest/packageInfo.ts

Lines changed: 54 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,7 @@
11
import {
2-
ExpectedPackageDBFromBucketAdLib,
3-
ExpectedPackageDBFromBucketAdLibAction,
4-
ExpectedPackageDBFromStudioBaselineObjects,
52
ExpectedPackageDBType,
6-
ExpectedPackageFromRundown,
7-
ExpectedPackageFromRundownBaseline,
3+
ExpectedPackageDB,
4+
ExpectedPackageIngestSourceBucket,
85
} from '@sofie-automation/corelib/dist/dataModel/ExpectedPackages'
96
import { PackageInfoDB } from '@sofie-automation/corelib/dist/dataModel/PackageInfos'
107
import { ExpectedPackages, Rundowns } from '../../collections'
@@ -28,52 +25,59 @@ export async function onUpdatedPackageInfo(packageId: ExpectedPackageId, _doc: P
2825
return
2926
}
3027

31-
if (pkg.listenToPackageInfoUpdates) {
32-
switch (pkg.fromPieceType) {
33-
case ExpectedPackageDBType.PIECE:
34-
case ExpectedPackageDBType.ADLIB_PIECE:
35-
case ExpectedPackageDBType.ADLIB_ACTION:
36-
case ExpectedPackageDBType.BASELINE_ADLIB_PIECE:
37-
case ExpectedPackageDBType.BASELINE_ADLIB_ACTION:
38-
case ExpectedPackageDBType.BASELINE_PIECE:
39-
case ExpectedPackageDBType.RUNDOWN_BASELINE_OBJECTS:
40-
onUpdatedPackageInfoForRundownDebounce(pkg)
41-
break
42-
case ExpectedPackageDBType.BUCKET_ADLIB:
43-
case ExpectedPackageDBType.BUCKET_ADLIB_ACTION:
44-
onUpdatedPackageInfoForBucketItemDebounce(pkg)
45-
break
46-
case ExpectedPackageDBType.STUDIO_BASELINE_OBJECTS:
47-
onUpdatedPackageInfoForStudioBaselineDebounce(pkg)
48-
break
49-
default:
50-
assertNever(pkg)
51-
break
28+
if (pkg.package.listenToPackageInfoUpdates) {
29+
for (const source of pkg.ingestSources) {
30+
switch (source.fromPieceType) {
31+
case ExpectedPackageDBType.PIECE:
32+
case ExpectedPackageDBType.ADLIB_PIECE:
33+
case ExpectedPackageDBType.ADLIB_ACTION:
34+
case ExpectedPackageDBType.BASELINE_ADLIB_PIECE:
35+
case ExpectedPackageDBType.BASELINE_ADLIB_ACTION:
36+
case ExpectedPackageDBType.BASELINE_PIECE:
37+
case ExpectedPackageDBType.RUNDOWN_BASELINE_OBJECTS:
38+
onUpdatedPackageInfoForRundownDebounce(pkg)
39+
break
40+
case ExpectedPackageDBType.BUCKET_ADLIB:
41+
case ExpectedPackageDBType.BUCKET_ADLIB_ACTION:
42+
onUpdatedPackageInfoForBucketItemDebounce(pkg, source)
43+
break
44+
case ExpectedPackageDBType.STUDIO_BASELINE_OBJECTS:
45+
onUpdatedPackageInfoForStudioBaselineDebounce(pkg)
46+
break
47+
default:
48+
assertNever(source)
49+
break
50+
}
5251
}
5352
}
5453
}
5554

5655
const pendingRundownPackageUpdates = new Map<RundownId, Array<ExpectedPackageId>>()
57-
function onUpdatedPackageInfoForRundownDebounce(pkg: ExpectedPackageFromRundown | ExpectedPackageFromRundownBaseline) {
58-
const existingEntry = pendingRundownPackageUpdates.get(pkg.rundownId)
56+
function onUpdatedPackageInfoForRundownDebounce(pkg: ExpectedPackageDB) {
57+
if (!pkg.rundownId) {
58+
logger.error(`Updating ExpectedPackage "${pkg._id}" for Rundown "${pkg.rundownId}" not possible`)
59+
return
60+
}
61+
62+
const rundownId = pkg.rundownId
63+
64+
const existingEntry = pendingRundownPackageUpdates.get(rundownId)
5965
if (existingEntry) {
6066
// already queued, add to the batch
6167
existingEntry.push(pkg._id)
6268
} else {
63-
pendingRundownPackageUpdates.set(pkg.rundownId, [pkg._id])
69+
pendingRundownPackageUpdates.set(rundownId, [pkg._id])
6470
}
6571

6672
// TODO: Scaling - this won't batch correctly if package manager directs calls to multiple instances
6773
lazyIgnore(
68-
`onUpdatedPackageInfoForRundown_${pkg.rundownId}`,
74+
`onUpdatedPackageInfoForRundown_${rundownId}`,
6975
() => {
70-
const packageIds = pendingRundownPackageUpdates.get(pkg.rundownId)
76+
const packageIds = pendingRundownPackageUpdates.get(rundownId)
7177
if (packageIds) {
72-
pendingRundownPackageUpdates.delete(pkg.rundownId)
73-
onUpdatedPackageInfoForRundown(pkg.rundownId, packageIds).catch((e) => {
74-
logger.error(
75-
`Updating ExpectedPackages for Rundown "${pkg.rundownId}" failed: ${stringifyError(e)}`
76-
)
78+
pendingRundownPackageUpdates.delete(rundownId)
79+
onUpdatedPackageInfoForRundown(rundownId, packageIds).catch((e) => {
80+
logger.error(`Updating ExpectedPackages for Rundown "${rundownId}" failed: ${stringifyError(e)}`)
7781
})
7882
}
7983
},
@@ -108,19 +112,24 @@ async function onUpdatedPackageInfoForRundown(
108112
})
109113
}
110114

111-
function onUpdatedPackageInfoForBucketItemDebounce(
112-
pkg: ExpectedPackageDBFromBucketAdLib | ExpectedPackageDBFromBucketAdLibAction
113-
) {
115+
function onUpdatedPackageInfoForBucketItemDebounce(pkg: ExpectedPackageDB, source: ExpectedPackageIngestSourceBucket) {
116+
if (!pkg.bucketId) {
117+
logger.error(`Updating ExpectedPackage "${pkg._id}" for Bucket "${pkg.bucketId}" not possible`)
118+
return
119+
}
120+
121+
const bucketId = pkg.bucketId
122+
114123
lazyIgnore(
115-
`onUpdatedPackageInfoForBucket_${pkg.studioId}_${pkg.bucketId}_${pkg.pieceExternalId}`,
124+
`onUpdatedPackageInfoForBucket_${pkg.studioId}_${bucketId}_${source.pieceExternalId}`,
116125
() => {
117126
runIngestOperation(pkg.studioId, IngestJobs.BucketItemRegenerate, {
118-
bucketId: pkg.bucketId,
119-
externalId: pkg.pieceExternalId,
127+
bucketId: bucketId,
128+
externalId: source.pieceExternalId,
120129
}).catch((err) => {
121130
logger.error(
122-
`Updating ExpectedPackages for Bucket "${pkg.bucketId}" Item "${
123-
pkg.pieceExternalId
131+
`Updating ExpectedPackages for Bucket "${bucketId}" Item "${
132+
source.pieceExternalId
124133
}" failed: ${stringifyError(err)}`
125134
)
126135
})
@@ -129,7 +138,7 @@ function onUpdatedPackageInfoForBucketItemDebounce(
129138
)
130139
}
131140

132-
function onUpdatedPackageInfoForStudioBaselineDebounce(pkg: ExpectedPackageDBFromStudioBaselineObjects) {
141+
function onUpdatedPackageInfoForStudioBaselineDebounce(pkg: ExpectedPackageDB) {
133142
lazyIgnore(
134143
`onUpdatedPackageInfoForStudioBaseline_${pkg.studioId}`,
135144
() => {

meteor/server/api/integration/expectedPackages.ts

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import {
3333
} from '../../collections'
3434
import { logger } from '../../logging'
3535
import _ from 'underscore'
36+
import { ExpectedPackageDB } from '@sofie-automation/corelib/dist/dataModel/ExpectedPackages'
3637

3738
export namespace PackageManagerIntegration {
3839
export async function updateExpectedPackageWorkStatuses(
@@ -98,9 +99,17 @@ export namespace PackageManagerIntegration {
9899
const fromPackageIds = workStatus.fromPackages.map((p) => p.id)
99100
if (fromPackageIds.length) {
100101
ps.push(
101-
ExpectedPackages.findOneAsync({
102-
_id: { $in: fromPackageIds },
103-
}).then((expPackage) => {
102+
ExpectedPackages.findOneAsync(
103+
{
104+
_id: { $in: fromPackageIds },
105+
},
106+
{
107+
projection: {
108+
_id: 1,
109+
studioId: 1,
110+
},
111+
}
112+
).then((expPackage: Pick<ExpectedPackageDB, '_id' | 'studioId'> | undefined) => {
104113
if (!expPackage)
105114
throw new Meteor.Error(404, `ExpectedPackages "${fromPackageIds}" not found`)
106115

meteor/server/collections/packages-media.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,15 +32,17 @@ export const ExpectedPackages = createAsyncOnlyReadOnlyMongoCollection<ExpectedP
3232
)
3333
registerIndex(ExpectedPackages, {
3434
studioId: 1,
35-
fromPieceType: 1,
3635
})
3736
registerIndex(ExpectedPackages, {
3837
studioId: 1,
39-
pieceId: 1,
38+
rundownId: 1,
39+
})
40+
registerIndex(ExpectedPackages, {
41+
studioId: 1,
42+
bucketId: 1,
4043
})
4144
registerIndex(ExpectedPackages, {
4245
rundownId: 1,
43-
pieceId: 1,
4446
})
4547

4648
export const ExpectedPackageWorkStatuses = createAsyncOnlyMongoCollection<ExpectedPackageWorkStatus>(

meteor/server/migration/1_50_0.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ import { JSONBlobStringify, JSONSchema, TSR } from '@sofie-automation/blueprints
3333
import { DEFAULT_MINIMUM_TAKE_SPAN } from '@sofie-automation/shared-lib/dist/core/constants'
3434
import { PartId } from '@sofie-automation/shared-lib/dist/core/model/Ids'
3535
import { protectString } from '@sofie-automation/shared-lib/dist/lib/protectedString'
36-
import { ExpectedPackageDBType } from '@sofie-automation/corelib/dist/dataModel/ExpectedPackages'
3736
import {
3837
AdLibActionId,
3938
BucketAdLibActionId,
@@ -44,6 +43,7 @@ import {
4443
import { Piece } from '@sofie-automation/corelib/dist/dataModel/Piece'
4544
import { AdLibPiece } from '@sofie-automation/corelib/dist/dataModel/AdLibPiece'
4645
import { AdLibAction } from '@sofie-automation/corelib/dist/dataModel/AdlibAction'
46+
import * as PackagesPreR53 from '@sofie-automation/corelib/dist/dataModel/Old/ExpectedPackagesR52'
4747

4848
// Release 50
4949

@@ -161,9 +161,9 @@ const oldDeviceTypeToNewMapping = {
161161
}
162162

163163
const EXPECTED_PACKAGE_TYPES_ADDED_PART_ID = [
164-
ExpectedPackageDBType.PIECE,
165-
ExpectedPackageDBType.ADLIB_PIECE,
166-
ExpectedPackageDBType.ADLIB_ACTION,
164+
PackagesPreR53.ExpectedPackageDBType.PIECE,
165+
PackagesPreR53.ExpectedPackageDBType.ADLIB_PIECE,
166+
PackagesPreR53.ExpectedPackageDBType.ADLIB_ACTION,
167167
]
168168

169169
export const addSteps = addMigrationSteps('1.50.0', [
@@ -877,10 +877,10 @@ export const addSteps = addMigrationSteps('1.50.0', [
877877
return false
878878
},
879879
migrate: async () => {
880-
const objects = await ExpectedPackages.findFetchAsync({
880+
const objects = (await ExpectedPackages.findFetchAsync({
881881
fromPieceType: { $in: EXPECTED_PACKAGE_TYPES_ADDED_PART_ID as any }, // Force the types, as the query does not match due to the interfaces
882882
partId: { $exists: false },
883-
})
883+
})) as unknown as Array<PackagesPreR53.ExpectedPackageDB>
884884

885885
const neededPieceIds: Array<
886886
PieceId | AdLibActionId | RundownBaselineAdLibActionId | BucketAdLibId | BucketAdLibActionId

0 commit comments

Comments
 (0)