131 lines
2.8 KiB
TypeScript
131 lines
2.8 KiB
TypeScript
"use server";
|
|
import { validateRequest } from "@/server/auth";
|
|
import { UserRole } from "@/server/auth/permissions";
|
|
import { db } from "@/server/db";
|
|
import { printers, users } from "@/server/db/schema";
|
|
import { IS_NOT, guard } from "@/utils/guard";
|
|
import strings from "@/utils/strings";
|
|
import { type InferInsertModel, eq } from "drizzle-orm";
|
|
import { revalidatePath } from "next/cache";
|
|
|
|
export async function createPrinter(printer: InferInsertModel<typeof printers>) {
|
|
const { user } = await validateRequest();
|
|
|
|
if (guard(user, IS_NOT, UserRole.ADMIN)) {
|
|
return {
|
|
error: strings.ERROR.PERMISSION,
|
|
};
|
|
}
|
|
|
|
const dbUser = await db.query.users.findFirst({
|
|
// biome-ignore lint/style/noNonNullAssertion: guard already checks against null
|
|
where: eq(users.id, user!.id),
|
|
});
|
|
|
|
if (guard(dbUser, IS_NOT, UserRole.ADMIN)) {
|
|
return {
|
|
error: strings.ERROR.PERMISSION,
|
|
};
|
|
}
|
|
|
|
if (!printer) {
|
|
return {
|
|
error: "Druckerdaten sind erforderlich.",
|
|
};
|
|
}
|
|
|
|
try {
|
|
await db.insert(printers).values(printer);
|
|
} catch (error) {
|
|
return {
|
|
error: "Drucker konnte nicht hinzugefügt werden.",
|
|
};
|
|
}
|
|
|
|
revalidatePath("/");
|
|
}
|
|
|
|
export async function updatePrinter(id: string, data: InferInsertModel<typeof printers>) {
|
|
const { user } = await validateRequest();
|
|
|
|
if (guard(user, IS_NOT, UserRole.ADMIN)) {
|
|
return {
|
|
error: strings.ERROR.PERMISSION,
|
|
};
|
|
}
|
|
|
|
const dbUser = await db.query.users.findFirst({
|
|
// biome-ignore lint/style/noNonNullAssertion: guard already checks against null
|
|
where: eq(users.id, user!.id),
|
|
});
|
|
|
|
if (guard(dbUser, IS_NOT, UserRole.ADMIN)) {
|
|
return {
|
|
error: strings.ERROR.PERMISSION,
|
|
};
|
|
}
|
|
|
|
if (!data) {
|
|
return {
|
|
error: "Druckerdaten sind erforderlich.",
|
|
};
|
|
}
|
|
|
|
try {
|
|
await db.update(printers).set(data).where(eq(printers.id, id));
|
|
} catch (error) {
|
|
return {
|
|
error: "Druckerdaten sind erforderlich.",
|
|
};
|
|
}
|
|
|
|
revalidatePath("/");
|
|
}
|
|
|
|
export async function deletePrinter(id: string) {
|
|
const { user } = await validateRequest();
|
|
|
|
if (guard(user, IS_NOT, UserRole.ADMIN)) {
|
|
return {
|
|
error: strings.ERROR.PERMISSION,
|
|
};
|
|
}
|
|
|
|
const dbUser = await db.query.users.findFirst({
|
|
// biome-ignore lint/style/noNonNullAssertion: guard already checks against null
|
|
where: eq(users.id, user!.id),
|
|
});
|
|
|
|
if (guard(dbUser, IS_NOT, UserRole.ADMIN)) {
|
|
return {
|
|
error: strings.ERROR.PERMISSION,
|
|
};
|
|
}
|
|
|
|
try {
|
|
await db.delete(printers).where(eq(printers.id, id));
|
|
} catch (error) {
|
|
if (error instanceof Error) {
|
|
return {
|
|
error: error.message,
|
|
};
|
|
}
|
|
return {
|
|
error: "Ein unbekannter Fehler ist aufgetreten.",
|
|
};
|
|
}
|
|
|
|
revalidatePath("/");
|
|
}
|
|
|
|
export async function getPrinters() {
|
|
return await db.query.printers.findMany({
|
|
with: {
|
|
printJobs: {
|
|
limit: 1,
|
|
orderBy: (printJobs, { desc }) => [desc(printJobs.startAt)],
|
|
},
|
|
},
|
|
});
|
|
}
|