Add extras and options CRUD, add sidebar, add kanban board, udpate packages
This commit is contained in:
@ -0,0 +1,27 @@
|
||||
"use server";
|
||||
|
||||
import { revalidatePath } from "next/cache";
|
||||
import { z } from "zod";
|
||||
|
||||
import { COMMISSION_STATUSES } from "@/lib/commissions/kanban";
|
||||
import { prisma } from "@/lib/prisma"; // adjust to your prisma import
|
||||
// import { requireAdmin } from "@/lib/auth/requireAdmin"; // recommended if you have it
|
||||
|
||||
const schema = z.object({
|
||||
id: z.string().min(1),
|
||||
status: z.enum(COMMISSION_STATUSES),
|
||||
});
|
||||
|
||||
export async function updateCommissionRequestStatus(input: z.infer<typeof schema>) {
|
||||
// await requireAdmin(); // enforce auth/role check here
|
||||
|
||||
const { id, status } = schema.parse(input);
|
||||
|
||||
await prisma.commissionRequest.update({
|
||||
where: { id },
|
||||
data: { status },
|
||||
});
|
||||
|
||||
// revalidate the board page so a refresh always reflects server truth
|
||||
revalidatePath("/commissions/board");
|
||||
}
|
||||
30
src/actions/commissions/types/extras.ts
Normal file
30
src/actions/commissions/types/extras.ts
Normal file
@ -0,0 +1,30 @@
|
||||
"use server";
|
||||
|
||||
import { prisma } from "@/lib/prisma";
|
||||
import { commissionExtraSchema } from "@/schemas/commissionType";
|
||||
import { revalidatePath } from "next/cache";
|
||||
|
||||
const LIST_PATH = "/commissions/extras";
|
||||
|
||||
export async function createCommissionExtra(input: unknown) {
|
||||
const data = commissionExtraSchema.parse(input);
|
||||
const created = await prisma.commissionExtra.create({ data });
|
||||
revalidatePath(LIST_PATH);
|
||||
return created;
|
||||
}
|
||||
|
||||
export async function updateCommissionExtra(id: string, input: unknown) {
|
||||
const data = commissionExtraSchema.parse(input);
|
||||
const updated = await prisma.commissionExtra.update({ where: { id }, data });
|
||||
revalidatePath(LIST_PATH);
|
||||
return updated;
|
||||
}
|
||||
|
||||
export async function deleteCommissionExtra(id: string) {
|
||||
// Optional safety:
|
||||
// const used = await prisma.commissionTypeExtra.count({ where: { extraId: id } });
|
||||
// if (used > 0) throw new Error("Extra is linked to types.");
|
||||
console.log("TBD");
|
||||
// await prisma.commissionExtra.delete({ where: { id } });
|
||||
// revalidatePath(LIST_PATH);
|
||||
}
|
||||
45
src/actions/commissions/types/options.ts
Normal file
45
src/actions/commissions/types/options.ts
Normal file
@ -0,0 +1,45 @@
|
||||
"use server";
|
||||
|
||||
import { prisma } from "@/lib/prisma";
|
||||
import { commissionOptionSchema } from "@/schemas/commissionType";
|
||||
import { revalidatePath } from "next/cache";
|
||||
|
||||
const LIST_PATH = "/commissions/options";
|
||||
|
||||
function toInt(v: string) {
|
||||
const n = Number.parseInt(v, 10);
|
||||
return Number.isFinite(n) ? n : 0;
|
||||
}
|
||||
|
||||
export async function createCommissionOption(input: unknown) {
|
||||
const data = commissionOptionSchema.parse(input);
|
||||
const created = await prisma.commissionOption.create({
|
||||
data: {
|
||||
name: data.name,
|
||||
description: data.description?.trim() ? data.description : null,
|
||||
sortIndex: toInt(data.sortIndex),
|
||||
},
|
||||
});
|
||||
revalidatePath(LIST_PATH);
|
||||
return created;
|
||||
}
|
||||
|
||||
export async function updateCommissionOption(id: string, input: unknown) {
|
||||
const data = commissionOptionSchema.parse(input);
|
||||
const updated = await prisma.commissionOption.update({
|
||||
where: { id },
|
||||
data: {
|
||||
name: data.name,
|
||||
description: data.description?.trim() ? data.description : null,
|
||||
sortIndex: toInt(data.sortIndex),
|
||||
},
|
||||
});
|
||||
revalidatePath(LIST_PATH);
|
||||
return updated;
|
||||
}
|
||||
|
||||
export async function deleteCommissionOption(id: string) {
|
||||
console.log("TBD");
|
||||
// await prisma.commissionOption.delete({ where: { id } });
|
||||
// revalidatePath(LIST_PATH);
|
||||
}
|
||||
Reference in New Issue
Block a user