From 7bf0984698e43b9aa2dd879f65951318ed410390 Mon Sep 17 00:00:00 2001 From: Maze <167211895+mazeincoding@users.noreply.github.com> Date: Sat, 31 Jan 2026 00:20:04 +0100 Subject: codebase overhaul (#697) --- .../services/storage/migrations/version-manager.ts | 73 ++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 apps/web/src/services/storage/migrations/version-manager.ts (limited to 'apps/web/src/services/storage/migrations/version-manager.ts') diff --git a/apps/web/src/services/storage/migrations/version-manager.ts b/apps/web/src/services/storage/migrations/version-manager.ts new file mode 100644 index 00000000..879498ce --- /dev/null +++ b/apps/web/src/services/storage/migrations/version-manager.ts @@ -0,0 +1,73 @@ +import { IndexedDBAdapter } from "@/services/storage/indexeddb-adapter"; + +type StorageVersionRecord = { + version: number; + inProgress?: { + from: number; + to: number; + }; +}; + +const DEFAULT_DB_NAME = "video-editor-meta"; +const DEFAULT_STORE_NAME = "storage-version"; +const DEFAULT_DB_VERSION = 1; +const STORAGE_VERSION_KEY = "storage-version"; + +export class StorageVersionManager { + private adapter: IndexedDBAdapter; + + constructor({ + dbName = DEFAULT_DB_NAME, + storeName = DEFAULT_STORE_NAME, + version = DEFAULT_DB_VERSION, + }: { + dbName?: string; + storeName?: string; + version?: number; + } = {}) { + this.adapter = new IndexedDBAdapter( + dbName, + storeName, + version, + ); + } + + async getVersion(): Promise { + const record = await this.adapter.get(STORAGE_VERSION_KEY); + return record?.version ?? 0; + } + + async getVersionRecord(): Promise { + return this.adapter.get(STORAGE_VERSION_KEY); + } + + async setVersion({ version }: { version: number }): Promise { + const record = await this.getVersionRecord(); + const inProgress = record?.inProgress; + await this.adapter.set(STORAGE_VERSION_KEY, { + version, + ...(inProgress ? { inProgress } : {}), + }); + } + + async setInProgress({ + from, + to, + }: { + from: number; + to: number; + }): Promise { + const record = await this.getVersionRecord(); + const version = record?.version ?? 0; + await this.adapter.set(STORAGE_VERSION_KEY, { + version, + inProgress: { from, to }, + }); + } + + async clearInProgress(): Promise { + const record = await this.getVersionRecord(); + const version = record?.version ?? 0; + await this.adapter.set(STORAGE_VERSION_KEY, { version }); + } +} -- cgit v1.3.1