11import { addMigrationSteps } from './databaseMigration'
22import { CURRENT_SYSTEM_VERSION } from './currentSystemVersion'
3+ import { ExpectedPackages } from '../collections'
4+ import * as PackagesPreR53 from '@sofie-automation/corelib/dist/dataModel/Old/ExpectedPackagesR52'
5+ import {
6+ ExpectedPackageDBNew ,
7+ ExpectedPackageIngestSource ,
8+ } from '@sofie-automation/corelib/dist/dataModel/ExpectedPackages'
9+ import { assertNever , Complete } from '../lib/tempLib'
10+ import { BucketId , RundownId } from '@sofie-automation/corelib/dist/dataModel/Ids'
311
412/*
513 * **************************************************************************************
@@ -13,4 +21,115 @@ import { CURRENT_SYSTEM_VERSION } from './currentSystemVersion'
1321
1422export const addSteps = addMigrationSteps ( CURRENT_SYSTEM_VERSION , [
1523 // Add your migration here
24+
25+ {
26+ id : `convert ExpectedPackages to new format` ,
27+ canBeRunAutomatically : true ,
28+ validate : async ( ) => {
29+ const packages = await ExpectedPackages . findFetchAsync ( {
30+ fromPieceType : { $exists : true } ,
31+ } )
32+
33+ if ( packages . length > 0 ) {
34+ return 'ExpectedPackages must be converted to new format'
35+ }
36+
37+ return false
38+ } ,
39+ migrate : async ( ) => {
40+ const packages = ( await ExpectedPackages . findFetchAsync ( {
41+ fromPieceType : { $exists : true } ,
42+ } ) ) as unknown as PackagesPreR53 . ExpectedPackageDB [ ]
43+
44+ for ( const pkg of packages ) {
45+ let rundownId : RundownId | null = null
46+ let bucketId : BucketId | null = null
47+ let ingestSource : ExpectedPackageIngestSource | undefined
48+
49+ switch ( pkg . fromPieceType ) {
50+ case PackagesPreR53 . ExpectedPackageDBType . PIECE :
51+ case PackagesPreR53 . ExpectedPackageDBType . ADLIB_PIECE :
52+ rundownId = pkg . rundownId
53+ ingestSource = {
54+ fromPieceType : pkg . fromPieceType ,
55+ pieceId : pkg . pieceId ,
56+ partId : pkg . partId ,
57+ segmentId : pkg . segmentId ,
58+ }
59+ break
60+ case PackagesPreR53 . ExpectedPackageDBType . ADLIB_ACTION :
61+ rundownId = pkg . rundownId
62+ ingestSource = {
63+ fromPieceType : pkg . fromPieceType ,
64+ pieceId : pkg . pieceId ,
65+ partId : pkg . partId ,
66+ segmentId : pkg . segmentId ,
67+ }
68+ break
69+ case PackagesPreR53 . ExpectedPackageDBType . BASELINE_ADLIB_PIECE :
70+ rundownId = pkg . rundownId
71+ ingestSource = {
72+ fromPieceType : pkg . fromPieceType ,
73+ pieceId : pkg . pieceId ,
74+ }
75+ break
76+ case PackagesPreR53 . ExpectedPackageDBType . BASELINE_ADLIB_ACTION :
77+ rundownId = pkg . rundownId
78+ ingestSource = {
79+ fromPieceType : pkg . fromPieceType ,
80+ pieceId : pkg . pieceId ,
81+ }
82+ break
83+ case PackagesPreR53 . ExpectedPackageDBType . RUNDOWN_BASELINE_OBJECTS :
84+ rundownId = pkg . rundownId
85+ ingestSource = {
86+ fromPieceType : pkg . fromPieceType ,
87+ }
88+ break
89+ case PackagesPreR53 . ExpectedPackageDBType . BUCKET_ADLIB :
90+ bucketId = pkg . bucketId
91+ ingestSource = {
92+ fromPieceType : pkg . fromPieceType ,
93+ pieceId : pkg . pieceId ,
94+ pieceExternalId : pkg . pieceExternalId ,
95+ }
96+ break
97+ case PackagesPreR53 . ExpectedPackageDBType . BUCKET_ADLIB_ACTION :
98+ bucketId = pkg . bucketId
99+ ingestSource = {
100+ fromPieceType : pkg . fromPieceType ,
101+ pieceId : pkg . pieceId ,
102+ pieceExternalId : pkg . pieceExternalId ,
103+ }
104+ break
105+ case PackagesPreR53 . ExpectedPackageDBType . STUDIO_BASELINE_OBJECTS :
106+ ingestSource = {
107+ fromPieceType : pkg . fromPieceType ,
108+ }
109+ break
110+ default :
111+ assertNever ( pkg )
112+ break
113+ }
114+
115+ await ExpectedPackages . mutableCollection . removeAsync ( pkg . _id )
116+
117+ if ( ingestSource ) {
118+ await ExpectedPackages . mutableCollection . insertAsync ( {
119+ _id : pkg . _id , // Preserve the old id to ensure references aren't broken. This will be 'corrected' upon first ingest operation
120+ studioId : pkg . studioId ,
121+ rundownId : rundownId ,
122+ bucketId : bucketId ,
123+ contentVersionHash : pkg . contentVersionHash ,
124+ package : {
125+ ...( pkg as any ) , // Some fields should be pruned off this, but this is fine
126+ _id : pkg . blueprintPackageId ,
127+ } ,
128+ created : pkg . created ,
129+ ingestSources : [ ingestSource ] ,
130+ } satisfies Complete < ExpectedPackageDBNew > )
131+ }
132+ }
133+ } ,
134+ } ,
16135] )
0 commit comments