upd: tambah surat
deskripsi: - layout form - seeder category pelayanan - api tambah surat No Issues
This commit is contained in:
@@ -114,8 +114,14 @@ const PelayananRoute = new Elysia({
|
||||
return;
|
||||
}
|
||||
|
||||
const dataText: string[] = Array.isArray(data.dataText)
|
||||
? data.dataText.filter((v): v is string => typeof v === "string")
|
||||
const dataPelengkap: { key: string }[] = Array.isArray(data.dataPelengkap)
|
||||
? data.dataPelengkap.filter(
|
||||
(v): v is { key: string } =>
|
||||
typeof v === "object" &&
|
||||
v !== null &&
|
||||
"key" in v &&
|
||||
typeof (v as any).key === "string"
|
||||
)
|
||||
: [];
|
||||
|
||||
const syaratDokumen: { name: string }[] = Array.isArray(data.syaratDokumen)
|
||||
@@ -132,7 +138,7 @@ const PelayananRoute = new Elysia({
|
||||
return {
|
||||
id: data.id,
|
||||
name: data.name,
|
||||
dataText,
|
||||
dataPelengkap,
|
||||
syaratDokumen,
|
||||
};
|
||||
}, {
|
||||
@@ -208,8 +214,8 @@ const PelayananRoute = new Elysia({
|
||||
CategoryPelayanan: {
|
||||
select: {
|
||||
name: true,
|
||||
dataText: true,
|
||||
syaratDokumen: true,
|
||||
dataPelengkap:true
|
||||
}
|
||||
},
|
||||
Warga: {
|
||||
@@ -275,10 +281,11 @@ 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
|
||||
return {
|
||||
id: item.id,
|
||||
jenis: desc,
|
||||
@@ -286,11 +293,17 @@ const PelayananRoute = new Elysia({
|
||||
}
|
||||
})
|
||||
|
||||
const dataTextCategory = (data?.CategoryPelayanan?.dataPelengkap ?? []) as {
|
||||
name: string;
|
||||
desc: string;
|
||||
key: string;
|
||||
}[];
|
||||
|
||||
const dataTextFix = dataText.map((item) => {
|
||||
const desc = data?.CategoryPelayanan?.dataText.find((v) => v == item.jenis)
|
||||
const nama = dataTextCategory.find((v) => v.key == item.jenis)?.name
|
||||
return {
|
||||
id: item.id,
|
||||
jenis: item.jenis,
|
||||
jenis: nama,
|
||||
value: item.value,
|
||||
}
|
||||
})
|
||||
@@ -360,9 +373,9 @@ const PelayananRoute = new Elysia({
|
||||
}
|
||||
})
|
||||
.post("/create", async ({ body, headers }) => {
|
||||
const { kategoriId, dataText, syaratDokumen } = body
|
||||
const namaWarga = headers['x-user'] || ""
|
||||
const noTelepon = headers['x-phone'] || ""
|
||||
const { kategoriId, dataPelengkap, syaratDokumen, nama, phone } = body
|
||||
// const namaWarga = headers['x-user'] || ""
|
||||
// const noTelepon = headers['x-phone'] || ""
|
||||
const noPengajuan = await generateNoPengajuanSurat()
|
||||
let idCategoryFix = kategoriId
|
||||
let idWargaFix = ""
|
||||
@@ -388,21 +401,21 @@ const PelayananRoute = new Elysia({
|
||||
|
||||
}
|
||||
|
||||
if (!isValidPhone(noTelepon)) {
|
||||
if (!isValidPhone(phone)) {
|
||||
return { success: false, message: 'nomor telepon tidak valid, harap masukkan nomor yang benar' }
|
||||
}
|
||||
|
||||
const nomorHP = normalizePhoneNumber({ phone: noTelepon })
|
||||
const nomorHP = normalizePhoneNumber({ phone: phone })
|
||||
const dataWarga = await prisma.warga.upsert({
|
||||
where: {
|
||||
phone: nomorHP
|
||||
},
|
||||
create: {
|
||||
name: namaWarga,
|
||||
name: nama,
|
||||
phone: nomorHP,
|
||||
},
|
||||
update: {
|
||||
name: namaWarga,
|
||||
name: nama,
|
||||
},
|
||||
select: {
|
||||
id: true
|
||||
@@ -433,16 +446,16 @@ const PelayananRoute = new Elysia({
|
||||
dataInsertSyaratDokumen.push({
|
||||
idPengajuanLayanan: pengaduan.id,
|
||||
idCategory: idCategoryFix,
|
||||
jenis: item.jenis,
|
||||
jenis: item.key,
|
||||
value: item.value,
|
||||
})
|
||||
}
|
||||
|
||||
for (const item of dataText) {
|
||||
for (const item of dataPelengkap) {
|
||||
dataInsertDataText.push({
|
||||
idPengajuanLayanan: pengaduan.id,
|
||||
idCategory: idCategoryFix,
|
||||
jenis: item.jenis,
|
||||
jenis: item.key,
|
||||
value: item.value,
|
||||
})
|
||||
}
|
||||
@@ -464,7 +477,7 @@ const PelayananRoute = new Elysia({
|
||||
}
|
||||
})
|
||||
|
||||
return { success: true, message: 'pengajuan layanan surat sudah dibuat dengan nomer ' + noPengajuan + ', nomer ini akan digunakan untuk mengakses pengajuan ini' }
|
||||
return { success: true, message: 'Pengajuan layanan surat sudah dibuat dengan nomer ' + noPengajuan + ', nomer ini akan digunakan untuk mengakses pengajuan ini' }
|
||||
}, {
|
||||
body: t.Object({
|
||||
kategoriId: t.String({
|
||||
@@ -472,21 +485,20 @@ const PelayananRoute = new Elysia({
|
||||
examples: ["skusaha"],
|
||||
error: "ID kategori harus diisi"
|
||||
}),
|
||||
// namaWarga: t.String({
|
||||
// description: "Nama warga",
|
||||
// examples: ["Budi Santoso"],
|
||||
// error: "Nama warga harus diisi"
|
||||
// }),
|
||||
nama: t.String({
|
||||
description: "Nama warga",
|
||||
examples: ["Budi Santoso"],
|
||||
error: "Nama warga harus diisi"
|
||||
}),
|
||||
phone: 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"
|
||||
// }),
|
||||
|
||||
dataText: t.Array(
|
||||
dataPelengkap: t.Array(
|
||||
t.Object({
|
||||
jenis: t.String({
|
||||
key: t.String({
|
||||
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"
|
||||
@@ -501,25 +513,25 @@ 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" },
|
||||
{ key: "nama", value: "Budi Santoso" },
|
||||
{ key: "jenis kelamin", value: "Laki-laki" },
|
||||
{ key: "tempat tanggal lahir", value: "Denpasar, 28 Februari 1990" },
|
||||
{ key: "negara", value: "Indonesia" },
|
||||
{ key: "agama", value: "Islam" },
|
||||
{ key: "status perkawinan", value: "Belum menikah" },
|
||||
{ key: "alamat", value: "Jl. Mawar No. 10" },
|
||||
{ key: "pekerjaan", value: "Karyawan Swasta" },
|
||||
{ key: "jenis usaha", value: "usaha makanan" },
|
||||
{ key: "alamat usaha", value: "Jl. Melati No. 21" },
|
||||
]
|
||||
],
|
||||
error: "dataText harus berupa array"
|
||||
error: "Data Pelengkap harus berupa array"
|
||||
}
|
||||
),
|
||||
|
||||
syaratDokumen: t.Array(
|
||||
t.Object({
|
||||
jenis: t.String({
|
||||
key: t.String({
|
||||
description: "Jenis dokumen persyaratan yang diminta oleh kategori layanan.",
|
||||
examples: ["ktp", "kk", "surat_pengantar_rt"],
|
||||
error: "jenis harus diisi"
|
||||
@@ -534,19 +546,18 @@ 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" }
|
||||
{ key: "pengantar kelian", value: "pengantar_kelurahan_budi.png" },
|
||||
{ key: "ktp/kk", value: "kk_budi.png" },
|
||||
{ key: "foto lokasi", value: "foto_lokasi_budi.png" }
|
||||
]
|
||||
],
|
||||
error: "syaratDokumen harus berupa array"
|
||||
error: "Syarat Dokumen harus berupa array"
|
||||
}
|
||||
),
|
||||
}),
|
||||
detail: {
|
||||
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"]
|
||||
}
|
||||
})
|
||||
.post("/detail-data", async ({ body }) => {
|
||||
@@ -698,7 +709,6 @@ const PelayananRoute = new Elysia({
|
||||
dataText: dataTextFix,
|
||||
}
|
||||
|
||||
console.log('detail data syarat==', dataSyaratFix)
|
||||
|
||||
return datafix
|
||||
|
||||
@@ -778,7 +788,6 @@ const PelayananRoute = new Elysia({
|
||||
.post("/update", async ({ body }) => {
|
||||
const { nomerPengajuan, syaratDokumen, dataText } = body
|
||||
let dataUpdate = []
|
||||
console.log(body)
|
||||
|
||||
const pengajuan = await prisma.pelayananAjuan.findFirst({
|
||||
where: {
|
||||
@@ -787,18 +796,15 @@ const PelayananRoute = new Elysia({
|
||||
})
|
||||
|
||||
if (!pengajuan) {
|
||||
console.log("data pengajuan surat tidak ditemukan")
|
||||
return { success: false, message: 'data pengajuan surat tidak ditemukan' }
|
||||
}
|
||||
|
||||
|
||||
if (pengajuan.status != "ditolak" && pengajuan.status != "antrian") {
|
||||
console.log("pengajuan surat tidak dapat diupdate karena status " + pengajuan.status)
|
||||
return { success: false, message: 'pengajuan surat tidak dapat diupdate karena status ' + pengajuan.status }
|
||||
}
|
||||
|
||||
if (dataText && dataText.length > 0) {
|
||||
console.log("dataText")
|
||||
for (const item of dataText) {
|
||||
dataUpdate.push(item.jenis)
|
||||
const hasil = await prisma.dataTextPelayanan.findFirst({
|
||||
@@ -842,10 +848,8 @@ const PelayananRoute = new Elysia({
|
||||
|
||||
|
||||
if (syaratDokumen && syaratDokumen.length > 0) {
|
||||
console.log("syaratDokumen")
|
||||
for (const item of syaratDokumen) {
|
||||
const pilih = syarat?.find((cat) => cat.desc.toLowerCase() == item.jenis.toLowerCase() || cat.name.toLowerCase() == item.jenis.toLowerCase())?.name;
|
||||
console.log(syarat, pilih)
|
||||
dataUpdate.push(pilih)
|
||||
|
||||
const hasil = await prisma.syaratDokumenPelayanan.findFirst({
|
||||
@@ -854,7 +858,6 @@ const PelayananRoute = new Elysia({
|
||||
jenis: pilih,
|
||||
}
|
||||
})
|
||||
console.log(hasil, item)
|
||||
|
||||
if (hasil && hasil.id) {
|
||||
const upd = await prisma.syaratDokumenPelayanan.upsert({
|
||||
@@ -898,7 +901,6 @@ const PelayananRoute = new Elysia({
|
||||
}
|
||||
})
|
||||
|
||||
console.log("pengajuan surat sudah diperbarui")
|
||||
|
||||
return { success: true, message: 'pengajuan surat sudah diperbarui' }
|
||||
|
||||
|
||||
Reference in New Issue
Block a user