Merge pull request 'upd: api pelayanan surat' (#7) from amalia/03-nov-25 into main
Reviewed-on: http://wibugit.wibudev.com/wibu/jenna-mcp/pulls/7
This commit is contained in:
@@ -142,6 +142,7 @@ model HistoryPelayanan {
|
||||
User User? @relation(fields: [idUser], references: [id])
|
||||
idUser String?
|
||||
deskripsi String?
|
||||
keteranganAlasan String?
|
||||
status StatusPengaduan @default(antrian)
|
||||
isActive Boolean @default(true)
|
||||
createdAt DateTime @default(now())
|
||||
|
||||
23
src/server/lib/no-pengajuan-surat.ts
Normal file
23
src/server/lib/no-pengajuan-surat.ts
Normal file
@@ -0,0 +1,23 @@
|
||||
import { prisma } from "./prisma"
|
||||
|
||||
export const generateNoPengajuanSurat = async () => {
|
||||
const date = new Date()
|
||||
const year = String(date.getFullYear()).slice(-2) // ambil 2 digit terakhir
|
||||
const month = String(date.getMonth() + 1).padStart(2, "0")
|
||||
const day = String(date.getDate()).padStart(2, "0")
|
||||
|
||||
const prefix = `PS-${day}${month}${year}`
|
||||
|
||||
const count = await prisma.pelayananAjuan.count({
|
||||
where: {
|
||||
noPengajuan: {
|
||||
contains: prefix
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
// pastikan nomor urut selalu 3 digit
|
||||
const number = String(count + 1).padStart(3, "0")
|
||||
|
||||
return `${prefix}-${number}`
|
||||
}
|
||||
@@ -1,5 +1,7 @@
|
||||
import Elysia, { t } from "elysia"
|
||||
import Elysia, { StatusMap, t } from "elysia"
|
||||
import { generateNoPengajuanSurat } from "../lib/no-pengajuan-surat"
|
||||
import { prisma } from "../lib/prisma"
|
||||
import type { StatusPengaduan } from "generated/prisma"
|
||||
|
||||
const PelayananRoute = new Elysia({
|
||||
prefix: "pelayanan",
|
||||
@@ -103,4 +105,212 @@ const PelayananRoute = new Elysia({
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
// --- PELAYANAN SURAT ---
|
||||
.get("/", async () => {
|
||||
const data = await prisma.pelayananAjuan.findMany({
|
||||
where: {
|
||||
isActive: true
|
||||
}
|
||||
})
|
||||
return data
|
||||
}, {
|
||||
detail: {
|
||||
summary: "List Ajuan Pelayanan Surat",
|
||||
description: `tool untuk mendapatkan list ajuan pelayanan surat`,
|
||||
tags: ["mcp"]
|
||||
}
|
||||
})
|
||||
.get("/detail", async ({ query }) => {
|
||||
const { id } = query
|
||||
const data = await prisma.pelayananAjuan.findUnique({
|
||||
where: {
|
||||
id,
|
||||
}
|
||||
})
|
||||
return data
|
||||
}, {
|
||||
query: t.Object({
|
||||
id: t.String({ minLength: 1, error: "id harus diisi" }),
|
||||
}),
|
||||
detail: {
|
||||
summary: "Detail Ajuan Pelayanan Surat",
|
||||
description: `tool untuk mendapatkan detail ajuan pelayanan surat`,
|
||||
tags: ["mcp"]
|
||||
}
|
||||
})
|
||||
.post("/create", async ({ body }) => {
|
||||
const { idCategory, idWarga, phone, dataText, syaratDokumen } = body
|
||||
const noPengajuan = await generateNoPengajuanSurat()
|
||||
let idCategoryFix = idCategory
|
||||
let idWargaFix = idWarga
|
||||
const category = await prisma.categoryPelayanan.findUnique({
|
||||
where: {
|
||||
id: idCategory,
|
||||
}
|
||||
})
|
||||
|
||||
if (!category) {
|
||||
const cariCategory = await prisma.categoryPelayanan.findFirst({
|
||||
where: {
|
||||
name: idCategory,
|
||||
}
|
||||
})
|
||||
|
||||
if (!cariCategory) {
|
||||
throw new Error("kategori pelayanan surat tidak ditemukan")
|
||||
} else {
|
||||
idCategoryFix = cariCategory.id
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
const warga = await prisma.warga.findUnique({
|
||||
where: {
|
||||
id: idWarga,
|
||||
}
|
||||
})
|
||||
|
||||
if (!warga) {
|
||||
const cariWarga = await prisma.warga.findFirst({
|
||||
where: {
|
||||
phone,
|
||||
}
|
||||
})
|
||||
|
||||
if (!cariWarga) {
|
||||
const wargaCreate = await prisma.warga.create({
|
||||
data: {
|
||||
name: idWarga,
|
||||
phone,
|
||||
},
|
||||
select: {
|
||||
id: true
|
||||
}
|
||||
})
|
||||
idWargaFix = wargaCreate.id
|
||||
} else {
|
||||
idWargaFix = cariWarga.id
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
const pengaduan = await prisma.pelayananAjuan.create({
|
||||
data: {
|
||||
noPengajuan,
|
||||
idCategory: idCategoryFix,
|
||||
idWarga: idWargaFix,
|
||||
},
|
||||
select: {
|
||||
id: true,
|
||||
}
|
||||
})
|
||||
|
||||
if (!pengaduan.id) {
|
||||
throw new Error("gagal membuat pengaduan")
|
||||
}
|
||||
|
||||
let dataInsertSyaratDokumen = []
|
||||
let dataInsertDataText = []
|
||||
|
||||
for (const item of syaratDokumen) {
|
||||
dataInsertSyaratDokumen.push({
|
||||
idPengajuanLayanan: pengaduan.id,
|
||||
idCategory: idCategoryFix,
|
||||
jenis: item.jenis,
|
||||
value: item.value,
|
||||
})
|
||||
}
|
||||
|
||||
for (const item of dataText) {
|
||||
dataInsertDataText.push({
|
||||
idPengajuanLayanan: pengaduan.id,
|
||||
idCategory: idCategoryFix,
|
||||
jenis: item.jenis,
|
||||
value: item.value,
|
||||
})
|
||||
}
|
||||
|
||||
await prisma.syaratDokumenPelayanan.createMany({
|
||||
data: dataInsertSyaratDokumen,
|
||||
})
|
||||
|
||||
await prisma.dataTextPelayanan.createMany({
|
||||
data: dataInsertDataText,
|
||||
})
|
||||
|
||||
|
||||
await prisma.historyPelayanan.create({
|
||||
data: {
|
||||
idPengajuanLayanan: pengaduan.id,
|
||||
deskripsi: "Pengajuan surat dibuat",
|
||||
}
|
||||
})
|
||||
|
||||
return `
|
||||
${JSON.stringify(body)}
|
||||
|
||||
pengaduan sudah dibuat`
|
||||
}, {
|
||||
body: t.Object({
|
||||
idCategory: t.String({ minLength: 1, error: "idCategory harus diisi" }),
|
||||
idWarga: t.String({ minLength: 1, error: "idWarga harus diisi" }),
|
||||
phone: t.String({ minLength: 1, error: "phone harus diisi" }),
|
||||
dataText: t.Array(t.Object({
|
||||
jenis: t.String({ minLength: 1, error: "jenis harus diisi" }),
|
||||
value: t.String({ minLength: 1, error: "value harus diisi" }),
|
||||
})),
|
||||
syaratDokumen: t.Array(t.Object({
|
||||
jenis: t.String({ minLength: 1, error: "jenis harus diisi" }),
|
||||
value: t.String({ minLength: 1, error: "value harus diisi" }),
|
||||
})),
|
||||
}),
|
||||
detail: {
|
||||
summary: "Create Pengajuan Pelayanan Surat",
|
||||
description: `tool untuk membuat pengajuan pelayanan surat`,
|
||||
tags: ["mcp"]
|
||||
}
|
||||
})
|
||||
.post("/update-status", async ({ body }) => {
|
||||
const { id, status, keterangan, idUser } = body
|
||||
|
||||
const pengajuan = await prisma.pelayananAjuan.update({
|
||||
where: {
|
||||
id,
|
||||
},
|
||||
data: {
|
||||
status: status as StatusPengaduan,
|
||||
}
|
||||
})
|
||||
|
||||
if (!pengajuan) {
|
||||
throw new Error("gagal membuat pengajuan")
|
||||
}
|
||||
|
||||
await prisma.historyPelayanan.create({
|
||||
data: {
|
||||
idPengajuanLayanan: pengajuan.id,
|
||||
deskripsi: "Pengajuan surat diperbarui",
|
||||
keteranganAlasan: keterangan,
|
||||
}
|
||||
})
|
||||
|
||||
return `
|
||||
${JSON.stringify(body)}
|
||||
|
||||
pengajuan surat sudah diperbarui`
|
||||
}, {
|
||||
body: t.Object({
|
||||
id: t.String({ minLength: 1, error: "id harus diisi" }),
|
||||
status: t.String({ minLength: 1, error: "status harus diisi" }),
|
||||
keterangan: t.String({ minLength: 1, error: "keterangan harus diisi" }),
|
||||
idUser: t.String({ minLength: 1, error: "idUser harus diisi" }),
|
||||
}),
|
||||
detail: {
|
||||
summary: "Update status pengajuan pelayanan surat",
|
||||
description: `tool untuk update status pengajuan pelayanan surat`,
|
||||
tags: ["mcp"]
|
||||
}
|
||||
})
|
||||
|
||||
export default PelayananRoute
|
||||
|
||||
Reference in New Issue
Block a user