From ccbff18a9763e458c07f46cb3a331062df14a9b9 Mon Sep 17 00:00:00 2001 From: kamtschatka Date: Sun, 30 Jun 2024 00:34:43 +0200 Subject: refactor: remove redundant code from crawler worker and refactor handling of asset types (#253) * refactoring asset types Extracted out functions to silently delete assets and to update them after crawling Generalized the mapping of assets to bookmark fields to make extending them easier * revert silentDeleteAsset and hide better-sqlite3 --------- Co-authored-by: MohamedBassem --- packages/trpc/routers/bookmarks.ts | 50 +++++++++++++------------------------- 1 file changed, 17 insertions(+), 33 deletions(-) (limited to 'packages/trpc') diff --git a/packages/trpc/routers/bookmarks.ts b/packages/trpc/routers/bookmarks.ts index 2175f704..8644bbcf 100644 --- a/packages/trpc/routers/bookmarks.ts +++ b/packages/trpc/routers/bookmarks.ts @@ -73,39 +73,23 @@ export const ensureBookmarkOwnership = experimental_trpcMiddleware<{ return opts.next(); }); -function assetTypeToBookmarkField( - asset: - | { - id: string; - assetType: AssetTypes; - } - | undefined, -) { - if (!asset) { - return undefined; - } - switch (asset.assetType) { - case AssetTypes.LINK_SCREENSHOT: - return { screenshotAssetId: asset.id }; - case AssetTypes.LINK_FULL_PAGE_ARCHIVE: - return { fullPageArchiveAssetId: asset.id }; - case AssetTypes.LINK_BANNER_IMAGE: - return { imageAssetId: asset.id }; - } +interface Asset { + id: string; + assetType: AssetTypes; } -function getBookmarkAssets(assets: { id: string; assetType: AssetTypes }[]) { - return { - ...assetTypeToBookmarkField( - assets.find((a) => a.assetType == AssetTypes.LINK_SCREENSHOT), - ), - ...assetTypeToBookmarkField( - assets.find((a) => a.assetType == AssetTypes.LINK_FULL_PAGE_ARCHIVE), - ), - ...assetTypeToBookmarkField( - assets.find((a) => a.assetType == AssetTypes.LINK_BANNER_IMAGE), - ), - }; +const ASSET_TYE_MAPPING: Record = { + [AssetTypes.LINK_SCREENSHOT]: "screenshotAssetId", + [AssetTypes.LINK_FULL_PAGE_ARCHIVE]: "fullPageArchiveAssetId", + [AssetTypes.LINK_BANNER_IMAGE]: "imageAssetId", +}; + +function mapAssetsToBookmarkFields(assets: Asset | Asset[] = []) { + const assetsArray = Array.isArray(assets) ? assets : [assets]; + return assetsArray.reduce((result: Record, asset: Asset) => { + result[ASSET_TYE_MAPPING[asset.assetType]] = asset.id; + return result; + }, {}); } async function getBookmark(ctx: AuthedContext, bookmarkId: string) { @@ -196,7 +180,7 @@ function toZodSchema(bookmark: BookmarkQueryReturnType): ZBookmark { if (link) { content = { type: "link", - ...getBookmarkAssets(assets), + ...mapAssetsToBookmarkFields(assets), ...link, }; } else if (text) { @@ -616,7 +600,7 @@ export const bookmarksAppRouter = router({ if (row.assets) { acc[bookmarkId].content = { ...acc[bookmarkId].content, - ...assetTypeToBookmarkField(row.assets), + ...mapAssetsToBookmarkFields(row.assets), }; } -- cgit v1.2.3-70-g09d2