11import { JobContext } from '../../jobs'
22import {
3+ ExpectedPackageDB ,
34 ExpectedPackageDBType ,
45 ExpectedPackageIngestSource ,
56 ExpectedPackageIngestSourceStudioBaseline ,
6- getExpectedPackageIdFromIngestSource ,
7+ getExpectedPackageIdNew ,
78} from '@sofie-automation/corelib/dist/dataModel/ExpectedPackages'
89import { ExpectedPlayoutItemStudio } from '@sofie-automation/corelib/dist/dataModel/ExpectedPlayoutItem'
910import { saveIntoDb } from '../../db/changes'
1011import { ExpectedPackage } from '@sofie-automation/blueprints-integration'
1112import type { IngestExpectedPackage } from '../../ingest/model/IngestExpectedPackage'
12- import { writeExpectedPackagesChangesForRundown } from '../../ingest/model/implementation/SaveIngestModel'
1313import { setDefaultIdOnExpectedPackages } from '../../ingest/expectedPackages'
14+ import { ExpectedPackageId } from '@sofie-automation/corelib/dist/dataModel/Ids'
15+ import { Complete } from '@sofie-automation/corelib/dist/lib'
1416
1517export 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