aboutsummaryrefslogtreecommitdiffstats
path: root/packages/web/lib/services
diff options
context:
space:
mode:
authorMohamedBassem <me@mbassem.com>2024-02-08 15:14:23 +0000
committerMohamedBassem <me@mbassem.com>2024-02-08 15:15:21 +0000
commit80bb8a108f29331cdb2f2695f6801beee104dc89 (patch)
treeb1ae2a512963a9c916c4bfed71f7633f508de131 /packages/web/lib/services
parent333429adbaaa592cc96b480a5228f0e3f1de4cc2 (diff)
downloadkarakeep-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.ts78
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);
+}