diff options
Diffstat (limited to 'apps/web/src/services/storage/migrations/v0-to-v1.ts')
| -rw-r--r-- | apps/web/src/services/storage/migrations/v0-to-v1.ts | 73 |
1 files changed, 9 insertions, 64 deletions
diff --git a/apps/web/src/services/storage/migrations/v0-to-v1.ts b/apps/web/src/services/storage/migrations/v0-to-v1.ts index 7ec388f1..18e15180 100644 --- a/apps/web/src/services/storage/migrations/v0-to-v1.ts +++ b/apps/web/src/services/storage/migrations/v0-to-v1.ts @@ -1,10 +1,6 @@ import { IndexedDBAdapter } from "@/services/storage/indexeddb-adapter"; -import type { SerializedScene } from "@/services/storage/types"; -import { buildDefaultScene } from "@/lib/scenes"; -import type { TScene } from "@/types/timeline"; import { StorageMigration } from "./base"; - -type ProjectRecord = Record<string, unknown>; +import { getProjectId, transformProjectV0ToV1 } from "./transformers/v0-to-v1"; export class V0toV1Migration extends StorageMigration { from = 0; @@ -19,75 +15,24 @@ export class V0toV1Migration extends StorageMigration { const projects = await projectsAdapter.getAll(); for (const project of projects) { - if (!isRecord(project)) { + if (typeof project !== "object" || project === null) { continue; } - const scenesValue = project.scenes; - if (Array.isArray(scenesValue) && scenesValue.length > 0) { - continue; - } + const result = transformProjectV0ToV1({ + project: project as Record<string, unknown>, + }); - const mainScene = buildDefaultScene({ isMain: true, name: "Main scene" }); - const serializedScene = serializeScene({ scene: mainScene }); - const updatedProject: ProjectRecord = { - ...project, - scenes: [serializedScene], - currentSceneId: mainScene.id, - version: 1, - }; - - const updatedAt = new Date().toISOString(); - if (isRecord(project.metadata)) { - updatedProject.metadata = { - ...project.metadata, - updatedAt, - }; - } else { - updatedProject.updatedAt = updatedAt; + if (result.skipped) { + continue; } - const projectId = getProjectId({ project: updatedProject }); + const projectId = getProjectId({ project: result.project }); if (!projectId) { continue; } - await projectsAdapter.set(projectId, updatedProject); + await projectsAdapter.set(projectId, result.project); } } } - -function serializeScene({ scene }: { scene: TScene }): SerializedScene { - return { - id: scene.id, - name: scene.name, - isMain: scene.isMain, - tracks: scene.tracks, - bookmarks: scene.bookmarks, - createdAt: scene.createdAt.toISOString(), - updatedAt: scene.updatedAt.toISOString(), - }; -} - -function getProjectId({ project }: { project: ProjectRecord }): string | null { - const idValue = project.id; - if (typeof idValue === "string" && idValue.length > 0) { - return idValue; - } - - const metadataValue = project.metadata; - if (!isRecord(metadataValue)) { - return null; - } - - const metadataId = metadataValue.id; - if (typeof metadataId === "string" && metadataId.length > 0) { - return metadataId; - } - - return null; -} - -function isRecord(value: unknown): value is ProjectRecord { - return typeof value === "object" && value !== null; -} |
