Skip to content

Commit 3112dc0

Browse files
committed
wip: rework studio baseline packages
1 parent b05d92b commit 3112dc0

File tree

3 files changed

+49
-16
lines changed

3 files changed

+49
-16
lines changed

packages/job-worker/src/ingest/expectedPackages.ts

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -270,9 +270,6 @@ export function updateBaselineExpectedPackagesOnStudio(
270270
): void {
271271
updateBaselineExpectedPlayoutItemsOnStudio(context, playoutModel, baseline.expectedPlayoutItems ?? [])
272272

273-
// Fill in ids of unnamed expectedPackages
274-
setDefaultIdOnExpectedPackages(baseline.expectedPackages)
275-
276273
playoutModel.setExpectedPackagesForStudioBaseline(baseline.expectedPackages ?? [])
277274
}
278275

packages/job-worker/src/ingest/model/implementation/SaveIngestModel.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ export class SaveIngestModelHelper {
101101
}
102102
}
103103

104-
export async function writeExpectedPackagesChangesForRundown(
104+
async function writeExpectedPackagesChangesForRundown(
105105
context: JobContext,
106106
rundownId: RundownId | null,
107107
documentsToSave: IngestExpectedPackage<any>[]

packages/job-worker/src/studio/model/StudioBaselineHelper.ts

Lines changed: 48 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,25 @@
11
import { JobContext } from '../../jobs'
22
import {
3+
ExpectedPackageDB,
34
ExpectedPackageDBType,
45
ExpectedPackageIngestSource,
56
ExpectedPackageIngestSourceStudioBaseline,
6-
getExpectedPackageIdFromIngestSource,
7+
getExpectedPackageIdNew,
78
} from '@sofie-automation/corelib/dist/dataModel/ExpectedPackages'
89
import { ExpectedPlayoutItemStudio } from '@sofie-automation/corelib/dist/dataModel/ExpectedPlayoutItem'
910
import { saveIntoDb } from '../../db/changes'
1011
import { ExpectedPackage } from '@sofie-automation/blueprints-integration'
1112
import type { IngestExpectedPackage } from '../../ingest/model/IngestExpectedPackage'
12-
import { writeExpectedPackagesChangesForRundown } from '../../ingest/model/implementation/SaveIngestModel'
1313
import { setDefaultIdOnExpectedPackages } from '../../ingest/expectedPackages'
14+
import { ExpectedPackageId } from '@sofie-automation/corelib/dist/dataModel/Ids'
15+
import { Complete } from '@sofie-automation/corelib/dist/lib'
1416

1517
export class StudioBaselineHelper {
1618
readonly #context: JobContext
1719

18-
#pendingExpectedPackages: IngestExpectedPackage<ExpectedPackageIngestSourceStudioBaseline>[] | undefined
20+
#pendingExpectedPackages:
21+
| Map<ExpectedPackageId, IngestExpectedPackage<ExpectedPackageIngestSourceStudioBaseline>>
22+
| undefined
1923
#pendingExpectedPlayoutItems: ExpectedPlayoutItemStudio[] | undefined
2024

2125
constructor(context: JobContext) {
@@ -31,16 +35,19 @@ export class StudioBaselineHelper {
3135

3236
setDefaultIdOnExpectedPackages(packages)
3337

34-
this.#pendingExpectedPackages = packages.map(
35-
(expectedPackage) =>
36-
({
37-
_id: getExpectedPackageIdFromIngestSource(this.#context.studioId, source, expectedPackage._id),
38+
// Using a map here is a bit excessive, but it makes it easier to remove duplicates
39+
this.#pendingExpectedPackages = new Map()
40+
for (const expectedPackage of packages) {
41+
const id = getExpectedPackageIdNew(this.#context.studioId, expectedPackage)
3842

39-
package: expectedPackage,
43+
this.#pendingExpectedPackages.set(id, {
44+
_id: id,
4045

41-
ingestSources: [source],
42-
} satisfies IngestExpectedPackage<ExpectedPackageIngestSourceStudioBaseline>)
43-
)
46+
package: expectedPackage,
47+
48+
ingestSources: [source],
49+
})
50+
}
4451
}
4552
setExpectedPlayoutItems(playoutItems: ExpectedPlayoutItemStudio[]): void {
4653
this.#pendingExpectedPlayoutItems = playoutItems
@@ -57,7 +64,36 @@ export class StudioBaselineHelper {
5764
)
5865
: undefined,
5966
this.#pendingExpectedPackages
60-
? writeExpectedPackagesChangesForRundown(this.#context, null, this.#pendingExpectedPackages)
67+
? // We can be naive here, as we know the packages will have only one owner (the studio baseline)
68+
saveIntoDb<ExpectedPackageDB>(
69+
this.#context,
70+
this.#context.directCollections.ExpectedPackages,
71+
{
72+
studioId: this.#context.studioId,
73+
rundownId: null,
74+
bucketId: null,
75+
},
76+
Array.from(this.#pendingExpectedPackages.values()).map(
77+
(pkg) =>
78+
({
79+
_id: pkg._id,
80+
studioId: this.#context.studioId,
81+
rundownId: null,
82+
bucketId: null,
83+
84+
created: Date.now(),
85+
package: pkg.package,
86+
ingestSources: pkg.ingestSources,
87+
} satisfies Complete<ExpectedPackageDB>)
88+
),
89+
{
90+
beforeDiff: (doc, oldDoc) => {
91+
// Preserve the created date
92+
doc.created = oldDoc.created
93+
return doc
94+
},
95+
}
96+
)
6197
: undefined,
6298
])
6399

0 commit comments

Comments
 (0)