diff options
| author | MohamedBassem <me@mbassem.com> | 2024-10-12 16:47:22 +0000 |
|---|---|---|
| committer | MohamedBassem <me@mbassem.com> | 2024-10-12 17:37:42 +0000 |
| commit | c16173ea0fdbf6cc47b13756c0a77e8399669055 (patch) | |
| tree | 6b3ecd073259176059386eb16c6635e4699d26a3 /packages/shared/assetdb.ts | |
| parent | 9f87207d668fbe0a2039c63803128fbe5916f993 (diff) | |
| download | karakeep-c16173ea0fdbf6cc47b13756c0a77e8399669055.tar.zst | |
feature: Introduce a mechanism to cleanup dangling assets
Diffstat (limited to 'packages/shared/assetdb.ts')
| -rw-r--r-- | packages/shared/assetdb.ts | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/packages/shared/assetdb.ts b/packages/shared/assetdb.ts index 4edfa1ec..64413e9f 100644 --- a/packages/shared/assetdb.ts +++ b/packages/shared/assetdb.ts @@ -1,5 +1,6 @@ import * as fs from "fs"; import * as path from "path"; +import { Glob } from "glob"; import { z } from "zod"; import serverConfig from "./config"; @@ -120,6 +121,25 @@ export async function readAsset({ return { asset, metadata }; } +export async function readAssetMetadata({ + userId, + assetId, +}: { + userId: string; + assetId: string; +}) { + const assetDir = getAssetDir(userId, assetId); + + const metadataStr = await fs.promises.readFile( + path.join(assetDir, "metadata.json"), + { + encoding: "utf8", + }, + ); + + return zAssetMetadataSchema.parse(JSON.parse(metadataStr)); +} + export async function getAssetSize({ userId, assetId, @@ -154,3 +174,25 @@ export async function deleteUserAssets({ userId }: { userId: string }) { } await fs.promises.rm(userDir, { recursive: true }); } + +export async function* getAllAssets() { + const g = new Glob(`/**/**/asset.bin`, { + maxDepth: 3, + root: ROOT_PATH, + cwd: ROOT_PATH, + absolute: false, + }); + for await (const file of g) { + const [userId, assetId] = file.split("/").slice(0, 2); + const [size, metadata] = await Promise.all([ + getAssetSize({ userId, assetId }), + readAssetMetadata({ userId, assetId }), + ]); + yield { + userId, + assetId, + ...metadata, + size, + }; + } +} |
