80 lines
1.6 KiB
TypeScript

"use server";
import { auth } from "@/auth";
import { isEmailVerified } from "@/util/isEmailVerified";
import { redirect } from "next/navigation";
import { prisma } from "@/prisma/prismaClient";
export const saveSchemaDb = async (s: Schema) => {
const sesh = await auth();
if (!sesh?.user?.id) return;
const { id } = await prisma.schema.upsert({
// data: {
// ...s,
// },
create: {
...s,
version: 0,
authorId: sesh.user.id,
id: undefined,
},
update: s,
where: {
id: s.id,
},
select: {
id: true,
},
});
redirect(`/game-systems/${s.gameSystemId}/schema/${id}`);
};
export const findSchema = async (id: string): Promise<Schema | null> => {
const schema = await prisma.schema.findFirst({
where: {
id,
},
// include: {
// gameSystem: {
// select: {
// id: true,
// name: true,
// },
// },
// },
select: {
id: true,
name: true,
schema: true,
types: true,
},
});
if (!schema) return null;
return schema as Schema;
};
export const createSchema = async (form: FormData) => {
const name = form.get("name")?.toString();
const gsId = form.get("gsId")?.toString();
const session = await auth();
if (!name || !gsId || !session?.user?.id || !isEmailVerified(session.user.id))
return;
const { id } = await prisma.schema.create({
data: {
name,
schema: "{}",
types: "{}",
version: 0,
gameSystemId: gsId,
authorId: session.user.id,
},
select: { id: true },
});
redirect(`/game-systems/${gsId}/schema/${id}`);
};