Kebutuhan Deploy

This commit is contained in:
2025-06-26 11:00:15 +08:00
parent 4683034cd7
commit 4f6cc66b7c
18 changed files with 219 additions and 173 deletions

View File

@@ -0,0 +1,32 @@
/*
Warnings:
- The primary key for the `DataKematian_Kelahiran` table will be changed. If it partially fails, the table could be left without primary key constraint.
- The `id` column on the `DataKematian_Kelahiran` table would be dropped and recreated. This will lead to data loss if there is data in the column.
- The primary key for the `GrafikKepuasan` table will be changed. If it partially fails, the table could be left without primary key constraint.
- The `id` column on the `GrafikKepuasan` table would be dropped and recreated. This will lead to data loss if there is data in the column.
- A unique constraint covering the columns `[uuid]` on the table `DataKematian_Kelahiran` will be added. If there are existing duplicate values, this will fail.
- A unique constraint covering the columns `[uuid]` on the table `GrafikKepuasan` will be added. If there are existing duplicate values, this will fail.
- The required column `uuid` was added to the `DataKematian_Kelahiran` table with a prisma-level default value. This is not possible if the table is not empty. Please add this column as optional, then populate it before making it required.
- The required column `uuid` was added to the `GrafikKepuasan` table with a prisma-level default value. This is not possible if the table is not empty. Please add this column as optional, then populate it before making it required.
*/
-- AlterTable
ALTER TABLE "DataKematian_Kelahiran" DROP CONSTRAINT "DataKematian_Kelahiran_pkey",
ADD COLUMN "uuid" TEXT NOT NULL,
DROP COLUMN "id",
ADD COLUMN "id" SERIAL NOT NULL,
ADD CONSTRAINT "DataKematian_Kelahiran_pkey" PRIMARY KEY ("id");
-- AlterTable
ALTER TABLE "GrafikKepuasan" DROP CONSTRAINT "GrafikKepuasan_pkey",
ADD COLUMN "uuid" TEXT NOT NULL,
DROP COLUMN "id",
ADD COLUMN "id" SERIAL NOT NULL,
ADD CONSTRAINT "GrafikKepuasan_pkey" PRIMARY KEY ("id");
-- CreateIndex
CREATE UNIQUE INDEX "DataKematian_Kelahiran_uuid_key" ON "DataKematian_Kelahiran"("uuid");
-- CreateIndex
CREATE UNIQUE INDEX "GrafikKepuasan_uuid_key" ON "GrafikKepuasan"("uuid");

View File

@@ -630,7 +630,8 @@ model PendaftaranJadwalKegiatan {
// ========================================= PERSENTASE KELAHIRAN & KEMATIAN ========================================= //
model DataKematian_Kelahiran {
id String @id @default(cuid())
id Int @id @default(autoincrement())
uuid String @default(cuid()) @unique
tahun String
kematianKasar String
kematianBayi String
@@ -643,7 +644,8 @@ model DataKematian_Kelahiran {
// ========================================= GRAFIK KEPUASAN ========================================= //
model GrafikKepuasan {
id String @id @default(cuid())
id Int @id @default(autoincrement())
uuid String @default(cuid()) @unique
label String
jumlah String
createdAt DateTime @default(now())

View File

@@ -39,15 +39,15 @@ const grafikkepuasan = proxy({
const res = await ApiFetch.api.kesehatan.grafikkepuasan["create"].post(grafikkepuasan.create.form);
if (res.status === 200) {
const id = res.data?.data?.id;
if (id) {
const uuid = res.data?.data?.uuid;
if (uuid) {
toast.success("Success create");
grafikkepuasan.create.form = {
label: "",
jumlah: "",
};
grafikkepuasan.findMany.load();
return id;
return uuid;
}
}
toast.error("failed create");
@@ -77,9 +77,9 @@ const grafikkepuasan = proxy({
data: null as Prisma.GrafikKepuasanGetPayload<{
omit: { isActive: true }
}> | null,
async load(id: string) {
async load(uuid: string) {
try {
const res = await fetch(`/api/kesehatan/grafikkepuasan/${id}`);
const res = await fetch(`/api/kesehatan/grafikkepuasan/${uuid}`);
if (res.ok) {
const data = await res.json();
grafikkepuasan.findUnique.data = data.data ?? null;
@@ -94,14 +94,14 @@ const grafikkepuasan = proxy({
},
},
update: {
id: "",
uuid: "",
form: {...defaultForm},
loading: false,
async byId() {
},
async submit() {
const id = this.id;
if (!id) {
const uuid = this.uuid;
if (!uuid) {
toast.warn("ID tidak valid");
return null;
}
@@ -114,7 +114,7 @@ const grafikkepuasan = proxy({
}
try {
this.loading = true;
const response = await fetch(`/api/kesehatan/grafikkepuasan/${id}`, {
const response = await fetch(`/api/kesehatan/grafikkepuasan/${uuid}`, {
method: "PUT",
headers: {
"Content-Type": "application/json",
@@ -143,14 +143,14 @@ const grafikkepuasan = proxy({
},
delete: {
loading: false,
async byId(id: string) {
if (!id) {
async byId(uuid: string) {
if (!uuid) {
return toast.warn("ID tidak valid");
}
try {
grafikkepuasan.delete.loading = true;
const response = await fetch(`/api/kesehatan/grafikkepuasan/del/${id}`, {
const response = await fetch(`/api/kesehatan/grafikkepuasan/del/${uuid}`, {
method: "DELETE",
headers: {
"Content-Type": "application/json",

View File

@@ -34,28 +34,23 @@ const persentasekelahiran = proxy({
async create() {
const cek = templatePersentase.safeParse(persentasekelahiran.create.form);
if (!cek.success) {
const err = `[${cek.error.issues
.map((v) => `${v.path.join(".")}`)
.join("\n")}] required`;
const err = `[${cek.error.issues.map((v) => `${v.path.join(".")}`).join("\n")}] required`;
toast.error(err);
return null;
}
try {
persentasekelahiran.create.loading = true;
const res = await ApiFetch.api.kesehatan.persentasekelahiran["create"].post(persentasekelahiran.create.form);
const res = await ApiFetch.api.kesehatan.persentasekelahiran["create"].post(
persentasekelahiran.create.form
);
if (res.status === 200) {
const id = res.data?.data?.id;
if (id) {
const uuid = res.data?.data?.uuid;
if (uuid) {
toast.success("Success create");
persentasekelahiran.create.form = {
tahun: "",
kematianKasar: "",
kelahiranKasar: "",
kematianBayi: "",
};
persentasekelahiran.create.form = { ...defaultForm };
persentasekelahiran.findMany.load();
return id;
return uuid;
}
}
toast.error("failed create");
@@ -68,26 +63,26 @@ const persentasekelahiran = proxy({
}
},
},
findMany: {
data: null as
| Prisma.DataKematian_KelahiranGetPayload<{ omit: { isActive: true } }>[]
| null,
data: null as Prisma.DataKematian_KelahiranGetPayload<{
omit: { isActive: true };
}>[] | null,
async load() {
const res = await ApiFetch.api.kesehatan.persentasekelahiran[
"find-many"
].get();
const res = await ApiFetch.api.kesehatan.persentasekelahiran["find-many"].get();
if (res.status === 200) {
persentasekelahiran.findMany.data = res.data?.data ?? [];
}
},
},
findUnique: {
data: null as Prisma.DataKematian_KelahiranGetPayload<{
omit: { isActive: true };
}> | null,
async load(id: string) {
async load(uuid: string) {
try {
const res = await fetch(`/api/kesehatan/persentasekelahiran/${id}`);
const res = await fetch(`/api/kesehatan/persentasekelahiran/${uuid}`);
if (res.ok) {
const data = await res.json();
persentasekelahiran.findUnique.data = data.data ?? null;
@@ -101,82 +96,86 @@ const persentasekelahiran = proxy({
}
},
},
update: {
id: "",
form: { ...defaultForm },
loading: false,
async byId() {},
async submit() {
const id = this.id;
if (!id) {
toast.warn("ID tidak valid");
return null;
update: {
uuid: "",
form: { ...defaultForm },
loading: false,
async submit() {
const uuid = this.uuid;
if (!uuid) {
toast.warn("UUID tidak valid");
return null;
}
const formData = {
tahun: this.form.tahun,
kematianKasar: this.form.kematianKasar,
kelahiranKasar: this.form.kelahiranKasar,
kematianBayi: this.form.kematianBayi,
};
const cek = templatePersentase.safeParse(formData);
if (!cek.success) {
const err = `[${cek.error.issues
.map((v) => `${v.path.join(".")}`)
.join("\n")}] required`;
toast.error(err);
return null;
}
try {
this.loading = true;
const res = await fetch(`/api/kesehatan/persentasekelahiran/${uuid}`, {
method: "PUT",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify(formData),
});
const result = await res.json();
if (!res.ok || !result?.success) {
throw new Error(result?.message || "Gagal update data");
}
const cek = templatePersentase.safeParse(persentasekelahiran.update.form);
if (!cek.success) {
const err = `[${cek.error.issues
.map((v) => `${v.path.join(".")}`)
.join("\n")}] required`;
return toast.error(err);
}
try {
this.loading = true;
const response = await fetch(`/api/kesehatan/persentasekelahiran/${id}`, {
method: "PUT",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify(this.form),
});
const result = await response.json();
if (!response.ok || !result?.success) {
throw new Error(result?.message || "Gagal update data");
}
toast.success("Berhasil update data!");
// ✅ Optional: refresh list kalau kamu langsung ke halaman list
await persentasekelahiran.findMany.load();
return result.data;
} catch (error) {
console.error("Error update data:", error);
toast.error("Gagal update data persentase kelahiran");
} finally {
this.loading = false;
}
},
toast.success("Berhasil update data!");
await persentasekelahiran.findMany.load();
return result.data;
} catch (error) {
console.error("Update error:", error);
toast.error("Gagal update data persentase kelahiran");
throw error;
} finally {
this.loading = false;
}
},
},
delete: {
loading: false,
async byId(id: string) {
if (!id) return toast.warn("ID tidak valid");
async byId(uuid: string) {
if (!uuid) return toast.warn("UUID tidak valid");
try {
persentasekelahiran.delete.loading = true;
const response = await fetch(
`/api/kesehatan/persentasekelahiran/del/${id}`,
{
method: "DELETE",
headers: {
"Content-Type": "application/json",
},
}
);
const response = await fetch(`/api/kesehatan/persentasekelahiran/del/${uuid}`, {
method: "DELETE",
headers: {
"Content-Type": "application/json",
},
});
const result = await response.json();
if (response.ok && result?.success) {
toast.success(
result.message || "Persentase kelahiran berhasil dihapus"
);
await persentasekelahiran.findMany.load(); // refresh list
toast.success(result.message || "Persentase kelahiran berhasil dihapus");
await persentasekelahiran.findMany.load();
} else {
toast.error(
result?.message || "Gagal menghapus persentase kelahiran"
);
toast.error(result?.message || "Gagal menghapus persentase kelahiran");
}
} catch (error) {
console.error("Gagal delete:", error);

View File

@@ -11,15 +11,15 @@ import { useProxy } from 'valtio/utils';
function EditGrafikHasilKepuasan() {
const router = useRouter()
const params = useParams() as { id: string }
const params = useParams() as { uuid: string }
const stateGrafikKepuasan = useProxy(grafikkepuasan)
const id = params.id
const uuid = params.uuid
// Load data saat komponen mount
useEffect(() => {
if (id) {
stateGrafikKepuasan.findUnique.load(id).then(() => {
if (uuid) {
stateGrafikKepuasan.findUnique.load(uuid).then(() => {
const data = stateGrafikKepuasan.findUnique.data
if (data) {
stateGrafikKepuasan.update.form = {
@@ -29,11 +29,11 @@ function EditGrafikHasilKepuasan() {
}
})
}
}, [id])
}, [uuid])
const handleSubmit = async () => {
// Set the ID before submitting
stateGrafikKepuasan.update.id = id;
stateGrafikKepuasan.update.uuid = uuid;
await stateGrafikKepuasan.update.submit();
router.push('/admin/kesehatan/data-kesehatan-warga/grafik_hasil_kepuasan')
}

View File

@@ -45,7 +45,7 @@ function GrafikHasilKepuasanMasyarakat() {
setMounted(true);
if (stateGrafikKepuasan.findMany.data) {
setChartData(stateGrafikKepuasan.findMany.data.map((item) => ({
id: item.id,
id: item.uuid,
label: item.label,
jumlah: Number(item.jumlah),
})));
@@ -82,11 +82,11 @@ function GrafikHasilKepuasanMasyarakat() {
</TableThead>
<TableTbody>
{stateGrafikKepuasan.findMany.data?.map((item) => (
<TableTr key={item.id}>
<TableTr key={item.uuid}>
<TableTd>{item.label}</TableTd>
<TableTd>{item.jumlah}</TableTd>
<TableTd>
<Button color='green' onClick={() => router.push(`/admin/kesehatan/data-kesehatan-warga/grafik_hasil_kepuasan/${item.id}`)}>
<Button color='green' onClick={() => router.push(`/admin/kesehatan/data-kesehatan-warga/grafik_hasil_kepuasan/${item.uuid}`)}>
<IconEdit size={20} />
</Button>
</TableTd>
@@ -95,7 +95,7 @@ function GrafikHasilKepuasanMasyarakat() {
color='red'
disabled={stateGrafikKepuasan.delete.loading}
onClick={() => {
setSelectedId(item.id)
setSelectedId(item.uuid)
setModalHapus(true)
}}>
<IconTrash size={20} />

View File

@@ -7,38 +7,51 @@ import { Box, Button, Paper, Stack, TextInput, Title } from '@mantine/core';
import { IconArrowBack } from '@tabler/icons-react';
import { useParams, useRouter } from 'next/navigation';
import { useEffect } from 'react';
import { toast } from 'react-toastify';
import { useProxy } from 'valtio/utils';
function EditPersentaseDataKelahiranKematian() {
const router = useRouter()
const params = useParams() as { id: string }
const params = useParams() as { uuid: string }
const statePresentase = useProxy(persentasekelahiran)
const id = params.id
const id = params.uuid
// Load data saat komponen mount
useEffect(() => {
if (id) {
statePresentase.findUnique.load(id).then(() => {
const data = statePresentase.findUnique.data
if (data) {
statePresentase.update.form = {
tahun: data.tahun || '',
kematianKasar: data.kematianKasar || '',
kelahiranKasar: data.kelahiranKasar || '',
kematianBayi: data.kematianBayi || '',
}
}
})
}
}, [id])
// Di file page.tsx, ubah useEffect-nya menjadi:
useEffect(() => {
if (!id) return;
statePresentase.update.uuid = id;
statePresentase.findUnique.load(id)
.then(() => {
const data = statePresentase.findUnique.data;
if (data) {
statePresentase.update.form = {
tahun: String(data.tahun || ''),
kematianKasar: String(data.kematianKasar || ''),
kelahiranKasar: String(data.kelahiranKasar || ''),
kematianBayi: String(data.kematianBayi || '')
};
}
})
.catch(error => {
console.error('Error loading data:', error);
toast.error('Gagal memuat data');
});
}, [id]);
const handleSubmit = async () => {
// Set the ID before submitting
statePresentase.update.id = id;
// Di handleSubmit, ubah menjadi:
const handleSubmit = async () => {
try {
statePresentase.update.uuid = id;
await statePresentase.update.submit();
router.push('/admin/kesehatan/data-kesehatan-warga/persentase_data_kelahiran_kematian')
toast.success('Data berhasil diperbarui');
router.push('/admin/kesehatan/data-kesehatan-warga/persentase_data_kelahiran_kematian');
} catch (error) {
console.error('Error updating data:', error);
toast.error('Gagal memperbarui data');
}
};
return (
<Box>

View File

@@ -13,7 +13,7 @@ import { ModalKonfirmasiHapus } from '../../../_com/modalKonfirmasiHapus';
function PersentaseDataKelahiranKematian() {
type PDKMGrafik = {
id: string;
uuid: string;
tahun: string;
kematianKasar: number;
kematianBayi: number;
@@ -47,7 +47,7 @@ function PersentaseDataKelahiranKematian() {
setMounted(true);
if (statePersentase.findMany.data) {
setChartData(statePersentase.findMany.data.map((item) => ({
id: item.id,
uuid: item.uuid,
tahun: item.tahun,
kematianKasar: Number(item.kematianKasar),
kematianBayi: Number(item.kematianBayi),
@@ -88,13 +88,13 @@ function PersentaseDataKelahiranKematian() {
</TableThead>
<TableTbody>
{statePersentase.findMany.data?.map((item) => (
<TableTr key={item.id}>
<TableTr key={item.uuid}>
<TableTd>{item.tahun}</TableTd>
<TableTd>{item.kematianKasar}</TableTd>
<TableTd>{item.kematianBayi}</TableTd>
<TableTd>{item.kelahiranKasar}</TableTd>
<TableTd>
<Button color='green' onClick={() => router.push(`/admin/kesehatan/data-kesehatan-warga/persentase_data_kelahiran_kematian/${item.id}`)}>
<Button color='green' onClick={() => router.push(`/admin/kesehatan/data-kesehatan-warga/persentase_data_kelahiran_kematian/${item.uuid}`)}>
<IconEdit size={20} />
</Button>
</TableTd>
@@ -103,7 +103,7 @@ function PersentaseDataKelahiranKematian() {
color='red'
disabled={statePersentase.delete.loading}
onClick={() => {
setSelectedId(item.id)
setSelectedId(item.uuid)
setModalHapus(true)
}}>
<IconTrash size={20} />

View File

@@ -17,7 +17,7 @@ export default async function grafikKepuasanCreate(context: Context) {
jumlah: body.jumlah,
},
select: {
id: true,
uuid: true,
label: true,
jumlah: true,
}

View File

@@ -2,9 +2,9 @@ import prisma from "@/lib/prisma";
import { Context } from "elysia";
export default async function grafikKepuasanDelete(context: Context) {
const id = context.params?.id;
const uuid = context.params?.uuid;
if (!id) {
if (!uuid) {
return {
success: false,
message: "ID tidak ditemukan"
@@ -13,7 +13,7 @@ export default async function grafikKepuasanDelete(context: Context) {
const existing = await prisma.grafikKepuasan.findUnique({
where: {
id: id,
uuid: uuid,
},
})
@@ -25,7 +25,7 @@ export default async function grafikKepuasanDelete(context: Context) {
}
const deleted = await prisma.grafikKepuasan.delete({
where: { id },
where: { uuid },
})
return {

View File

@@ -3,9 +3,9 @@ import prisma from "@/lib/prisma";
export default async function grafikKepuasanFindUnique(request: Request) {
const url = new URL(request.url);
const pathSegments = url.pathname.split('/');
const id = pathSegments[pathSegments.length - 1];
const uuid = pathSegments[pathSegments.length - 1];
if (!id) {
if (!uuid) {
return Response.json({
success: false,
message: 'ID tidak boleh kosong',
@@ -13,7 +13,7 @@ export default async function grafikKepuasanFindUnique(request: Request) {
}
try {
if (typeof id !== 'string') {
if (typeof uuid !== 'string') {
return Response.json({
success: false,
message: "ID tidak valid",
@@ -21,7 +21,7 @@ export default async function grafikKepuasanFindUnique(request: Request) {
}
const data = await prisma.grafikKepuasan.findUnique({
where: { id },
where: { uuid },
});
if (!data) {

View File

@@ -9,7 +9,7 @@ const GrafikKepuasan = new Elysia({
prefix: "/grafikkepuasan",
tags: ["Data Kesehatan/Grafik Kepuasan"]
})
.get("/:id", async (context) => {
.get("/:uuid", async (context) => {
const response = await grafikKepuasanFindUnique(new Request(context.request));
return response;
})
@@ -20,18 +20,18 @@ const GrafikKepuasan = new Elysia({
jumlah: t.String(),
}),
})
.put("/:id", grafikKepuasanUpdate, {
.put("/:uuid", grafikKepuasanUpdate, {
params: t.Object({
id: t.String(),
uuid: t.String(),
}),
body: t.Object({
label: t.String(),
jumlah: t.String(),
}),
})
.delete("/del/:id", grafikKepuasanDelete, {
.delete("/del/:uuid", grafikKepuasanDelete, {
params: t.Object({
id: t.String(),
uuid: t.String(),
}),
})
export default GrafikKepuasan

View File

@@ -2,9 +2,9 @@ import prisma from "@/lib/prisma";
import { Context } from "elysia";
export default async function grafikKepuasanUpdate(context: Context) {
const id = context.params?.id;
const uuid = context.params?.uuid;
if (!id) {
if (!uuid) {
return {
success: false,
message: "ID tidak ditemukan"
@@ -18,7 +18,7 @@ export default async function grafikKepuasanUpdate(context: Context) {
const existing = await prisma.grafikKepuasan.findUnique({
where: {
id: id,
uuid: uuid,
},
})
@@ -30,7 +30,7 @@ export default async function grafikKepuasanUpdate(context: Context) {
}
const updated = await prisma.grafikKepuasan.update({
where: { id },
where: { uuid },
data: {
label,
jumlah,

View File

@@ -22,7 +22,7 @@ export default async function persentaseKelahiranKematianCreate(context: Context
kelahiranKasar: body.kelahiranKasar,
},
select: {
id: true,
uuid: true,
tahun: true,
kematianKasar: true,
kematianBayi: true,

View File

@@ -2,18 +2,18 @@ import prisma from "@/lib/prisma";
import { Context } from "elysia";
export default async function persentaseKelahiranKematianDelete(context: Context) {
const id = context.params?.id;
const uuid = context.params?.uuid;
if (!id) {
if (!uuid) {
return {
success: false,
message: "Id tidak ditemukan",
message: "ID tidak ditemukan",
}
}
const existing = await prisma.dataKematian_Kelahiran.findUnique({
where: {
id: id,
uuid: uuid,
},
})
@@ -25,7 +25,7 @@ export default async function persentaseKelahiranKematianDelete(context: Context
}
const deleted = await prisma.dataKematian_Kelahiran.delete({
where: { id },
where: { uuid },
})
return {

View File

@@ -3,9 +3,9 @@ import prisma from "@/lib/prisma";
export default async function persentaseKelahiranKematianFindUnique(request: Request) {
const url = new URL(request.url);
const pathSegments = url.pathname.split('/');
const id = pathSegments[pathSegments.length - 1];
const uuid = pathSegments[pathSegments.length - 1];
if (!id) {
if (!uuid) {
return Response.json({
success: false,
message: "ID tidak boleh kosong",
@@ -13,7 +13,7 @@ export default async function persentaseKelahiranKematianFindUnique(request: Req
}
try {
if (typeof id !== 'string') {
if (typeof uuid !== 'string') {
return Response.json({
success: false,
message: "ID tidak valid",
@@ -21,7 +21,7 @@ export default async function persentaseKelahiranKematianFindUnique(request: Req
}
const data = await prisma.dataKematian_Kelahiran.findUnique({
where: { id },
where: { uuid },
});
if (!data) {

View File

@@ -9,7 +9,7 @@ const PersentaseKelahiranKematian = new Elysia({
prefix: "/persentasekelahiran",
tags: ["Data Kesehatan/Persentase Kelahiran Kematian"],
})
.get("/:id", async (context) => {
.get("/:uuid", async (context) => {
const response = await persentaseKelahiranKematianFindUnique(new Request(context.request))
return response
})
@@ -22,9 +22,9 @@ const PersentaseKelahiranKematian = new Elysia({
kelahiranKasar: t.String(),
}),
})
.put("/:id", persentaseKelahiranKematianUpdate, {
.put("/:uuid", persentaseKelahiranKematianUpdate, {
params: t.Object({
id: t.String(),
uuid: t.String(),
}),
body: t.Object({
tahun: t.String(),
@@ -33,9 +33,9 @@ const PersentaseKelahiranKematian = new Elysia({
kelahiranKasar: t.String(),
}),
})
.delete("/del/:id", persentaseKelahiranKematianDelete, {
.delete("/del/:uuid", persentaseKelahiranKematianDelete, {
params: t.Object({
id: t.String(),
uuid: t.String(),
}),
})
export default PersentaseKelahiranKematian;

View File

@@ -2,12 +2,12 @@ import prisma from "@/lib/prisma";
import { Context } from "elysia";
export default async function persentaseKelahiranKematianUpdate(context: Context) {
const id = context.params?.id;
const uuid = context.params?.uuid;
if (!id) {
if (!uuid) {
return {
success: false,
message: "Id tidak ditemukan",
message: "ID tidak ditemukan",
}
}
@@ -20,7 +20,7 @@ export default async function persentaseKelahiranKematianUpdate(context: Context
const existing = await prisma.dataKematian_Kelahiran.findUnique({
where: {
id: id,
uuid: uuid,
},
})
@@ -32,7 +32,7 @@ export default async function persentaseKelahiranKematianUpdate(context: Context
}
const updated = await prisma.dataKematian_Kelahiran.update({
where: { id },
where: { uuid },
data: {
tahun,
kematianKasar,