45 lines
915 B
TypeScript
45 lines
915 B
TypeScript
'use server';
|
|
|
|
import { CreateCommentFormSchema } from '../../../../../../data/types';
|
|
import prisma from '../../../../../../prisma/prisma';
|
|
|
|
interface ItemDialogActionProps {
|
|
clear: boolean;
|
|
itemId: string;
|
|
error?: string;
|
|
}
|
|
|
|
export async function CreateCommentAction(
|
|
{ itemId }: ItemDialogActionProps,
|
|
formData: FormData
|
|
) {
|
|
const formDataObj = Object.fromEntries(formData.entries());
|
|
|
|
const validatedBody = CreateCommentFormSchema.safeParse(formDataObj);
|
|
|
|
if (!validatedBody.success) {
|
|
throw new Error('Bad request');
|
|
}
|
|
|
|
const { body, score, regret } = validatedBody.data;
|
|
|
|
try {
|
|
await prisma.itemComment.create({
|
|
data: {
|
|
body,
|
|
score,
|
|
regret,
|
|
Item: {
|
|
connect: {
|
|
id: itemId
|
|
}
|
|
}
|
|
}
|
|
});
|
|
} catch (error) {
|
|
throw new Error(`Failed to create comment`);
|
|
}
|
|
|
|
return { clear: true, itemId };
|
|
}
|