diff options
| author | MohamedBassem <me@mbassem.com> | 2024-02-08 15:14:23 +0000 |
|---|---|---|
| committer | MohamedBassem <me@mbassem.com> | 2024-02-08 15:15:21 +0000 |
| commit | 80bb8a108f29331cdb2f2695f6801beee104dc89 (patch) | |
| tree | b1ae2a512963a9c916c4bfed71f7633f508de131 /packages/web/lib/services | |
| parent | 333429adbaaa592cc96b480a5228f0e3f1de4cc2 (diff) | |
| download | karakeep-80bb8a108f29331cdb2f2695f6801beee104dc89.tar.zst | |
[refactor] Move the different packages to the package subdir
Diffstat (limited to 'packages/web/lib/services')
| -rw-r--r-- | packages/web/lib/services/links.ts | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/packages/web/lib/services/links.ts b/packages/web/lib/services/links.ts new file mode 100644 index 00000000..d273b118 --- /dev/null +++ b/packages/web/lib/services/links.ts @@ -0,0 +1,78 @@ +import { LinkCrawlerQueue } from "@remember/shared/queues"; +import prisma from "@remember/db"; +import { ZBookmarkedLink } from "@/lib/types/api/links"; + +const defaultLinkFields = { + id: true, + url: true, + createdAt: true, + details: { + select: { + title: true, + description: true, + imageUrl: true, + favicon: true, + }, + }, + tags: { + include: { + tag: true, + }, + }, +}; + +async function dummyPrismaReturnType() { + return await prisma.bookmarkedLink.findFirstOrThrow({ + select: defaultLinkFields, + }); +} + +function toZodSchema( + link: Awaited<ReturnType<typeof dummyPrismaReturnType>>, +): ZBookmarkedLink { + return { + id: link.id, + url: link.url, + createdAt: link.createdAt, + details: link.details, + tags: link.tags.map((t) => t.tag), + }; +} + +export async function unbookmarkLink(linkId: string, userId: string) { + await prisma.bookmarkedLink.delete({ + where: { + id: linkId, + userId, + }, + }); +} + +export async function bookmarkLink(url: string, userId: string) { + const link = await prisma.bookmarkedLink.create({ + data: { + url, + userId, + }, + select: defaultLinkFields, + }); + + // Enqueue crawling request + await LinkCrawlerQueue.add("crawl", { + linkId: link.id, + url: link.url, + }); + + return toZodSchema(link); +} + +export async function getLinks(userId: string) { + return ( + await prisma.bookmarkedLink.findMany({ + where: { + userId, + }, + select: defaultLinkFields, + }) + ).map(toZodSchema); +} |
