diff --git a/src/server/routes/pengaduan_route.ts b/src/server/routes/pengaduan_route.ts index 37ed7fe..b554794 100644 --- a/src/server/routes/pengaduan_route.ts +++ b/src/server/routes/pengaduan_route.ts @@ -107,8 +107,10 @@ const PengaduanRoute = new Elysia({ // --- PENGADUAN --- - .post("/create", async ({ body }) => { - const { judulPengaduan, detailPengaduan, lokasi, namaGambar, kategoriId, namaWarga, noTelepon } = body + .post("/create", async ({ body, headers }) => { + const { judulPengaduan, detailPengaduan, lokasi, namaGambar, kategoriId } = body + const namaWarga = headers["x-user"] || "" + const noTelepon = headers["x-phone"] || "" let imageFix = namaGambar const noPengaduan = await generateNoPengaduan() let idCategoryFix = kategoriId @@ -220,16 +222,16 @@ const PengaduanRoute = new Elysia({ description: "ID atau nama kategori pengaduan (contoh: kebersihan, keamanan, lainnya)" })), - namaWarga: t.String({ - examples: ["budiman"], - description: "Nama warga yang melapor" - }), + // namaWarga: t.String({ + // examples: ["budiman"], + // description: "Nama warga yang melapor" + // }), - noTelepon: t.String({ - error: "Nomor telepon harus diisi", - examples: ["08123456789", "+628123456789"], - description: "Nomor telepon warga pelapor" - }), + // noTelepon: t.String({ + // error: "Nomor telepon harus diisi", + // examples: ["08123456789", "+628123456789"], + // description: "Nomor telepon warga pelapor" + // }), }), detail: { @@ -289,6 +291,84 @@ const PengaduanRoute = new Elysia({ description: `tool untuk update status pengaduan` } }) + .post("/update", async ({ body }) => { + const { noPengaduan, judul, detail, lokasi, namaGambar } = body + let dataUpdate = {} + + const cek = await prisma.pengaduan.findFirst({ + where: { + noPengaduan, + }, + select: { + id: true + } + }) + + + if (!cek) { + return { success: false, message: 'gagal update status pengaduan, nomer ' + noPengaduan + ' tidak ditemukan' } + } + + if (judul) { + dataUpdate = { title: judul } + } + + if (detail) { + dataUpdate = { ...dataUpdate, detail } + } + + if (lokasi) { + dataUpdate = { ...dataUpdate, location: lokasi } + } + + if (namaGambar) { + dataUpdate = { ...dataUpdate, image: namaGambar } + } + + const pengaduan = await prisma.pengaduan.updateMany({ + where: { + noPengaduan + }, + data: dataUpdate + }) + + const keys = Object.keys(dataUpdate).join(", "); + + await prisma.historyPengaduan.create({ + data: { + idPengaduan: cek.id, + deskripsi: `Pengaduan diupdate oleh warga (data yg diupdate: ${keys})`, + } + }) + + return { success: true, message: 'pengaduan dengan nomer ' + noPengaduan + ' sudah diupdate' } + }, { + body: t.Object({ + noPengaduan: t.String({ + error: "nomer pengaduan harus diisi", + description: "Nomer pengaduan yang ingin diupdate" + }), + judul: t.Optional(t.String({ + error: "judul harus diisi", + description: "Judul pengaduan yang ingin diupdate" + })), + detail: t.Optional(t.String({ + description: "detail pengaduan yang ingin diupdate" + })), + lokasi: t.Optional(t.String({ + description: "lokasi pengaduan yang ingin diupdate" + })), + namaGambar: t.Optional(t.String({ + description: "Nama file gambar yang telah diupload untuk update data pengaduan" + })), + }), + + detail: { + summary: "Update Data Pengaduan", + description: `tool untuk update data pengaduan`, + tags: ["mcp"] + } + }) .get("/detail", async ({ query }) => { const { id } = query