upd: api jenna ai #57
@@ -3,7 +3,7 @@ import type { StatusPengaduan } from "generated/prisma"
|
|||||||
import { createSurat } from "../lib/create-surat"
|
import { createSurat } from "../lib/create-surat"
|
||||||
import { getLastUpdated } from "../lib/get-last-updated"
|
import { getLastUpdated } from "../lib/get-last-updated"
|
||||||
import { generateNoPengajuanSurat } from "../lib/no-pengajuan-surat"
|
import { generateNoPengajuanSurat } from "../lib/no-pengajuan-surat"
|
||||||
import { normalizePhoneNumber } from "../lib/normalizePhone"
|
import { isValidPhone, normalizePhoneNumber } from "../lib/normalizePhone"
|
||||||
import { prisma } from "../lib/prisma"
|
import { prisma } from "../lib/prisma"
|
||||||
|
|
||||||
const PelayananRoute = new Elysia({
|
const PelayananRoute = new Elysia({
|
||||||
@@ -292,10 +292,10 @@ const PelayananRoute = new Elysia({
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
.post("/create", async ({ body }) => {
|
.post("/create", async ({ body }) => {
|
||||||
const { kategoriId, wargaId, noTelepon, dataText, syaratDokumen } = body
|
const { kategoriId, namaWarga, noTelepon, dataText, syaratDokumen } = body
|
||||||
const noPengajuan = await generateNoPengajuanSurat()
|
const noPengajuan = await generateNoPengajuanSurat()
|
||||||
let idCategoryFix = kategoriId
|
let idCategoryFix = kategoriId
|
||||||
let idWargaFix = wargaId
|
let idWargaFix = ""
|
||||||
const category = await prisma.categoryPelayanan.findUnique({
|
const category = await prisma.categoryPelayanan.findUnique({
|
||||||
where: {
|
where: {
|
||||||
id: kategoriId,
|
id: kategoriId,
|
||||||
@@ -317,36 +317,28 @@ const PelayananRoute = new Elysia({
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const warga = await prisma.warga.findUnique({
|
if (!isValidPhone(noTelepon)) {
|
||||||
where: {
|
return { success: false, message: 'nomor telepon tidak valid, harap masukkan nomor yang benar' }
|
||||||
id: wargaId,
|
|
||||||
}
|
}
|
||||||
})
|
|
||||||
|
|
||||||
if (!warga) {
|
|
||||||
const nomorHP = normalizePhoneNumber({ phone: noTelepon })
|
const nomorHP = normalizePhoneNumber({ phone: noTelepon })
|
||||||
const cariWarga = await prisma.warga.findFirst({
|
const dataWarga = await prisma.warga.upsert({
|
||||||
where: {
|
where: {
|
||||||
|
phone: nomorHP
|
||||||
|
},
|
||||||
|
create: {
|
||||||
|
name: namaWarga,
|
||||||
phone: nomorHP,
|
phone: nomorHP,
|
||||||
}
|
},
|
||||||
})
|
update: {
|
||||||
|
name: namaWarga,
|
||||||
if (!cariWarga) {
|
|
||||||
const wargaCreate = await prisma.warga.create({
|
|
||||||
data: {
|
|
||||||
name: wargaId,
|
|
||||||
phone: nomorHP,
|
|
||||||
},
|
},
|
||||||
select: {
|
select: {
|
||||||
id: true
|
id: true
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
idWargaFix = wargaCreate.id
|
|
||||||
} else {
|
|
||||||
idWargaFix = cariWarga.id
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
idWargaFix = dataWarga.id
|
||||||
|
|
||||||
const pengaduan = await prisma.pelayananAjuan.create({
|
const pengaduan = await prisma.pelayananAjuan.create({
|
||||||
data: {
|
data: {
|
||||||
@@ -404,36 +396,30 @@ const PelayananRoute = new Elysia({
|
|||||||
}, {
|
}, {
|
||||||
body: t.Object({
|
body: t.Object({
|
||||||
kategoriId: t.String({
|
kategoriId: t.String({
|
||||||
minLength: 1,
|
|
||||||
description: "ID atau nama kategori pelayanan surat yang dipilih. Jika berupa nama, sistem akan mencocokkan secara otomatis.",
|
description: "ID atau nama kategori pelayanan surat yang dipilih. Jika berupa nama, sistem akan mencocokkan secara otomatis.",
|
||||||
examples: ["skusaha"],
|
examples: ["skusaha"],
|
||||||
error: "ID kategori harus diisi"
|
error: "ID kategori harus diisi"
|
||||||
}),
|
}),
|
||||||
|
namaWarga: t.String({
|
||||||
wargaId: t.String({
|
description: "Nama warga",
|
||||||
minLength: 1,
|
|
||||||
description: "ID warga atau nama warga. Jika ID tidak ditemukan, sistem akan mencari berdasarkan nama.",
|
|
||||||
examples: ["Budi Santoso"],
|
examples: ["Budi Santoso"],
|
||||||
error: "ID warga harus diisi"
|
error: "Nama warga harus diisi"
|
||||||
}),
|
}),
|
||||||
|
|
||||||
noTelepon: t.String({
|
noTelepon: t.String({
|
||||||
minLength: 8,
|
error: "Nomor telepon harus diisi",
|
||||||
description: "Nomor HP warga yang akan dinormalisasi. Jika data warga tidak ditemukan berdasarkan idWarga, pencarian dilakukan via nomor ini.",
|
examples: ["08123456789", "+628123456789"],
|
||||||
examples: ["081234567890"],
|
description: "Nomor telepon warga pelapor"
|
||||||
error: "Nomor telepon harus diisi"
|
|
||||||
}),
|
}),
|
||||||
|
|
||||||
dataText: t.Array(
|
dataText: t.Array(
|
||||||
t.Object({
|
t.Object({
|
||||||
jenis: t.String({
|
jenis: t.String({
|
||||||
minLength: 1,
|
|
||||||
description: "Jenis field yang dibutuhkan oleh kategori pelayanan. Biasanya dinamis.",
|
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"],
|
examples: ["nama", "jenis kelamin", "tempat tanggal lahir", "negara", "agama", "status perkawinan", "alamat", "pekerjaan", "jenis usaha", "alamat usaha"],
|
||||||
error: "jenis harus diisi"
|
error: "jenis harus diisi"
|
||||||
}),
|
}),
|
||||||
value: t.String({
|
value: t.String({
|
||||||
minLength: 1,
|
|
||||||
description: "Isi atau nilai dari jenis field terkait.",
|
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"],
|
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"
|
error: "value harus diisi"
|
||||||
@@ -462,13 +448,11 @@ const PelayananRoute = new Elysia({
|
|||||||
syaratDokumen: t.Array(
|
syaratDokumen: t.Array(
|
||||||
t.Object({
|
t.Object({
|
||||||
jenis: t.String({
|
jenis: t.String({
|
||||||
minLength: 1,
|
|
||||||
description: "Jenis dokumen persyaratan yang diminta oleh kategori layanan.",
|
description: "Jenis dokumen persyaratan yang diminta oleh kategori layanan.",
|
||||||
examples: ["ktp", "kk", "surat_pengantar_rt"],
|
examples: ["ktp", "kk", "surat_pengantar_rt"],
|
||||||
error: "jenis harus diisi"
|
error: "jenis harus diisi"
|
||||||
}),
|
}),
|
||||||
value: t.String({
|
value: t.String({
|
||||||
minLength: 1,
|
|
||||||
description: "Nama file atau identifier file dokumen yang diupload.",
|
description: "Nama file atau identifier file dokumen yang diupload.",
|
||||||
examples: ["ktp_budi.png", "kk_budi.png"],
|
examples: ["ktp_budi.png", "kk_budi.png"],
|
||||||
error: "value harus diisi"
|
error: "value harus diisi"
|
||||||
@@ -488,7 +472,7 @@ const PelayananRoute = new Elysia({
|
|||||||
),
|
),
|
||||||
}),
|
}),
|
||||||
detail: {
|
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`,
|
description: `tool untuk membuat pengajuan pelayanan surat dengan syarat dokumen serta data text sesuai kategori pelayanan surat yang dipilih`,
|
||||||
tags: ["mcp"]
|
tags: ["mcp"]
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user