How do you get current user when adding data to prisma database using create()?
Unanswered
Ocicat posted this in #help-forum
OcicatOP
How do I pass in the current user as author?
components/new-atomic-proposition.tsx
app/api/atomic-proposition/route.ts
Relevant schema.prisma models:
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:
And added a file in app/api/auth/index.ts with this line of code:
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';