upd: update data pelayanan surat

Deskripsi
- form pencarian
- detail data pengajuan
- api
- belom selesai submit

NO Issues
This commit is contained in:
2025-12-19 17:27:39 +08:00
parent fda2b0977a
commit ff0413be5a
7 changed files with 1121 additions and 595 deletions

View File

@@ -215,7 +215,7 @@ const PelayananRoute = new Elysia({
select: {
name: true,
syaratDokumen: true,
dataPelengkap:true
dataPelengkap: true
}
},
Warga: {
@@ -575,7 +575,7 @@ const PelayananRoute = new Elysia({
CategoryPelayanan: {
select: {
name: true,
dataText: true,
dataPelengkap: true,
syaratDokumen: true,
}
},
@@ -595,7 +595,15 @@ const PelayananRoute = new Elysia({
})
if (!data) {
return { success: false, message: "Data tidak ditemukan" }
return {
success: false,
message: "Data tidak ditemukan",
pengajuan: {},
history: [],
warga: {},
syaratDokumen: [],
dataPelengkap: [],
}
}
const dataSurat = await prisma.suratPelayanan.findFirst({
@@ -621,7 +629,7 @@ const PelayananRoute = new Elysia({
}
})
const dataText = await prisma.dataTextPelayanan.findMany({
const dataPelengkap = await prisma.dataTextPelayanan.findMany({
where: {
idPengajuanLayanan: data?.id,
isActive: true
@@ -635,23 +643,37 @@ const PelayananRoute = new Elysia({
const syaratDokumen = (data?.CategoryPelayanan?.syaratDokumen ?? []) as {
name: string;
desc: string;
key: string;
}[];
const dataSyaratFix = dataSyarat.map((item) => {
// const desc = syaratDokumen.find((v) => v.name == item.jenis)?.desc
const desc = syaratDokumen.find((v) => v.key == item.jenis)?.desc
const name = syaratDokumen.find((v) => v.key == item.jenis)?.name
return {
id: item.id,
jenis: item.jenis,
key: item.jenis,
value: item.value,
name: name ?? '',
desc: desc ?? ''
}
})
const dataTextFix = dataText.map((item) => {
// const desc = data?.CategoryPelayanan?.dataText.find((v) => v == item.jenis)
const dataPelengkapList = (data?.CategoryPelayanan?.dataPelengkap ?? []) as {
name: string;
desc: string;
key: string;
}[];
const dataTextFix = dataPelengkap.map((item) => {
const ini = dataPelengkapList.find((v) => v.key == item.jenis)
const desc = ini?.desc
const name = ini?.name
return {
id: item.id,
jenis: item.jenis,
key: item.jenis,
value: item.value,
desc: desc ?? '',
name: name ?? ''
}
})
@@ -702,11 +724,13 @@ const PelayananRoute = new Elysia({
}
const datafix = {
success: true,
message: 'sukses',
pengajuan: dataPengajuan,
history: dataHistoryFix,
warga: warga,
syaratDokumen: dataSyaratFix,
dataText: dataTextFix,
dataPelengkap: dataTextFix,
}
@@ -786,12 +810,12 @@ const PelayananRoute = new Elysia({
}
})
.post("/update", async ({ body }) => {
const { nomerPengajuan, syaratDokumen, dataText } = body
const { id, syaratDokumen, dataPelengkap } = body
let dataUpdate = []
const pengajuan = await prisma.pelayananAjuan.findFirst({
const pengajuan = await prisma.pelayananAjuan.findUnique({
where: {
noPengajuan: nomerPengajuan,
id
}
})
@@ -804,29 +828,16 @@ const PelayananRoute = new Elysia({
return { success: false, message: 'pengajuan surat tidak dapat diupdate karena status ' + pengajuan.status }
}
if (dataText && dataText.length > 0) {
for (const item of dataText) {
dataUpdate.push(item.jenis)
const hasil = await prisma.dataTextPelayanan.findFirst({
where: {
idPengajuanLayanan: pengajuan.id,
jenis: item.jenis,
}
})
if (dataPelengkap && dataPelengkap.length > 0) {
for (const item of dataPelengkap) {
dataUpdate.push(item.key)
const upd = await prisma.dataTextPelayanan.upsert({
const upd = await prisma.dataTextPelayanan.update({
where: {
id: hasil?.id
id: item.id
},
update: {
data: {
value: item.value,
},
create: {
value: item.value,
jenis: item.jenis,
idPengajuanLayanan: pengajuan.id,
idCategory: pengajuan.idCategory,
}
})
@@ -849,34 +860,15 @@ const PelayananRoute = new Elysia({
if (syaratDokumen && syaratDokumen.length > 0) {
for (const item of syaratDokumen) {
const pilih = syarat?.find((cat) => cat.desc.toLowerCase() == item.jenis.toLowerCase() || cat.name.toLowerCase() == item.jenis.toLowerCase())?.name;
dataUpdate.push(pilih)
const hasil = await prisma.syaratDokumenPelayanan.findFirst({
dataUpdate.push(item.key)
const upd = await prisma.syaratDokumenPelayanan.update({
where: {
idPengajuanLayanan: pengajuan.id,
jenis: pilih,
id: item.id
},
data: {
value: item.value,
}
})
if (hasil && hasil.id) {
const upd = await prisma.syaratDokumenPelayanan.upsert({
where: {
id: hasil.id
},
update: {
value: item.value,
},
create: {
value: item.value,
jenis: hasil.jenis,
idPengajuanLayanan: pengajuan.id,
idCategory: pengajuan.idCategory,
}
})
} else {
return { success: false, message: 'dokumen tidak dapat diupload' }
}
}
}
@@ -906,16 +898,20 @@ const PelayananRoute = new Elysia({
}, {
body: t.Object({
nomerPengajuan: t.String({
error: "nomer pengajuan harus diisi",
description: "Nomer pengajuan yang ingin diupdate"
id: t.String({
error: "id harus diisi",
description: "ID yang ingin diupdate"
}),
dataText: t.Optional(t.Array(
dataPelengkap: t.Optional(t.Array(
t.Object({
jenis: t.String({
description: "Jenis field yang dibutuhkan oleh kategori pelayanan. Biasanya dinamis.",
id: t.String({
description: "ID Data Pelengkap.",
error: "id harus diisi"
}),
key: t.String({
description: "Key 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"
error: "key harus diisi"
}),
value: t.String({
description: "Isi atau nilai dari jenis field terkait.",
@@ -927,26 +923,30 @@ const PelayananRoute = new Elysia({
description: "Kumpulan data text dinamis sesuai kategori layanan.",
examples: [
[
{ jenis: "nama", value: "Budi Santoso" },
{ jenis: "jenis kelamin", value: "Laki-laki" },
{ jenis: "tempat tanggal lahir", value: "Denpasar, 28 Februari 1990" },
{ jenis: "negara", value: "Indonesia" },
{ jenis: "agama", value: "Islam" },
{ jenis: "status perkawinan", value: "Belum menikah" },
{ jenis: "alamat", value: "Jl. Mawar No. 10" },
{ jenis: "pekerjaan", value: "Karyawan Swasta" },
{ jenis: "jenis usaha", value: "usaha makanan" },
{ jenis: "alamat usaha", value: "Jl. Melati No. 21" },
{ id: "1", key: "nama", value: "Budi Santoso" },
{ id: "2", key: "jenis kelamin", value: "Laki-laki" },
{ id: "3", key: "tempat tanggal lahir", value: "Denpasar, 28 Februari 1990" },
{ id: "4", key: "negara", value: "Indonesia" },
{ id: "5", key: "agama", value: "Islam" },
{ id: "6", key: "status perkawinan", value: "Belum menikah" },
{ id: "7", key: "alamat", value: "Jl. Mawar No. 10" },
{ id: "8", key: "pekerjaan", value: "Karyawan Swasta" },
{ id: "9", key: "jenis usaha", value: "usaha makanan" },
{ id: "10", key: "alamat usaha", value: "Jl. Melati No. 21" },
]
],
}
)),
syaratDokumen: t.Optional(t.Array(
t.Object({
jenis: t.String({
description: "Jenis dokumen persyaratan yang diminta oleh kategori layanan.",
id: t.String({
description: "ID syarat dokumen",
error: "id harus diisi"
}),
key: t.String({
description: "Key dokumen persyaratan yang diminta oleh kategori layanan.",
examples: ["ktp", "kk", "surat_pengantar_rt"],
error: "jenis harus diisi"
error: "key harus diisi"
}),
value: t.String({
description: "Nama file atau identifier file dokumen yang diupload.",
@@ -958,9 +958,9 @@ const PelayananRoute = new Elysia({
description: "Kumpulan dokumen yang wajib diupload sesuai persyaratan layanan.",
examples: [
[
{ jenis: "pengantar kelian", value: "pengantar_kelurahan_budi.png" },
{ jenis: "ktp/kk", value: "kk_budi.png" },
{ jenis: "foto lokasi", value: "foto_lokasi_budi.png" }
{ id: "1", key: "pengantar kelian", value: "pengantar_kelurahan_budi.png" },
{ id: "2", key: "ktp/kk", value: "kk_budi.png" },
{ id: "3", key: "foto lokasi", value: "foto_lokasi_budi.png" }
]
],
}
@@ -969,7 +969,6 @@ const PelayananRoute = new Elysia({
detail: {
summary: "Update Data Pengajuan Pelayanan Surat",
description: `tool untuk update data pengajuan pelayanan surat`,
tags: ["mcp"]
}
})
.get("/list", async ({ query }) => {
@@ -1116,5 +1115,47 @@ const PelayananRoute = new Elysia({
description: `tool untuk mendapatkan jumlah pengajuan pelayanan surat warga`,
}
})
.post("/get-no-pengajuan", async ({ body }) => {
const { phone, noPengajuan } = body;
if (!isValidPhone(phone)) {
return { success: false, message: 'nomor telepon tidak valid, harap masukkan nomor yang benar' }
}
const nomorHP = normalizePhoneNumber({ phone: phone })
const data = await prisma.pelayananAjuan.findMany({
where: {
noPengajuan: noPengajuan,
Warga: {
phone: nomorHP
}
},
select: {
id: true,
noPengajuan: true,
status: true,
createdAt: true,
}
});
if (data.length == 0) {
return { success: false, message: 'Data pengajuan tidak ditemukan' };
}
return {
success: true,
nomer: noPengajuan
};
}, {
body: t.Object({
phone: t.String({ minLength: 1, error: "Nomor telepon harus diisi" }),
noPengajuan: t.String({ minLength: 1, error: "Nomor pengajuan harus diisi" }),
}),
detail: {
summary: "Cek Nomor Pengajuan Surat",
description: `tool untuk memeriksa apakah nomor pengajuan surat valid dan terkait dengan nomor telepon warga. Jika valid, mengembalikan nomor pengajuan.`,
}
})
export default PelayananRoute