79 lines
2.3 KiB
TypeScript
79 lines
2.3 KiB
TypeScript
'use server'
|
|
|
|
import { prisma } from "@/lib/prisma";
|
|
import { redirect } from "next/navigation";
|
|
import { revalidatePath } from "next/cache";
|
|
import { z } from "zod";
|
|
import { hashPassword } from "@/lib/auth";
|
|
|
|
const updateSchema = z.object({
|
|
plan: z.enum(["trial", "starter", "standard", "premium"]),
|
|
status: z.enum(["active", "suspended", "expired"]),
|
|
});
|
|
|
|
export async function updateSubscription(establishmentId: string, formData: FormData) {
|
|
const plan = formData.get("plan") as string;
|
|
const status = formData.get("status") as string;
|
|
|
|
const parsed = updateSchema.safeParse({ plan, status });
|
|
if (!parsed.success) {
|
|
throw new Error("Données invalides");
|
|
}
|
|
|
|
await prisma.subscription.update({
|
|
where: { establishmentId },
|
|
data: {
|
|
plan: parsed.data.plan,
|
|
status: parsed.data.status,
|
|
},
|
|
});
|
|
|
|
revalidatePath(`/superadmin/establishments/${establishmentId}`);
|
|
}
|
|
|
|
export async function deleteEstablishment(establishmentId: string) {
|
|
await prisma.establishment.delete({
|
|
where: { id: establishmentId },
|
|
});
|
|
redirect("/superadmin/establishments");
|
|
}
|
|
|
|
const createAdminSchema = z.object({
|
|
email: z.string().email("Email invalide"),
|
|
password: z.string().min(8, "Le mot de passe doit contenir au moins 8 caractères"),
|
|
});
|
|
|
|
export async function createAdmin(establishmentId: string, formData: FormData) {
|
|
const email = formData.get("email") as string;
|
|
const password = formData.get("password") as string;
|
|
|
|
const parsed = createAdminSchema.safeParse({ email, password });
|
|
if (!parsed.success) {
|
|
throw new Error(parsed.error.issues.map((e) => e.message).join(", "));
|
|
}
|
|
|
|
const existing = await prisma.user.findUnique({ where: { email: parsed.data.email } });
|
|
if (existing) throw new Error("Cet email est déjà utilisé");
|
|
|
|
const hashed = await hashPassword(parsed.data.password);
|
|
|
|
await prisma.user.create({
|
|
data: {
|
|
email: parsed.data.email,
|
|
password: hashed,
|
|
role: "admin",
|
|
establishmentId,
|
|
},
|
|
});
|
|
|
|
revalidatePath(`/superadmin/establishments/${establishmentId}`);
|
|
}
|
|
|
|
export async function deleteAdmin(establishmentId: string, userId: string) {
|
|
await prisma.user.deleteMany({
|
|
where: { id: userId, establishmentId, role: "admin" },
|
|
});
|
|
|
|
revalidatePath(`/superadmin/establishments/${establishmentId}`);
|
|
}
|