summaryrefslogtreecommitdiff
path: root/apps/web/src/services/storage/migrations/v0-to-v1.ts
diff options
context:
space:
mode:
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.ts73
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;
-}