From 2d376663bbb9534b6a901a27460085e4ef4cb5c0 Mon Sep 17 00:00:00 2001 From: amal Date: Tue, 2 Dec 2025 14:37:59 +0800 Subject: [PATCH] upd: api jenna ai Deskripsi: - create tambah data pengajuan pelayanan surat No Issues --- src/server/routes/pelayanan_surat_route.ts | 72 +++++++++------------- 1 file changed, 28 insertions(+), 44 deletions(-) diff --git a/src/server/routes/pelayanan_surat_route.ts b/src/server/routes/pelayanan_surat_route.ts index fe3f6e5..54ac118 100644 --- a/src/server/routes/pelayanan_surat_route.ts +++ b/src/server/routes/pelayanan_surat_route.ts @@ -3,7 +3,7 @@ import type { StatusPengaduan } from "generated/prisma" import { createSurat } from "../lib/create-surat" import { getLastUpdated } from "../lib/get-last-updated" import { generateNoPengajuanSurat } from "../lib/no-pengajuan-surat" -import { normalizePhoneNumber } from "../lib/normalizePhone" +import { isValidPhone, normalizePhoneNumber } from "../lib/normalizePhone" import { prisma } from "../lib/prisma" const PelayananRoute = new Elysia({ @@ -292,10 +292,10 @@ const PelayananRoute = new Elysia({ } }) .post("/create", async ({ body }) => { - const { kategoriId, wargaId, noTelepon, dataText, syaratDokumen } = body + const { kategoriId, namaWarga, noTelepon, dataText, syaratDokumen } = body const noPengajuan = await generateNoPengajuanSurat() let idCategoryFix = kategoriId - let idWargaFix = wargaId + let idWargaFix = "" const category = await prisma.categoryPelayanan.findUnique({ where: { id: kategoriId, @@ -317,36 +317,28 @@ const PelayananRoute = new Elysia({ } - const warga = await prisma.warga.findUnique({ + if (!isValidPhone(noTelepon)) { + return { success: false, message: 'nomor telepon tidak valid, harap masukkan nomor yang benar' } + } + + const nomorHP = normalizePhoneNumber({ phone: noTelepon }) + const dataWarga = await prisma.warga.upsert({ where: { - id: wargaId, + phone: nomorHP + }, + create: { + name: namaWarga, + phone: nomorHP, + }, + update: { + name: namaWarga, + }, + select: { + id: true } }) - if (!warga) { - const nomorHP = normalizePhoneNumber({ phone: noTelepon }) - const cariWarga = await prisma.warga.findFirst({ - where: { - phone: nomorHP, - } - }) - - if (!cariWarga) { - const wargaCreate = await prisma.warga.create({ - data: { - name: wargaId, - phone: nomorHP, - }, - select: { - id: true - } - }) - idWargaFix = wargaCreate.id - } else { - idWargaFix = cariWarga.id - } - - } + idWargaFix = dataWarga.id const pengaduan = await prisma.pelayananAjuan.create({ data: { @@ -404,36 +396,30 @@ const PelayananRoute = new Elysia({ }, { body: t.Object({ kategoriId: t.String({ - minLength: 1, description: "ID atau nama kategori pelayanan surat yang dipilih. Jika berupa nama, sistem akan mencocokkan secara otomatis.", examples: ["skusaha"], error: "ID kategori harus diisi" }), - - wargaId: t.String({ - minLength: 1, - description: "ID warga atau nama warga. Jika ID tidak ditemukan, sistem akan mencari berdasarkan nama.", + namaWarga: t.String({ + description: "Nama warga", examples: ["Budi Santoso"], - error: "ID warga harus diisi" + error: "Nama warga harus diisi" }), noTelepon: t.String({ - minLength: 8, - description: "Nomor HP warga yang akan dinormalisasi. Jika data warga tidak ditemukan berdasarkan idWarga, pencarian dilakukan via nomor ini.", - examples: ["081234567890"], - error: "Nomor telepon harus diisi" + error: "Nomor telepon harus diisi", + examples: ["08123456789", "+628123456789"], + description: "Nomor telepon warga pelapor" }), dataText: t.Array( t.Object({ jenis: t.String({ - minLength: 1, description: "Jenis field yang dibutuhkan oleh kategori pelayanan. Biasanya dinamis.", examples: ["nama", "jenis kelamin", "tempat tanggal lahir", "negara", "agama", "status perkawinan", "alamat", "pekerjaan", "jenis usaha", "alamat usaha"], error: "jenis harus diisi" }), value: t.String({ - minLength: 1, description: "Isi atau nilai dari jenis field terkait.", examples: ["Budi Santoso", "Laki-laki", "Denpasar, 28 Februari 1990", "Indonesia", "Islam", "Belum menikah", "Jl. Mawar No. 10", "Karyawan Swasta", "usaha makanan", "Jl. Melati No. 21"], error: "value harus diisi" @@ -462,13 +448,11 @@ const PelayananRoute = new Elysia({ syaratDokumen: t.Array( t.Object({ jenis: t.String({ - minLength: 1, description: "Jenis dokumen persyaratan yang diminta oleh kategori layanan.", examples: ["ktp", "kk", "surat_pengantar_rt"], error: "jenis harus diisi" }), value: t.String({ - minLength: 1, description: "Nama file atau identifier file dokumen yang diupload.", examples: ["ktp_budi.png", "kk_budi.png"], error: "value harus diisi" @@ -488,7 +472,7 @@ const PelayananRoute = new Elysia({ ), }), detail: { - summary: "Create Pengajuan Pelayanan Surat", + summary: "Buat Pengajuan Pelayanan Surat", description: `tool untuk membuat pengajuan pelayanan surat dengan syarat dokumen serta data text sesuai kategori pelayanan surat yang dipilih`, tags: ["mcp"] }