Compare commits

...

3 Commits

Author SHA1 Message Date
73bf785d13 upd: pelayanan
Deskripsi :
- api category pelayanan list
- api category pelayanan create
- api category pelayanan update
- api category pelayanan delete

No Issues
2025-10-31 12:09:31 +08:00
cc7dcccd1b Merge pull request 'upd : pelayanan surat' (#5) from amalia/30-okt-25 into main
Reviewed-on: http://wibugit.wibudev.com/wibu/jenna-mcp/pulls/5
2025-10-30 18:11:41 +08:00
a475db688b upd : pelayanan surat
Deskripsi:
- update database
- update seeder categori pelayanan surat

No Issues
2025-10-30 18:10:48 +08:00
5 changed files with 335 additions and 10 deletions

View File

@@ -29,6 +29,7 @@ model User {
updatedAt DateTime @updatedAt
ApiKey ApiKey[]
HistoryPengaduan HistoryPengaduan[]
HistoryPelayanan HistoryPelayanan[]
}
model ApiKey {
@@ -92,13 +93,109 @@ model HistoryPengaduan {
}
model Warga {
id String @id @default(cuid())
name String?
phone String? @unique
isActive Boolean @default(true)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
Pengaduan Pengaduan[]
id String @id @default(cuid())
name String?
phone String? @unique
isActive Boolean @default(true)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
Pengaduan Pengaduan[]
PelayananAjuan PelayananAjuan[]
SuratPelayanan SuratPelayanan[]
}
model CategoryPelayanan {
id String @id @default(cuid())
name String
syaratDokumen Json[]
dataText String[]
isActive Boolean @default(true)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
PelayananAjuan PelayananAjuan[]
SyaratDokumenPelayanan SyaratDokumenPelayanan[]
DataTextPelayanan DataTextPelayanan[]
SuratPelayanan SuratPelayanan[]
}
model PelayananAjuan {
id String @id @default(cuid())
Warga Warga @relation(fields: [idWarga], references: [id])
idWarga String
CategoryPelayanan CategoryPelayanan @relation(fields: [idCategory], references: [id])
idCategory String
noPengajuan String
status StatusPengaduan @default(antrian)
isActive Boolean @default(true)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
HistoryPelayanan HistoryPelayanan[]
SyaratDokumenPelayanan SyaratDokumenPelayanan[]
DataTextPelayanan DataTextPelayanan[]
SuratPelayanan SuratPelayanan[]
}
model HistoryPelayanan {
id String @id @default(cuid())
PelayananAjuan PelayananAjuan @relation(fields: [idPengajuanLayanan], references: [id])
idPengajuanLayanan String
User User? @relation(fields: [idUser], references: [id])
idUser String?
deskripsi String?
status StatusPengaduan @default(antrian)
isActive Boolean @default(true)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
model SyaratDokumenPelayanan {
id String @id @default(cuid())
PelayananAjuan PelayananAjuan @relation(fields: [idPengajuanLayanan], references: [id])
idPengajuanLayanan String
CategoryPelayanan CategoryPelayanan @relation(fields: [idCategory], references: [id])
idCategory String
jenis String
value String
isActive Boolean @default(true)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
model DataTextPelayanan {
id String @id @default(cuid())
PelayananAjuan PelayananAjuan @relation(fields: [idPengajuanLayanan], references: [id])
idPengajuanLayanan String
CategoryPelayanan CategoryPelayanan @relation(fields: [idCategory], references: [id])
idCategory String
jenis String
value String
isActive Boolean @default(true)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
model SuratPelayanan {
id String @id @default(cuid())
PelayananAjuan PelayananAjuan @relation(fields: [idPengajuanLayanan], references: [id])
idPengajuanLayanan String
CategoryPelayanan CategoryPelayanan @relation(fields: [idCategory], references: [id])
idCategory String
Warga Warga @relation(fields: [idWarga], references: [id])
idWarga String
noSurat String
dateExpired DateTime @db.Date
status Int
isActive Boolean @default(true)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
model Configuration {
id String @id @default(cuid())
category String
value String
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
enum StatusPengaduan {

View File

@@ -1,3 +1,4 @@
import { categoryPelayananSurat } from "@/lib/categoryPelayananSurat";
import { prisma } from "@/server/lib/prisma";
const category = [
@@ -80,6 +81,16 @@ const user = [
console.log(`✅ Category ${c.name} seeded successfully`)
}
for (const cp of categoryPelayananSurat){
await prisma.categoryPelayanan.upsert({
where: { id: cp.id },
create: cp,
update: cp
})
console.log(`✅ Category Pelayanan ${cp.name} seeded successfully`)
}

View File

@@ -1,17 +1,18 @@
import Swagger from "@elysiajs/swagger";
import Elysia from "elysia";
import html from "./index.html";
import { convertOpenApiToMcp } from "./server/lib/mcp-converter";
import { apiAuth } from "./server/middlewares/apiAuth";
import AduanRoute from "./server/routes/aduan_route";
import ApiKeyRoute from "./server/routes/apikey_route";
import Auth from "./server/routes/auth_route";
import CredentialRoute from "./server/routes/credential_route";
import DarmasabaRoute from "./server/routes/darmasaba_route";
import { convertOpenApiToMcp } from "./server/lib/mcp-converter";
import UserRoute from "./server/routes/user_route";
import LayananRoute from "./server/routes/layanan_route";
import AduanRoute from "./server/routes/aduan_route";
import { MCPRoute } from "./server/routes/mcp_route";
import PelayananRoute from "./server/routes/pelayanan_surat_route";
import PengaduanRoute from "./server/routes/pengaduan_route";
import UserRoute from "./server/routes/user_route";
const Docs = new Elysia({
tags: ["docs"],
@@ -26,6 +27,7 @@ const Api = new Elysia({
tags: ["api"],
})
.use(PengaduanRoute)
.use(PelayananRoute)
.use(apiAuth)
.use(ApiKeyRoute)
.use(DarmasabaRoute)

View File

@@ -0,0 +1,109 @@
export const categoryPelayananSurat = [
{
id: "skbedabiodata",
name: "Surat Keterangan Beda Biodata Diri",
syaratDokumen: [
{ name: "pengantar kelian", desc: "Surat Pengantar Kelian Banjar Dinas di Wilayah Masing-masing" },
{ name: "ktp/kk", desc: "Fotokopi KTP atau Kartu Keluarga" },
{ name: "dokumen yang beda", desc: "Fotokopi dokumen bersangkutan yang terdapat perbedaan biodata diri, misalnya: Sertifikat Tanah, Ijazah, Polis Asuransi, dan lainnya." }
],
dataText: ["nik", "nama", "tempat tanggal lahir", "jenis kelamin", "alamat", "pekerjaan", "dokumen", "tertulis pada dokumen a", "tertulis pada dokumen b"]
},
{
id: "skbelumkawin",
name: "Surat Keterangan Belum Kawin",
syaratDokumen: [
{ name: "pengantar kelian", desc: "Surat Pengantar Kelian Banjar Dinas" },
{ name: "ktp/kk", desc: "Fotokopi KTP dan Kartu Keluarga" },
{ name: "akta cerai", desc: "Fotokopi Akta Cerai bagi yang berstatus janda/duda" }
],
dataText: ["nik", "nama", "tempat tanggal lahir", "jenis kelamin", "alamat", "status perkawinan"]
},
{
id: "skdomisiliorganisasi",
name: "Surat Keterangan Domisili Organisasi",
syaratDokumen: [
{ name: "pengantar kelian", desc: "Surat Pengantar Kelian Banjar Dinas" },
{ name: "skt organisasi", desc: "Fotokopi Surat Keterangan Terdaftar (SKT) Organisasi atau Pengukuhan Kelompok" },
{name: "susunan pengurus", desc: "Jika Pengajuan baru pembuatan SKT maka melengkapi Susunan Pengurus lengkap denganKop Organisasi"}
],
dataText: ["nama organisasi", "alamat organisasi", "nama pemohon", "jabatan pemohon", "kontak", "penanggung jawab", "tanggal berdiri"]
},
{
id: "skkelahiran",
name: "Surat Keterangan Kelahiran",
syaratDokumen: [
{ name: "pengantar kelian", desc: "Surat Pengantar Kelian Banjar Dinas" },
{ name: "surat lahir", desc: "Fotokopi Surat Keterangan Lahir dari Bidan/Dokter (jika ada)" }
],
dataText: ["nama ayah", "nama ibu", "nama anak", "tanggal lahir", "tempat lahir", "jenis kelamin", "nama pelapor"]
},
{
id: "skkelakuanbaik",
name: "Surat Keterangan Kelakuan Baik (Pengantar SKCK)",
syaratDokumen: [
{ name: "pengantar kelian", desc: "Surat Pengantar Kelian Banjar Dinas" },
{ name: "ktp/kk", desc: "Fotokopi KTP dan Kartu Keluarga" }
],
dataText: ["nik", "nama", "tempat tanggal lahir", "jenis kelamin", "alamat", "keperluan"]
},
{
id: "skkematian",
name: "Surat Keterangan Kematian",
syaratDokumen: [
{ name: "pengantar kelian", desc: "Surat Pengantar Kelian Banjar Dinas" },
{ name: "ktp/kk", desc: "Fotokopi KTP atau Kartu Keluarga" },
{ name: "surat kematian", desc: "Surat Keterangan Kematian dari Rumah Sakit/Dokter (jika ada)" }
],
dataText: ["nama almarhum", "nik", "tempat tanggal lahir", "alamat", "tanggal kematian", "waktu kematian", "penyebab kematian"]
},
{
id: "skpenghasilan",
name: "Surat Keterangan Penghasilan",
syaratDokumen: [
{ name: "pengantar kelian", desc: "Surat Pengantar Kelian Banjar Dinas" },
{ name: "ktp ortu/kk", desc: "Fotokopi KTP orang tua atau Kartu Keluarga" },
{ name: "surat pernyataan", desc: "Surat Pernyataan Penghasilan bermaterai" }
],
dataText: ["nama", "nik", "alamat", "pekerjaan", "jenis usaha", "penghasilan"]
},
{
id: "sktempatusaha",
name: "Surat Keterangan Tempat Usaha",
syaratDokumen: [
{ name: "pengantar kelian", desc: "Surat Pengantar Kelian Banjar Dinas" },
{ name: "ktp/kk", desc: "Fotokopi KTP atau Kartu Keluarga" },
{ name: "foto lokasi", desc: "Foto lokasi usaha dicetak dalam selembar kertas, diparaf dan distempel oleh Kelian" },
{ name: "sppt/sertifikat/sewa", desc: "Fotokopi SPPT, Sertifikat Hak Milik, Surat Perjanjian Sewa, atau Kwitansi Pembayaran Sewa 3 bulan terakhir" }
],
dataText: ["nama usaha", "bidang usaha", "alamat usaha", "status tempat usaha", "luas tempat usaha", "jumlah karyawan", "tujuan pembuatan surat"]
},
{
id: "sktidakmampu",
name: "Surat Keterangan Tidak Mampu",
syaratDokumen: [
{ name: "pengantar kelian", desc: "Surat Pengantar Kelian Banjar Dinas" },
{ name: "ktp/kia/kk", desc: "Fotokopi KTP, KIA, atau Kartu Keluarga" }
],
dataText: ["nik", "nama", "tempat tanggal lahir", "alamat", "alasan permohonan"]
},
{
id: "skusaha",
name: "Surat Keterangan Usaha",
syaratDokumen: [
{ name: "pengantar kelian", desc: "Surat Pengantar Kelian Banjar Dinas" },
{ name: "ktp/kk", desc: "Fotokopi KTP atau Kartu Keluarga" },
{ name: "foto lokasi", desc: "Foto lokasi usaha dicetak dalam selembar kertas, diparaf dan distempel oleh Kelian" }
],
dataText: ["jenis usaha", "alamat usaha"]
},
{
id: "skyatimpiatu",
name: "Surat Keterangan Yatim / Piatu / Yatim Piatu",
syaratDokumen: [
{ name: "pengantar kelian", desc: "Surat Pengantar Kelian Banjar Dinas" },
{ name: "ktp/kia/kk", desc: "Fotokopi KTP, KIA, atau Kartu Keluarga" }
],
dataText: ["nama anak", "nama ayah", "status ayah", "nama ibu", "status ibu"]
}
];

View File

@@ -0,0 +1,106 @@
import Elysia, { t } from "elysia"
import { prisma } from "../lib/prisma"
const PelayananRoute = new Elysia({
prefix: "pelayanan",
tags: ["pelayanan"],
})
// --- KATEGORI PELAYANAN ---
.get("/category", async () => {
const data = await prisma.categoryPelayanan.findMany({
where: {
isActive: true
}
})
return data
}, {
detail: {
summary: "List Kategori Pelayanan Surat",
description: `tool untuk mendapatkan list kategori pelayanan surat`,
tags: ["mcp"]
}
})
.post("/category/create", async ({ body }) => {
const { name, syaratDokumen, dataText } = body
await prisma.categoryPelayanan.create({
data: {
name,
syaratDokumen,
dataText,
}
})
return `
${JSON.stringify(body)}
kategori pelayanan surat sudah dibuat`
}, {
body: t.Object({
name: t.String({ minLength: 1, error: "name harus diisi" }),
syaratDokumen: t.Array(t.String({ minLength: 1, error: "syaratDokumen harus diisi" })),
dataText: t.Array(t.String({ minLength: 1, error: "dataText harus diisi" })),
}),
detail: {
summary: "buat kategori pelayanan surat",
description: `tool untuk membuat kategori pelayanan surat`
}
})
.post("/category/update", async ({ body }) => {
const { id, name, syaratDokumen, dataText } = body
await prisma.categoryPelayanan.update({
where: {
id,
},
data: {
name,
syaratDokumen,
dataText,
}
})
return `
${JSON.stringify(body)}
kategori pelayanan surat sudah diperbarui`
}, {
body: t.Object({
id: t.String({ minLength: 1, error: "id harus diisi" }),
name: t.String({ minLength: 1, error: "name harus diisi" }),
syaratDokumen: t.Array(t.String({ minLength: 1, error: "syaratDokumen harus diisi" })),
dataText: t.Array(t.String({ minLength: 1, error: "dataText harus diisi" })),
}),
detail: {
summary: "update kategori pelayanan surat",
description: `tool untuk update kategori pelayanan surat`
}
})
.post("/category/delete", async ({ body }) => {
const { id } = body
await prisma.categoryPelayanan.update({
where: {
id,
},
data: {
isActive: false
}
})
return `
${JSON.stringify(body)}
kategori pelayanan surat sudah dihapus`
}, {
body: t.Object({
id: t.String({ minLength: 1, error: "id harus diisi" }),
}),
detail: {
summary: "delete kategori pelayanan surat",
description: `tool untuk delete kategori pelayanan surat`
}
})
export default PelayananRoute