diff options
| author | MohamedBassem <me@mbassem.com> | 2024-02-06 12:26:29 +0000 |
|---|---|---|
| committer | MohamedBassem <me@mbassem.com> | 2024-02-06 12:26:29 +0000 |
| commit | 083ea5bd19172381bb53e95aaf98eaabef839c54 (patch) | |
| tree | 4d1c041aab7cd8d15382330db08caeb9c5a12c63 /web/app/api | |
| parent | b792121977ade8bdd3fb62704b65a9fcbd1436b9 (diff) | |
| download | karakeep-083ea5bd19172381bb53e95aaf98eaabef839c54.tar.zst | |
Move the web app into a subdir
Diffstat (limited to 'web/app/api')
| -rw-r--r-- | web/app/api/auth/[...nextauth]/route.tsx | 3 | ||||
| -rw-r--r-- | web/app/api/v1/links/route.ts | 60 |
2 files changed, 63 insertions, 0 deletions
diff --git a/web/app/api/auth/[...nextauth]/route.tsx b/web/app/api/auth/[...nextauth]/route.tsx new file mode 100644 index 00000000..bfcda516 --- /dev/null +++ b/web/app/api/auth/[...nextauth]/route.tsx @@ -0,0 +1,3 @@ +import { authHandler } from "@/lib/auth"; + +export { authHandler as GET, authHandler as POST } diff --git a/web/app/api/v1/links/route.ts b/web/app/api/v1/links/route.ts new file mode 100644 index 00000000..5be1018e --- /dev/null +++ b/web/app/api/v1/links/route.ts @@ -0,0 +1,60 @@ +import { authOptions } from "@/lib/auth"; +import prisma from "@/lib/prisma"; +import { ZNewBookmarkedLinkRequest, ZGetLinksResponse, ZBookmarkedLink } from "@/lib/types/api/links"; +import { getServerSession } from "next-auth"; +import { NextRequest, NextResponse } from "next/server"; + +export async function POST(request: NextRequest) { + // TODO: We probably should be using an API key here instead of the session; + const session = await getServerSession(authOptions); + if (!session) { + return new Response(null, { status: 401 }); + } + + const linkRequest = ZNewBookmarkedLinkRequest.safeParse(await request.json()); + + if (!linkRequest.success) { + return NextResponse.json({ + error: linkRequest.error.toString(), + }, { status: 400 }); + } + + const link = await prisma.bookmarkedLink.create({ + data: { + url: linkRequest.data.url, + userId: session.user.id, + } + }); + + let response: ZBookmarkedLink = { ...link }; + + return NextResponse.json(response, { status: 201 }); +} + +export async function GET() { + // TODO: We probably should be using an API key here instead of the session; + const session = await getServerSession(authOptions); + if (!session) { + return new Response(null, { status: 401 }); + } + const links = await prisma.bookmarkedLink.findMany({ + where: { + userId: session.user.id, + }, + select: { + id: true, + url: true, + createdAt: true, + details: { + select: { + title: true, + description: true, + imageUrl: true, + } + }, + } + }); + + let response: ZGetLinksResponse = { links }; + return NextResponse.json(response); +} |
