Files
desa-darmasaba/src/app/api/[[...slugs]]/_lib/ekonomi/pasar-desa/create.ts

72 lines
2.0 KiB
TypeScript

import prisma from "@/lib/prisma";
import { Context } from "elysia";
type FormCreate = {
nama: string;
harga: number;
alamatUsaha: string;
imageId: string;
rating: number;
kategoriId: string[];
kontak: string;
// Array of KategoriProduk IDs
};
export default async function pasarDesaCreate(context: Context) {
const body = context.body as FormCreate;
if (!body.kategoriId || body.kategoriId.length === 0) {
throw new Error("At least one kategoriId is required");
}
try {
// Start a transaction to ensure data consistency
const result = await prisma.$transaction(async (prisma) => {
// 1. Create PasarDesa with the first kategoriId as the main category
const pasarDesa = await prisma.pasarDesa.create({
data: {
nama: body.nama,
harga: Number(body.harga),
alamatUsaha: body.alamatUsaha,
imageId: body.imageId,
rating: Number(body.rating),
kategoriProdukId: body.kategoriId[0],
kontak: body.kontak
// Use the first category as the main one
},
});
// 2. Create category relationships in KategoriToPasar for all categories
await prisma.kategoriToPasar.createMany({
data: body.kategoriId.map((kategoriId) => ({
pasarDesaId: pasarDesa.id,
kategoriId: kategoriId, // Note: The field is 'kategoriId' in the schema, not 'kategoriProdukId'
})),
});
// 3. Get the complete data with relationships
return await prisma.pasarDesa.findUnique({
where: { id: pasarDesa.id },
include: {
image: true,
kategoriProduk: true,
KategoriToPasar: {
include: {
kategori: true,
},
},
},
});
});
return {
success: true,
message: "Sukses menambahkan pasar desa",
data: result,
};
} catch (error) {
console.error("Error creating PasarDesa:", error);
throw new Error("Failed to create PasarDesa: " + (error as Error).message);
}
}