80 lines
1.6 KiB
TypeScript
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}`);
|
|
};
|