Next.js Discord

Discord Forum

How do you get current user when adding data to prisma database using create()?

Unanswered
Ocicat posted this in #help-forum
Open in Discord
OcicatOP
How do I pass in the current user as author?

components/new-atomic-proposition.tsx
"use client";
import { useState } from "react";
import { useRouter } from "next/navigation";

export const NewAtomicProposition = () => {
  const [newItem, setNewItem] = useState("");

  const router = useRouter();
  const create = async (e: React.SyntheticEvent) => {
    e.preventDefault();
    await fetch(`/api/atomic-proposition`, {
      method: "POST",
      credentials: "include",
      headers: {
        "Content-Type": "application/json",
      },
      body: JSON.stringify({
        content: newItem,
      }),
    });

    router.refresh();
    setNewItem("");
  };
  return (
    <div>
      <form onSubmit={create}>
        <input
          type="text"
          name="content"
          value={newItem}
          onChange={(e) => setNewItem(e.target.value)}
          placeholder="Atomic proposition"
          required
        />
        <button
          type="submit"
        >
          <p className=" text-center">Save</p>
        </button>
      </form>
    </div>
  );
};


app/api/atomic-proposition/route.ts
import { NextResponse } from "next/server";
import prisma from "@/lib/prisma";

export async function POST(req: Request) {
  const { content, author } = await req.json();

  await prisma.atomicProposition.create({
    data: { content, author},
  });

  return NextResponse.json({ message: "Created atomic proposition" }, { status: 200 });
}


Relevant schema.prisma models:
model User {
  id                 Int                 @id @default(autoincrement())
  email              String              @unique
  password           String
  atomicPropositions AtomicProposition[]
}

model AtomicProposition {
  id           Int            @id @default(autoincrement())
  content      String
  authorId     Int
  dateCreated  DateTime       @default(now())
  datePosted   DateTime?
  author       User           @relation(fields: [authorId], references: [id])
}

1 Reply

OcicatOP
For anybody else who has a similar problem, here's how I solved it:

I changed my app/api/atomic-proposition/route.ts to:
import { NextResponse } from "next/server";
import prisma from "@/lib/prisma";
import { getServerSession } from "next-auth";
import { authOptions } from "@/app/api/auth";

export async function POST(req: Request) {
  const session = await getServerSession(authOptions);

  if (!session) {
    return NextResponse.json({ message: "Unauthorized", error: true }, { status: 401 });
  }

  const { content } = await req.json();

  const createdAtomicProposition = await prisma.atomicProposition.create({
    data: {
      content,
      author: {
        connect: { email: session.user?.email ?? '' },
      },
    },
  });

  return NextResponse.json({ message: "Created atomic proposition", data: createdAtomicProposition }, { status: 200 });
}


And added a file in app/api/auth/index.ts with this line of code:
export { authOptions } from './[...nextauth]/route';