Skip to content

Commit e443d39

Browse files
committed
wip: migration
1 parent 7e27193 commit e443d39

File tree

1 file changed

+119
-0
lines changed

1 file changed

+119
-0
lines changed

meteor/server/migration/X_X_X.ts

Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,13 @@
11
import { addMigrationSteps } from './databaseMigration'
22
import { 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

1422
export 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

Comments
 (0)