72 lines
2.0 KiB
TypeScript
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);
|
|
}
|
|
}
|