From fa8286aa900ea4f13c1c15d5b0f441436f042d8a Mon Sep 17 00:00:00 2001 From: Mohamed Bassem Date: Sun, 3 Nov 2024 17:30:17 +0000 Subject: feature(web): Add the ability to view the bookmarks of a particular rss feed --- packages/shared/types/bookmarks.ts | 1 + packages/trpc/routers/bookmarks.ts | 14 ++++++++++++++ packages/trpc/routers/feeds.ts | 20 ++++++++++++++++++++ 3 files changed, 35 insertions(+) (limited to 'packages') diff --git a/packages/shared/types/bookmarks.ts b/packages/shared/types/bookmarks.ts index 2d46684e..1d8052f4 100644 --- a/packages/shared/types/bookmarks.ts +++ b/packages/shared/types/bookmarks.ts @@ -133,6 +133,7 @@ export const zGetBookmarksRequestSchema = z.object({ favourited: z.boolean().optional(), tagId: z.string().optional(), listId: z.string().optional(), + rssFeedId: z.string().optional(), limit: z.number().max(MAX_NUM_BOOKMARKS_PER_PAGE).optional(), cursor: zCursorV2.nullish(), // TODO: This was done for backward comptability. At this point, all clients should be settings this to true. diff --git a/packages/trpc/routers/bookmarks.ts b/packages/trpc/routers/bookmarks.ts index 9a27c25a..4e58bcdc 100644 --- a/packages/trpc/routers/bookmarks.ts +++ b/packages/trpc/routers/bookmarks.ts @@ -18,6 +18,7 @@ import { bookmarksInLists, bookmarkTags, bookmarkTexts, + rssFeedImportsTable, tagsOnBookmarks, } from "@hoarder/db/schema"; import { deleteAsset } from "@hoarder/shared/assetdb"; @@ -591,6 +592,19 @@ export const bookmarksAppRouter = router({ ), ) : undefined, + input.rssFeedId !== undefined + ? exists( + ctx.db + .select() + .from(rssFeedImportsTable) + .where( + and( + eq(rssFeedImportsTable.bookmarkId, bookmarks.id), + eq(rssFeedImportsTable.rssFeedId, input.rssFeedId), + ), + ), + ) + : undefined, input.listId !== undefined ? exists( ctx.db diff --git a/packages/trpc/routers/feeds.ts b/packages/trpc/routers/feeds.ts index a8025dfb..e5520474 100644 --- a/packages/trpc/routers/feeds.ts +++ b/packages/trpc/routers/feeds.ts @@ -82,6 +82,26 @@ export const feedsAppRouter = router({ } return feed[0]; }), + get: authedProcedure + .input( + z.object({ + feedId: z.string(), + }), + ) + .output(zFeedSchema) + .use(ensureFeedOwnership) + .query(async ({ ctx, input }) => { + const feed = await ctx.db.query.rssFeedsTable.findFirst({ + where: and( + eq(rssFeedsTable.userId, ctx.user.id), + eq(rssFeedsTable.id, input.feedId), + ), + }); + if (!feed) { + throw new TRPCError({ code: "NOT_FOUND" }); + } + return feed; + }), list: authedProcedure .output(z.object({ feeds: z.array(zFeedSchema) })) .query(async ({ ctx }) => { -- cgit v1.2.3-70-g09d2