From ba0414a99cc69aea3093d5a94c04c0b271ff3373 Mon Sep 17 00:00:00 2001 From: amal Date: Mon, 1 Dec 2025 11:21:38 +0800 Subject: [PATCH] fix: api tambah pengaduan jenna ai --- src/server/lib/normalizePhone.ts | 8 +++++++- src/server/routes/pengaduan_route.ts | 10 +++++++--- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/server/lib/normalizePhone.ts b/src/server/lib/normalizePhone.ts index 9f005ab..05ff75e 100644 --- a/src/server/lib/normalizePhone.ts +++ b/src/server/lib/normalizePhone.ts @@ -1,6 +1,12 @@ +export function isValidPhone(number: string): boolean { + const clean = number.replace(/[\s.-]/g, ""); // hapus spasi, titik, strip + const regex = /^(?:\+628|08)(\d{7,12})$/; + return regex.test(clean); +} + export function normalizePhoneNumber({ phone }: { phone: string }) { // Hapus semua spasi, tanda hubung, atau karakter non-digit (+ tetap dipertahankan untuk dicek) - let cleaned = phone.trim().replace(/[\s-]/g, ""); + let cleaned = phone.trim().replace(/[\s.-]/g, ""); // Jika diawali dengan +62 → ganti jadi 62 if (cleaned.startsWith("+62")) { diff --git a/src/server/routes/pengaduan_route.ts b/src/server/routes/pengaduan_route.ts index 847f091..c361666 100644 --- a/src/server/routes/pengaduan_route.ts +++ b/src/server/routes/pengaduan_route.ts @@ -5,7 +5,7 @@ import { v4 as uuidv4 } from "uuid" import { getLastUpdated } from "../lib/get-last-updated" import { mimeToExtension } from "../lib/mimetypeToExtension" import { generateNoPengaduan } from "../lib/no-pengaduan" -import { normalizePhoneNumber } from "../lib/normalizePhone" +import { isValidPhone, normalizePhoneNumber } from "../lib/normalizePhone" import { prisma } from "../lib/prisma" import { renameFile } from "../lib/rename-file" import { catFile, defaultConfigSF, removeFile, uploadFile, uploadFileBase64 } from "../lib/seafile" @@ -139,6 +139,10 @@ const PengaduanRoute = new Elysia({ idCategoryFix = "lainnya" } + 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: { @@ -216,10 +220,10 @@ const PengaduanRoute = new Elysia({ description: "ID atau nama kategori pengaduan (contoh: kebersihan, keamanan, lainnya)" })), - namaWarga: t.Optional(t.String({ + namaWarga: t.String({ examples: ["budiman"], description: "Nama warga yang melapor" - })), + }), noTelepon: t.String({ error: "Nomor telepon harus diisi",