diff options
| author | kamtschatka <simon.schatka@gmx.at> | 2024-07-01 13:03:53 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-07-01 12:03:53 +0100 |
| commit | e6486465decd612f7e437abe904960a47ff359ce (patch) | |
| tree | f36fd7efbcf2a083905061d8c5f1310f36350ced /apps | |
| parent | ccbff18a9763e458c07f46cb3a331062df14a9b9 (diff) | |
| download | karakeep-e6486465decd612f7e437abe904960a47ff359ce.tar.zst | |
refactor: added the bookmark type to the database (#256)
* 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
* Added the bookmark type to the database
Introduced an enum to have better type safety
cleaned up the code and based some code on the type directly
* add BookmarkType.UNKNWON
* lint and remove unused function
---------
Co-authored-by: MohamedBassem <me@mbassem.com>
Diffstat (limited to 'apps')
19 files changed, 82 insertions, 51 deletions
diff --git a/apps/browser-extension/src/SavePage.tsx b/apps/browser-extension/src/SavePage.tsx index 9cc1521a..c6f85b3b 100644 --- a/apps/browser-extension/src/SavePage.tsx +++ b/apps/browser-extension/src/SavePage.tsx @@ -1,6 +1,7 @@ import { useEffect, useState } from "react"; import { Navigate } from "react-router-dom"; +import { BookmarkTypes } from "../../../packages/shared/types/bookmarks"; import Spinner from "./Spinner"; import { api } from "./utils/trpc"; @@ -32,7 +33,7 @@ export default function SavePage() { } createBookmark({ - type: "link", + type: BookmarkTypes.LINK, url: currentUrl, }); } diff --git a/apps/cli/src/commands/bookmarks.ts b/apps/cli/src/commands/bookmarks.ts index 40442ec1..6efb41d9 100644 --- a/apps/cli/src/commands/bookmarks.ts +++ b/apps/cli/src/commands/bookmarks.ts @@ -9,7 +9,10 @@ import { getAPIClient } from "@/lib/trpc"; import { Command } from "@commander-js/extra-typings"; import type { ZBookmark } from "@hoarder/shared/types/bookmarks"; -import { MAX_NUM_BOOKMARKS_PER_PAGE } from "@hoarder/shared/types/bookmarks"; +import { + BookmarkTypes, + MAX_NUM_BOOKMARKS_PER_PAGE, +} from "@hoarder/shared/types/bookmarks"; export const bookmarkCmd = new Command() .name("bookmarks") @@ -26,7 +29,7 @@ function normalizeBookmark(bookmark: ZBookmark) { tags: bookmark.tags.map((t) => t.name), }; - if (ret.content.type == "link" && ret.content.htmlContent) { + if (ret.content.type == BookmarkTypes.LINK && ret.content.htmlContent) { if (ret.content.htmlContent.length > 10) { ret.content.htmlContent = ret.content.htmlContent.substring(0, 10) + "... <CROPPED>"; @@ -63,7 +66,7 @@ bookmarkCmd const promises = [ ...opts.link.map((url) => api.bookmarks.createBookmark - .mutate({ type: "link", url }) + .mutate({ type: BookmarkTypes.LINK, url }) .then((bookmark: ZBookmark) => { results.push(normalizeBookmark(bookmark)); }) @@ -71,7 +74,7 @@ bookmarkCmd ), ...opts.note.map((text) => api.bookmarks.createBookmark - .mutate({ type: "text", text }) + .mutate({ type: BookmarkTypes.TEXT, text }) .then((bookmark: ZBookmark) => { results.push(normalizeBookmark(bookmark)); }) @@ -87,7 +90,7 @@ bookmarkCmd const text = fs.readFileSync(0, "utf-8"); promises.push( api.bookmarks.createBookmark - .mutate({ type: "text", text }) + .mutate({ type: BookmarkTypes.TEXT, text }) .then((bookmark: ZBookmark) => { results.push(normalizeBookmark(bookmark)); }) diff --git a/apps/mobile/app/dashboard/add-link.tsx b/apps/mobile/app/dashboard/add-link.tsx index 5096a9e7..d9773fb4 100644 --- a/apps/mobile/app/dashboard/add-link.tsx +++ b/apps/mobile/app/dashboard/add-link.tsx @@ -6,6 +6,8 @@ import { Input } from "@/components/ui/Input"; import { useToast } from "@/components/ui/Toast"; import { api } from "@/lib/trpc"; +import { BookmarkTypes } from "@hoarder/shared/types/bookmarks"; + export default function AddNote() { const [text, setText] = useState(""); const [error, setError] = useState<string | undefined>(); @@ -54,7 +56,7 @@ export default function AddNote() { autoFocus /> <Button - onPress={() => mutate({ type: "link", url: text })} + onPress={() => mutate({ type: BookmarkTypes.LINK, url: text })} label="Add Link" /> </View> diff --git a/apps/mobile/app/dashboard/add-note.tsx b/apps/mobile/app/dashboard/add-note.tsx index 40c97456..6b8f0fef 100644 --- a/apps/mobile/app/dashboard/add-note.tsx +++ b/apps/mobile/app/dashboard/add-note.tsx @@ -5,6 +5,8 @@ import { Button } from "@/components/ui/Button"; import { Input } from "@/components/ui/Input"; import { api } from "@/lib/trpc"; +import { BookmarkTypes } from "@hoarder/shared/types/bookmarks"; + export default function AddNote() { const [text, setText] = useState(""); const [error, setError] = useState<string | undefined>(); @@ -45,7 +47,10 @@ export default function AddNote() { placeholder="What's on your mind?" autoFocus /> - <Button onPress={() => mutate({ type: "text", text })} label="Add Note" /> + <Button + onPress={() => mutate({ type: BookmarkTypes.TEXT, text })} + label="Add Note" + /> </View> ); } diff --git a/apps/mobile/app/sharing.tsx b/apps/mobile/app/sharing.tsx index 7339a017..d1d39e5b 100644 --- a/apps/mobile/app/sharing.tsx +++ b/apps/mobile/app/sharing.tsx @@ -7,7 +7,7 @@ import { api } from "@/lib/trpc"; import { useUploadAsset } from "@/lib/upload"; import { z } from "zod"; -import type { ZBookmark } from "@hoarder/shared/types/bookmarks"; +import { BookmarkTypes, ZBookmark } from "@hoarder/shared/types/bookmarks"; type Mode = | { type: "idle" } @@ -45,9 +45,9 @@ function SaveBookmark({ setMode }: { setMode: (mode: Mode) => void }) { const val = z.string().url(); if (val.safeParse(shareIntent.text).success) { // This is a URL, else treated as text - mutate({ type: "link", url: shareIntent.text }); + mutate({ type: BookmarkTypes.LINK, url: shareIntent.text }); } else { - mutate({ type: "text", text: shareIntent.text }); + mutate({ type: BookmarkTypes.TEXT, text: shareIntent.text }); } } else if (!isPending && shareIntent?.files) { uploadAsset({ diff --git a/apps/mobile/components/bookmarks/BookmarkCard.tsx b/apps/mobile/components/bookmarks/BookmarkCard.tsx index 128696a1..8faa8618 100644 --- a/apps/mobile/components/bookmarks/BookmarkCard.tsx +++ b/apps/mobile/components/bookmarks/BookmarkCard.tsx @@ -26,6 +26,7 @@ import { isBookmarkStillLoading, isBookmarkStillTagging, } from "@hoarder/shared-react/utils/bookmarkUtils"; +import { BookmarkTypes } from "@hoarder/shared/types/bookmarks"; import { TailwindResolver } from "../TailwindResolver"; import { Divider } from "../ui/Divider"; @@ -161,7 +162,7 @@ function TagList({ bookmark }: { bookmark: ZBookmark }) { function LinkCard({ bookmark }: { bookmark: ZBookmark }) { const { settings } = useAppSettings(); - if (bookmark.content.type !== "link") { + if (bookmark.content.type !== BookmarkTypes.LINK) { throw new Error("Wrong content type rendered"); } @@ -223,7 +224,7 @@ function LinkCard({ bookmark }: { bookmark: ZBookmark }) { } function TextCard({ bookmark }: { bookmark: ZBookmark }) { - if (bookmark.content.type !== "text") { + if (bookmark.content.type !== BookmarkTypes.TEXT) { throw new Error("Wrong content type rendered"); } const content = bookmark.content.text; @@ -262,7 +263,7 @@ function TextCard({ bookmark }: { bookmark: ZBookmark }) { function AssetCard({ bookmark }: { bookmark: ZBookmark }) { const { settings } = useAppSettings(); - if (bookmark.content.type !== "asset") { + if (bookmark.content.type !== BookmarkTypes.ASSET) { throw new Error("Wrong content type rendered"); } const title = bookmark.title ?? bookmark.content.fileName; @@ -322,13 +323,13 @@ export default function BookmarkCard({ let comp; switch (bookmark.content.type) { - case "link": + case BookmarkTypes.LINK: comp = <LinkCard bookmark={bookmark} />; break; - case "text": + case BookmarkTypes.TEXT: comp = <TextCard bookmark={bookmark} />; break; - case "asset": + case BookmarkTypes.ASSET: comp = <AssetCard bookmark={bookmark} />; break; } diff --git a/apps/mobile/components/bookmarks/UpdatingBookmarkList.tsx b/apps/mobile/components/bookmarks/UpdatingBookmarkList.tsx index 54288362..87f115f9 100644 --- a/apps/mobile/components/bookmarks/UpdatingBookmarkList.tsx +++ b/apps/mobile/components/bookmarks/UpdatingBookmarkList.tsx @@ -2,6 +2,7 @@ import { Text } from "react-native"; import { api } from "@/lib/trpc"; import type { ZGetBookmarksRequest } from "@hoarder/shared/types/bookmarks"; +import { BookmarkTypes } from "@hoarder/shared/types/bookmarks"; import FullPageSpinner from "../ui/FullPageSpinner"; import BookmarkList from "./BookmarkList"; @@ -46,7 +47,7 @@ export default function UpdatingBookmarkList({ <BookmarkList bookmarks={data.pages .flatMap((p) => p.bookmarks) - .filter((b) => b.content.type != "unknown")} + .filter((b) => b.content.type != BookmarkTypes.UNKNWON)} header={header} onRefresh={onRefresh} fetchNextPage={fetchNextPage} diff --git a/apps/mobile/lib/upload.ts b/apps/mobile/lib/upload.ts index 0b6db549..b31faa90 100644 --- a/apps/mobile/lib/upload.ts +++ b/apps/mobile/lib/upload.ts @@ -1,6 +1,6 @@ import { useMutation } from "@tanstack/react-query"; -import type { ZBookmark } from "@hoarder/shared/types/bookmarks"; +import { BookmarkTypes, ZBookmark } from "@hoarder/shared/types/bookmarks"; import { zUploadErrorSchema, zUploadResponseSchema, @@ -59,7 +59,7 @@ export function useUploadAsset( const assetId = resp.assetId; const assetType = resp.contentType === "application/pdf" ? "pdf" : "image"; - createBookmark({ type: "asset", assetId, assetType }); + createBookmark({ type: BookmarkTypes.ASSET, assetId, assetType }); }, onError: (e) => { if (options.onError) { diff --git a/apps/web/components/dashboard/UploadDropzone.tsx b/apps/web/components/dashboard/UploadDropzone.tsx index 2807b892..05e8901e 100644 --- a/apps/web/components/dashboard/UploadDropzone.tsx +++ b/apps/web/components/dashboard/UploadDropzone.tsx @@ -8,6 +8,7 @@ import { TRPCClientError } from "@trpc/client"; import DropZone from "react-dropzone"; import { useCreateBookmarkWithPostHook } from "@hoarder/shared-react/hooks/bookmarks"; +import { BookmarkTypes } from "@hoarder/shared/types/bookmarks"; import { zUploadErrorSchema, zUploadResponseSchema, @@ -50,7 +51,7 @@ export function useUploadAsset() { onSuccess: async (resp) => { const assetType = resp.contentType === "application/pdf" ? "pdf" : "image"; - return createBookmark({ ...resp, type: "asset", assetType }); + return createBookmark({ ...resp, type: BookmarkTypes.ASSET, assetType }); }, onError: (error, req) => { const err = zUploadErrorSchema.parse(JSON.parse(error.message)); @@ -68,7 +69,7 @@ export function useUploadAsset() { onSuccess: async (resp) => { return Promise.all( resp.map((url) => - createBookmark({ type: "link", url: url.toString() }), + createBookmark({ type: BookmarkTypes.LINK, url: url.toString() }), ), ); }, diff --git a/apps/web/components/dashboard/bookmarks/BookmarkCard.tsx b/apps/web/components/dashboard/bookmarks/BookmarkCard.tsx index 76316de7..ec0d4069 100644 --- a/apps/web/components/dashboard/bookmarks/BookmarkCard.tsx +++ b/apps/web/components/dashboard/bookmarks/BookmarkCard.tsx @@ -1,7 +1,7 @@ import { api } from "@/lib/trpc"; -import type { ZBookmark } from "@hoarder/shared/types/bookmarks"; import { isBookmarkStillLoading } from "@hoarder/shared-react/utils/bookmarkUtils"; +import { BookmarkTypes, ZBookmark } from "@hoarder/shared/types/bookmarks"; import AssetCard from "./AssetCard"; import LinkCard from "./LinkCard"; @@ -34,21 +34,21 @@ export default function BookmarkCard({ ); switch (bookmark.content.type) { - case "link": + case BookmarkTypes.LINK: return ( <LinkCard className={className} bookmark={{ ...bookmark, content: bookmark.content }} /> ); - case "text": + case BookmarkTypes.TEXT: return ( <TextCard className={className} bookmark={{ ...bookmark, content: bookmark.content }} /> ); - case "asset": + case BookmarkTypes.ASSET: return ( <AssetCard className={className} diff --git a/apps/web/components/dashboard/bookmarks/BookmarkOptions.tsx b/apps/web/components/dashboard/bookmarks/BookmarkOptions.tsx index e5f38eae..4007090e 100644 --- a/apps/web/components/dashboard/bookmarks/BookmarkOptions.tsx +++ b/apps/web/components/dashboard/bookmarks/BookmarkOptions.tsx @@ -32,6 +32,7 @@ import { } from "@hoarder/shared-react/hooks//bookmarks"; import { useRemoveBookmarkFromList } from "@hoarder/shared-react/hooks//lists"; import { useBookmarkGridContext } from "@hoarder/shared-react/hooks/bookmark-grid-context"; +import { BookmarkTypes } from "@hoarder/shared/types/bookmarks"; import { BookmarkedTextEditor } from "./BookmarkedTextEditor"; import { ArchivedActionIcon, FavouritedActionIcon } from "./icons"; @@ -115,7 +116,7 @@ export default function BookmarkOptions({ bookmark }: { bookmark: ZBookmark }) { </Button> </DropdownMenuTrigger> <DropdownMenuContent className="w-fit"> - {bookmark.content.type === "text" && ( + {bookmark.content.type === BookmarkTypes.TEXT && ( <DropdownMenuItem onClick={() => setTextEditorOpen(true)}> <Pencil className="mr-2 size-4" /> <span>Edit</span> @@ -151,7 +152,7 @@ export default function BookmarkOptions({ bookmark }: { bookmark: ZBookmark }) { /> <span>{bookmark.archived ? "Un-archive" : "Archive"}</span> </DropdownMenuItem> - {bookmark.content.type === "link" && ( + {bookmark.content.type === BookmarkTypes.LINK && ( <DropdownMenuItem onClick={() => { navigator.clipboard.writeText( @@ -191,7 +192,7 @@ export default function BookmarkOptions({ bookmark }: { bookmark: ZBookmark }) { </DropdownMenuItem> )} - {bookmark.content.type === "link" && ( + {bookmark.content.type === BookmarkTypes.LINK && ( <DropdownMenuItem disabled={demoMode} onClick={() => diff --git a/apps/web/components/dashboard/bookmarks/BookmarkedTextEditor.tsx b/apps/web/components/dashboard/bookmarks/BookmarkedTextEditor.tsx index db69e1a3..74e94f94 100644 --- a/apps/web/components/dashboard/bookmarks/BookmarkedTextEditor.tsx +++ b/apps/web/components/dashboard/bookmarks/BookmarkedTextEditor.tsx @@ -14,7 +14,7 @@ import { Textarea } from "@/components/ui/textarea"; import { toast } from "@/components/ui/use-toast"; import { api } from "@/lib/trpc"; -import type { ZBookmark } from "@hoarder/shared/types/bookmarks"; +import { BookmarkTypes, ZBookmark } from "@hoarder/shared/types/bookmarks"; export function BookmarkedTextEditor({ bookmark, @@ -27,7 +27,9 @@ export function BookmarkedTextEditor({ }) { const isNewBookmark = bookmark === undefined; const [noteText, setNoteText] = useState( - bookmark && bookmark.content.type == "text" ? bookmark.content.text : "", + bookmark && bookmark.content.type == BookmarkTypes.TEXT + ? bookmark.content.text + : "", ); const invalidateOneBookmarksCache = diff --git a/apps/web/components/dashboard/bookmarks/EditorCard.tsx b/apps/web/components/dashboard/bookmarks/EditorCard.tsx index a1055e8e..78bd0742 100644 --- a/apps/web/components/dashboard/bookmarks/EditorCard.tsx +++ b/apps/web/components/dashboard/bookmarks/EditorCard.tsx @@ -19,6 +19,7 @@ import { useForm } from "react-hook-form"; import { z } from "zod"; import { useCreateBookmarkWithPostHook } from "@hoarder/shared-react/hooks/bookmarks"; +import { BookmarkTypes } from "@hoarder/shared/types/bookmarks"; import { useUploadAsset } from "../UploadDropzone"; @@ -99,7 +100,7 @@ export default function EditorCard({ className }: { className?: string }) { if (urls.length === 1) { // Only 1 url in the textfield --> simply import it - mutate({ type: "link", url: text }); + mutate({ type: BookmarkTypes.LINK, url: text }); return; } // multiple urls found --> ask the user if it should be imported as multiple URLs or as a text bookmark @@ -128,7 +129,7 @@ export default function EditorCard({ className }: { className?: string }) { tryToImportUrls(text); } catch (e) { // Not a URL - mutate({ type: "text", text }); + mutate({ type: BookmarkTypes.TEXT, text }); } }; @@ -240,7 +241,10 @@ export default function EditorCard({ className }: { className?: string }) { variant="secondary" loading={isPending} onClick={() => { - mutate({ type: "text", text: multiUrlImportState.text }); + mutate({ + type: BookmarkTypes.TEXT, + text: multiUrlImportState.text, + }); setMultiUrlImportState(null); }} > @@ -254,7 +258,7 @@ export default function EditorCard({ className }: { className?: string }) { loading={isPending} onClick={() => { multiUrlImportState.urls.forEach((url) => - mutate({ type: "link", url: url.toString() }), + mutate({ type: BookmarkTypes.LINK, url: url.toString() }), ); setMultiUrlImportState(null); }} diff --git a/apps/web/components/dashboard/preview/AssetContentSection.tsx b/apps/web/components/dashboard/preview/AssetContentSection.tsx index 4d6bb976..03ab8a43 100644 --- a/apps/web/components/dashboard/preview/AssetContentSection.tsx +++ b/apps/web/components/dashboard/preview/AssetContentSection.tsx @@ -1,10 +1,10 @@ import Image from "next/image"; import Link from "next/link"; -import type { ZBookmark } from "@hoarder/shared/types/bookmarks"; +import { BookmarkTypes, ZBookmark } from "@hoarder/shared/types/bookmarks"; export function AssetContentSection({ bookmark }: { bookmark: ZBookmark }) { - if (bookmark.content.type != "asset") { + if (bookmark.content.type != BookmarkTypes.ASSET) { throw new Error("Invalid content type"); } diff --git a/apps/web/components/dashboard/preview/BookmarkPreview.tsx b/apps/web/components/dashboard/preview/BookmarkPreview.tsx index 6a1068af..01e57e05 100644 --- a/apps/web/components/dashboard/preview/BookmarkPreview.tsx +++ b/apps/web/components/dashboard/preview/BookmarkPreview.tsx @@ -17,11 +17,11 @@ import dayjs from "dayjs"; import relativeTime from "dayjs/plugin/relativeTime"; import { CalendarDays, ExternalLink } from "lucide-react"; -import type { ZBookmark } from "@hoarder/shared/types/bookmarks"; import { isBookmarkStillCrawling, isBookmarkStillLoading, } from "@hoarder/shared-react/utils/bookmarkUtils"; +import { BookmarkTypes, ZBookmark } from "@hoarder/shared/types/bookmarks"; import ActionBar from "./ActionBar"; import { AssetContentSection } from "./AssetContentSection"; @@ -66,10 +66,10 @@ function CreationTime({ createdAt }: { createdAt: Date }) { } function getSourceUrl(bookmark: ZBookmark) { - if (bookmark.content.type === "link") { + if (bookmark.content.type === BookmarkTypes.LINK) { return bookmark.content.url; } - if (bookmark.content.type === "asset") { + if (bookmark.content.type === BookmarkTypes.ASSET) { return bookmark.content.sourceUrl; } return null; @@ -108,15 +108,15 @@ export default function BookmarkPreview({ let content; switch (bookmark.content.type) { - case "link": { + case BookmarkTypes.LINK: { content = <LinkContentSection bookmark={bookmark} />; break; } - case "text": { + case BookmarkTypes.TEXT: { content = <TextContentSection bookmark={bookmark} />; break; } - case "asset": { + case BookmarkTypes.ASSET: { content = <AssetContentSection bookmark={bookmark} />; break; } diff --git a/apps/web/components/dashboard/preview/EditableTitle.tsx b/apps/web/components/dashboard/preview/EditableTitle.tsx index 237ad108..03b95e74 100644 --- a/apps/web/components/dashboard/preview/EditableTitle.tsx +++ b/apps/web/components/dashboard/preview/EditableTitle.tsx @@ -1,7 +1,7 @@ import { toast } from "@/components/ui/use-toast"; import { useUpdateBookmark } from "@hoarder/shared-react/hooks/bookmarks"; -import { ZBookmark } from "@hoarder/shared/types/bookmarks"; +import { BookmarkTypes, ZBookmark } from "@hoarder/shared/types/bookmarks"; import { EditableText } from "../EditableText"; @@ -16,13 +16,13 @@ export function EditableTitle({ bookmark }: { bookmark: ZBookmark }) { let title: string | null = null; switch (bookmark.content.type) { - case "link": + case BookmarkTypes.LINK: title = bookmark.content.title ?? bookmark.content.url; break; - case "text": + case BookmarkTypes.TEXT: title = null; break; - case "asset": + case BookmarkTypes.ASSET: title = bookmark.content.fileName ?? null; break; } diff --git a/apps/web/components/dashboard/preview/LinkContentSection.tsx b/apps/web/components/dashboard/preview/LinkContentSection.tsx index 3aeacdcd..f2069821 100644 --- a/apps/web/components/dashboard/preview/LinkContentSection.tsx +++ b/apps/web/components/dashboard/preview/LinkContentSection.tsx @@ -10,7 +10,11 @@ import { } from "@/components/ui/select"; import { ScrollArea } from "@radix-ui/react-scroll-area"; -import { ZBookmark, ZBookmarkedLink } from "@hoarder/shared/types/bookmarks"; +import { + BookmarkTypes, + ZBookmark, + ZBookmarkedLink, +} from "@hoarder/shared/types/bookmarks"; function FullPageArchiveSection({ link }: { link: ZBookmarkedLink }) { return ( @@ -63,7 +67,7 @@ export default function LinkContentSection({ }) { const [section, setSection] = useState<string>("cached"); - if (bookmark.content.type != "link") { + if (bookmark.content.type != BookmarkTypes.LINK) { throw new Error("Invalid content type"); } diff --git a/apps/web/components/dashboard/preview/TextContentSection.tsx b/apps/web/components/dashboard/preview/TextContentSection.tsx index 2df1e964..76cb23ea 100644 --- a/apps/web/components/dashboard/preview/TextContentSection.tsx +++ b/apps/web/components/dashboard/preview/TextContentSection.tsx @@ -1,10 +1,10 @@ import { MarkdownComponent } from "@/components/ui/markdown-component"; import { ScrollArea } from "@radix-ui/react-scroll-area"; -import type { ZBookmark } from "@hoarder/shared/types/bookmarks"; +import { BookmarkTypes, ZBookmark } from "@hoarder/shared/types/bookmarks"; export function TextContentSection({ bookmark }: { bookmark: ZBookmark }) { - if (bookmark.content.type != "text") { + if (bookmark.content.type != BookmarkTypes.TEXT) { throw new Error("Invalid content type"); } return ( diff --git a/apps/workers/crawlerWorker.ts b/apps/workers/crawlerWorker.ts index c0e1bd1b..f2a51fc8 100644 --- a/apps/workers/crawlerWorker.ts +++ b/apps/workers/crawlerWorker.ts @@ -52,6 +52,7 @@ import { triggerSearchReindex, zCrawlLinkRequestSchema, } from "@hoarder/shared/queues"; +import { BookmarkTypes } from "@hoarder/shared/types/bookmarks"; const metascraperParser = metascraper([ metascraperAmazon(), @@ -500,6 +501,11 @@ async function handleAsAssetBookmark( fileName: path.basename(new URL(url).pathname), sourceUrl: url, }); + // Switch the type of the bookmark from LINK to ASSET + await trx + .update(bookmarks) + .set({ type: BookmarkTypes.ASSET }) + .where(eq(bookmarks.id, bookmarkId)); await trx.delete(bookmarkLinks).where(eq(bookmarkLinks.id, bookmarkId)); }); } |
