diff options
| author | Mohamed Bassem <me@mbassem.com> | 2025-01-11 18:09:51 +0000 |
|---|---|---|
| committer | Mohamed Bassem <me@mbassem.com> | 2025-01-11 18:09:51 +0000 |
| commit | 10506173cd5309e7c63d83055243abc67cecad4f (patch) | |
| tree | f37f7dd704c63e34a1e5b0bffdda442b03179d9c /packages/trpc/routers | |
| parent | 107d923b3abd60329463957ca4604107b3427b2c (diff) | |
| download | karakeep-10506173cd5309e7c63d83055243abc67cecad4f.tar.zst | |
feat: Add support for singlefile extension uploads. #172
Diffstat (limited to 'packages/trpc/routers')
| -rw-r--r-- | packages/trpc/routers/bookmarks.ts | 41 |
1 files changed, 36 insertions, 5 deletions
diff --git a/packages/trpc/routers/bookmarks.ts b/packages/trpc/routers/bookmarks.ts index 15e4cb7c..026bd322 100644 --- a/packages/trpc/routers/bookmarks.ts +++ b/packages/trpc/routers/bookmarks.ts @@ -22,7 +22,10 @@ import { rssFeedImportsTable, tagsOnBookmarks, } from "@hoarder/db/schema"; -import { deleteAsset } from "@hoarder/shared/assetdb"; +import { + deleteAsset, + SUPPORTED_BOOKMARK_ASSET_TYPES, +} from "@hoarder/shared/assetdb"; import serverConfig from "@hoarder/shared/config"; import { InferenceClientFactory } from "@hoarder/shared/inference"; import { buildSummaryPrompt } from "@hoarder/shared/prompts"; @@ -98,9 +101,6 @@ export const ensureAssetOwnership = async (opts: { }) => { const asset = await opts.ctx.db.query.assets.findFirst({ where: eq(bookmarks.id, opts.assetId), - columns: { - userId: true, - }, }); if (!opts.ctx.user) { throw new TRPCError({ @@ -120,6 +120,7 @@ export const ensureAssetOwnership = async (opts: { message: "User is not allowed to access resource", }); } + return asset; }; async function getBookmark(ctx: AuthedContext, bookmarkId: string) { @@ -307,6 +308,24 @@ export const bookmarksAppRouter = router({ }) .returning() )[0]; + if (input.precrawledArchiveId) { + await ensureAssetOwnership({ + ctx, + assetId: input.precrawledArchiveId, + }); + await tx + .update(assets) + .set({ + bookmarkId: bookmark.id, + assetType: AssetTypes.LINK_PRECRAWLED_ARCHIVE, + }) + .where( + and( + eq(assets.id, input.precrawledArchiveId), + eq(assets.userId, ctx.user.id), + ), + ); + } content = { type: BookmarkTypes.LINK, ...link, @@ -344,7 +363,19 @@ export const bookmarksAppRouter = router({ sourceUrl: null, }) .returning(); - await ensureAssetOwnership({ ctx, assetId: input.assetId }); + const uploadedAsset = await ensureAssetOwnership({ + ctx, + assetId: input.assetId, + }); + if ( + !uploadedAsset.contentType || + !SUPPORTED_BOOKMARK_ASSET_TYPES.has(uploadedAsset.contentType) + ) { + throw new TRPCError({ + code: "BAD_REQUEST", + message: "Unsupported asset type", + }); + } await tx .update(assets) .set({ |
