import { NextResponse } from "next/server"; import { z } from "zod"; import { db } from "@/lib/db"; // get likes from user export async function GET(request: Request) { const { searchParams } = new URL(request.url); const user_id = searchParams.get("user_id") || undefined; const userIdSchema = z.string().cuid(); const zod = userIdSchema.safeParse(user_id); if (!zod.success) { return NextResponse.json( { message: "Invalid request body", error: zod.error.formErrors, }, { status: 400 }, ); } try { const gweets = await db.gweet.findMany({ where: { likes: { some: { userId: user_id, }, }, }, include: { author: true, media: true, likes: true, regweets: true, allComments: true, }, }); return NextResponse.json(gweets, { status: 200 }); } catch (error: any) { return NextResponse.json( { message: "Something went wrong", error: error.message, }, { status: error.errorCode || 500 }, ); } } // like and dislike export async function POST(request: Request) { const { gweet_id, user_id } = await request.json(); const likeSchema = z .object({ gweet_id: z.string().cuid(), user_id: z.string().cuid(), }) .strict(); const zod = likeSchema.safeParse({ gweet_id, user_id }); if (!zod.success) { return NextResponse.json( { message: "Invalid request body", error: zod.error.formErrors, }, { status: 400 }, ); } try { const like = await db.like.findFirst({ where: { gweetId: gweet_id, userId: user_id, }, }); if (like) { await db.like.delete({ where: { id: like.id, }, }); return NextResponse.json({ message: "Gweet unliked" }); } else { await db.like.create({ data: { gweetId: gweet_id, userId: user_id, }, }); return NextResponse.json({ message: "Gweet liked" }); } } catch (error: any) { return NextResponse.json({ message: "Something went wrong", error: error.message, }); } }