Skip to content
Snippets Groups Projects
route.ts 2.98 KiB
import { NextResponse } from "next/server"
import { z } from "zod"

import { db } from "@/lib/db"

export async function GET(request: Request, { params }: { params: { id: string } }) {
    const { id } = params

    const gweetIdSchema = z.string().cuid()

    const zod = gweetIdSchema.safeParse(id)

    if (!zod.success) {
        return NextResponse.json({
            message: "Invalid request body",
            error: zod.error.formErrors,
        }, { status: 400 })
    }

    try {
        const gweet = await db.gweet.findUnique({
            where: {
                id,
            },
            include: {
                author: {
                    select: {
                        id: true,
                        username: true,
                        name: true,
                        image: true,
                    },
                },
                likes: {
                    include: {
                        user: {
                            include: {
                                followers: true,
                            },
                        },
                    },
                    orderBy: {
                        createdAt: "desc",
                    },
                },
                media: true,
                regweets: {
                    include: {
                        user: {
                            include: {
                                followers: true,
                            },
                        },
                    },
                    orderBy: {
                        createdAt: "desc",
                    },
                },
                quote: {
                    include: {
                        author: true,
                        media: true,
                    },
                },
                allQuotes: {
                    include: {
                        likes: true,
                        regweets: true,
                        author: true,
                        quote: {
                            include: {
                                author: true,
                            },
                        },
                    },

                    orderBy: {
                        createdAt: "desc",
                    },
                },
                comment: {
                    include: {
                        author: {
                            select: {
                                id: true,
                                username: true,
                            },
                        },
                    },
                },
                allComments: true,
            },
        })

        if (!gweet) {
            return NextResponse.json({
                message: "Gweet not found",
            }, { status: 404 })
        }

        return NextResponse.json(gweet, { status: 200 })
    } catch (error) {
        return NextResponse.json({
            message: "Something went wrong",
            error,
        }, { status: 500 })
    }
}