summaryrefslogtreecommitdiff
path: root/apps/web/src/services/storage/migrations/version-manager.ts
diff options
context:
space:
mode:
authorMaze <167211895+mazeincoding@users.noreply.github.com>2026-01-31 00:20:04 +0100
committerGitHub <noreply@github.com>2026-01-31 00:20:04 +0100
commit7bf0984698e43b9aa2dd879f65951318ed410390 (patch)
treeccf2cd590a47d550152afc07129cb55c71a9ec35 /apps/web/src/services/storage/migrations/version-manager.ts
parent0173db99448d1c4c6415dcf15272e17551b48b04 (diff)
downloadopencut-7bf0984698e43b9aa2dd879f65951318ed410390.tar.gz
codebase overhaul (#697)
Diffstat (limited to 'apps/web/src/services/storage/migrations/version-manager.ts')
-rw-r--r--apps/web/src/services/storage/migrations/version-manager.ts73
1 files changed, 73 insertions, 0 deletions
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<StorageVersionRecord>;
+
+ constructor({
+ dbName = DEFAULT_DB_NAME,
+ storeName = DEFAULT_STORE_NAME,
+ version = DEFAULT_DB_VERSION,
+ }: {
+ dbName?: string;
+ storeName?: string;
+ version?: number;
+ } = {}) {
+ this.adapter = new IndexedDBAdapter<StorageVersionRecord>(
+ dbName,
+ storeName,
+ version,
+ );
+ }
+
+ async getVersion(): Promise<number> {
+ const record = await this.adapter.get(STORAGE_VERSION_KEY);
+ return record?.version ?? 0;
+ }
+
+ async getVersionRecord(): Promise<StorageVersionRecord | null> {
+ return this.adapter.get(STORAGE_VERSION_KEY);
+ }
+
+ async setVersion({ version }: { version: number }): Promise<void> {
+ 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<void> {
+ const record = await this.getVersionRecord();
+ const version = record?.version ?? 0;
+ await this.adapter.set(STORAGE_VERSION_KEY, {
+ version,
+ inProgress: { from, to },
+ });
+ }
+
+ async clearInProgress(): Promise<void> {
+ const record = await this.getVersionRecord();
+ const version = record?.version ?? 0;
+ await this.adapter.set(STORAGE_VERSION_KEY, { version });
+ }
+}