summaryrefslogtreecommitdiff
path: root/apps/web/src/services/storage/migrations/v1-to-v2.ts
diff options
context:
space:
mode:
authorMaze Winther <mazewinther@gmail.com>2026-02-05 12:53:56 +0100
committerMaze Winther <mazewinther@gmail.com>2026-02-05 12:53:56 +0100
commit2257ca2e6f9f8834880ea9bab4355c168ee6c33b (patch)
treef2ead774beda94d95fb771bc3eb16972fb08468a /apps/web/src/services/storage/migrations/v1-to-v2.ts
parent490fc170c0705703728a889cbc35a04ca41ae7eb (diff)
downloadopencut-2257ca2e6f9f8834880ea9bab4355c168ee6c33b.tar.gz
make storage versioning per-project + few other refactors
Diffstat (limited to 'apps/web/src/services/storage/migrations/v1-to-v2.ts')
-rw-r--r--apps/web/src/services/storage/migrations/v1-to-v2.ts54
1 files changed, 23 insertions, 31 deletions
diff --git a/apps/web/src/services/storage/migrations/v1-to-v2.ts b/apps/web/src/services/storage/migrations/v1-to-v2.ts
index d593d8a1..eff4397e 100644
--- a/apps/web/src/services/storage/migrations/v1-to-v2.ts
+++ b/apps/web/src/services/storage/migrations/v1-to-v2.ts
@@ -4,6 +4,7 @@ import {
} from "@/services/storage/indexeddb-adapter";
import type { MediaAssetData } from "@/services/storage/types";
import { StorageMigration } from "./base";
+import type { ProjectRecord } from "./transformers/types";
import {
getProjectId,
transformProjectV1ToV2,
@@ -14,41 +15,32 @@ export class V1toV2Migration extends StorageMigration {
from = 1;
to = 2;
- async run(): Promise<void> {
- const projectsAdapter = new IndexedDBAdapter<unknown>(
- "video-editor-projects",
- "projects",
- 1,
- );
- const projects = await projectsAdapter.getAll();
-
- for (const project of projects) {
- if (typeof project !== "object" || project === null) {
- continue;
- }
+ async transform(project: ProjectRecord): Promise<{
+ project: ProjectRecord;
+ skipped: boolean;
+ reason?: string;
+ }> {
+ const projectId = getProjectId({ project });
+ if (!projectId) {
+ return { project, skipped: true, reason: "no project id" };
+ }
- const projectId = getProjectId({
- project: project as Record<string, unknown>,
- });
- if (!projectId) {
- continue;
- }
+ const loadMediaAsset = createMediaAssetLoader({ projectId });
- const loadMediaAsset = createMediaAssetLoader({ projectId });
+ const result = await transformProjectV1ToV2({
+ project,
+ options: { loadMediaAsset },
+ });
- const result = await transformProjectV1ToV2({
- project: project as Record<string, unknown>,
- options: { loadMediaAsset },
+ if (!result.skipped) {
+ // cleanup legacy timeline DBs after successful transformation
+ await cleanupLegacyTimelineDBs({
+ projectId,
+ project: result.project,
});
-
- if (result.skipped) {
- continue;
- }
-
- await projectsAdapter.set(projectId, result.project);
-
- await cleanupLegacyTimelineDBs({ projectId, project: result.project });
}
+
+ return result;
}
}
@@ -73,7 +65,7 @@ async function cleanupLegacyTimelineDBs({
project,
}: {
projectId: string;
- project: Record<string, unknown>;
+ project: ProjectRecord;
}): Promise<void> {
const scenes = project.scenes;
if (!Array.isArray(scenes)) {