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

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

// get a single gweet
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: {
        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",
          },
        },
      },
    });

    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 },
    );
  }
}