diff --git a/prisma/schema.prisma b/prisma/schema.prisma
index 6f92e9a..858f99f 100644
--- a/prisma/schema.prisma
+++ b/prisma/schema.prisma
@@ -67,11 +67,11 @@ model Pengaduan {
idWarga String
noPengaduan String
title String?
- phone String?
detail String?
location String?
image String?
- status StatusPengaduan @default(diterima)
+ keterangan String?
+ status StatusPengaduan @default(antrian)
isActive Boolean @default(true)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@ -82,12 +82,10 @@ model HistoryPengaduan {
id String @id @default(cuid())
Pengaduan Pengaduan @relation(fields: [idPengaduan], references: [id])
idPengaduan String
- User User @relation(fields: [idUser], references: [id])
- idUser String
+ User User? @relation(fields: [idUser], references: [id])
+ idUser String?
deskripsi String?
- status StatusPengaduan @default(diterima)
- image String?
- order Int
+ status StatusPengaduan @default(antrian)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
diff --git a/src/pages/list/list_pengaduan_sampah.tsx b/src/pages/list/list_pengaduan_sampah.tsx
deleted file mode 100644
index e1fc389..0000000
--- a/src/pages/list/list_pengaduan_sampah.tsx
+++ /dev/null
@@ -1,13 +0,0 @@
-import apiFetch from "@/lib/apiFetch"
-import useSWR from "swr"
-
-export default function ListPengaduanSampah() {
- // const { data, error, isLoading, mutate } = useSWR("/", apiFetch.api.aduan["list-aduan-sampah"].get)
-
-
- return (
-
-
List Pengaduan Sampah
-
- )
-}
\ No newline at end of file
diff --git a/src/server/lib/no-pengaduan.ts b/src/server/lib/no-pengaduan.ts
new file mode 100644
index 0000000..634e5e7
--- /dev/null
+++ b/src/server/lib/no-pengaduan.ts
@@ -0,0 +1,23 @@
+import { prisma } from "./prisma"
+
+export const generateNoPengaduan = 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 = `PGD-${day}${month}${year}`
+
+ const count = await prisma.pengaduan.count({
+ where: {
+ noPengaduan: {
+ contains: prefix
+ }
+ }
+ })
+
+ // pastikan nomor urut selalu 3 digit
+ const number = String(count + 1).padStart(3, "0")
+
+ return `${prefix}-${number}`
+}
diff --git a/src/server/routes/aduan_route.ts b/src/server/routes/aduan_route.ts
index a9d6d32..e652600 100644
--- a/src/server/routes/aduan_route.ts
+++ b/src/server/routes/aduan_route.ts
@@ -23,12 +23,12 @@ const AduanRoute = new Elysia({
})
.post("/aduan-sampah", async (ctx) => {
const { judul, deskripsi } = ctx.body;
- await prisma.pengaduanSampah.create({
- data: {
- judul,
- deskripsi,
- }
- })
+ // await prisma.pengaduanSampah.create({
+ // data: {
+ // judul,
+ // deskripsi,
+ // }
+ // })
return {
success: true,
data: "berhasil membuat aduan sampah"
@@ -44,11 +44,11 @@ const AduanRoute = new Elysia({
}
})
.get("/list-aduan-sampah", async () => {
- const data = await prisma.pengaduanSampah.findMany()
- return {
- success: true,
- data: data
- }
+ // const data = await prisma.pengaduanSampah.findMany()
+ // return {
+ // success: true,
+ // data: data
+ // }
}, {
detail: {
summary: "list aduan sampah",
diff --git a/src/server/routes/darmasaba_route.ts b/src/server/routes/darmasaba_route.ts
index c7827f6..ab3b3ea 100644
--- a/src/server/routes/darmasaba_route.ts
+++ b/src/server/routes/darmasaba_route.ts
@@ -194,14 +194,14 @@ const DarmasabaRoute = new Elysia({
.post("/buat-pengaduan", async ({ body }) => {
const { jenis_laporan, name, phone, detail } = body
- await prisma.pengaduan.create({
- data: {
- jenis_laporan,
- detail,
- name,
- phone
- }
- })
+ // await prisma.pengaduan.create({
+ // data: {
+ // jenis_laporan,
+ // detail,
+ // name,
+ // phone
+ // }
+ // })
return `
${JSON.stringify(body)}
@@ -223,14 +223,14 @@ const DarmasabaRoute = new Elysia({
.post("/status-pengaduan", async ({ body }) => {
const { name, phone } = body
- const pengaduan = await prisma.pengaduan.findMany({
- where: {
- name,
- phone
- }
- })
+ // const pengaduan = await prisma.pengaduan.findMany({
+ // where: {
+ // name,
+ // phone
+ // }
+ // })
- return pengaduan
+ // return pengaduan
}, {
body: t.Object({
diff --git a/src/server/routes/pengaduan_route.ts b/src/server/routes/pengaduan_route.ts
new file mode 100644
index 0000000..2772ad5
--- /dev/null
+++ b/src/server/routes/pengaduan_route.ts
@@ -0,0 +1,203 @@
+import Elysia, { t } from "elysia"
+import type { StatusPengaduan } from "generated/prisma"
+import { generateNoPengaduan } from "../lib/no-pengaduan"
+import { prisma } from "../lib/prisma"
+
+const PengaduanRoute = new Elysia({
+ prefix: "pengaduan",
+ tags: ["pengaduan"],
+})
+
+ // --- KATEGORI PENGADUAN ---
+ .get("/category", async () => {
+ const data = await prisma.categoryPengaduan.findMany({
+ where: {
+ isActive: true
+ }
+ })
+ return data
+ }, {
+ detail: {
+ summary: "get kategori pengaduan",
+ description: `tool untuk mendapatkan kategori pengaduan`
+ }
+ })
+ .post("/category/create", async ({ body }) => {
+ const { name } = body
+
+ await prisma.categoryPengaduan.create({
+ data: {
+ name,
+ }
+ })
+
+ return `
+ ${JSON.stringify(body)}
+
+ kategori pengaduan sudah dibuat`
+ }, {
+ body: t.Object({
+ name: t.String({ minLength: 1, error: "name harus diisi" }),
+ }),
+ detail: {
+ summary: "buat kategori pengaduan",
+ description: `tool untuk membuat kategori pengaduan`
+ }
+ })
+ .post("/category/update", async ({ body }) => {
+ const { id, name } = body
+
+ await prisma.categoryPengaduan.update({
+ where: {
+ id,
+ },
+ data: {
+ name
+ }
+ })
+
+ return `
+ ${JSON.stringify(body)}
+
+ kategori pengaduan sudah diperbarui`
+ }, {
+ body: t.Object({
+ id: t.String({ minLength: 1, error: "id harus diisi" }),
+ name: t.String({ minLength: 1, error: "name harus diisi" }),
+ }),
+ detail: {
+ summary: "update kategori pengaduan",
+ description: `tool untuk update kategori pengaduan`
+ }
+ })
+ .post("/category/delete", async ({ body }) => {
+ const { id } = body
+
+ await prisma.categoryPengaduan.update({
+ where: {
+ id,
+ },
+ data: {
+ isActive: false
+ }
+ })
+
+ return `
+ ${JSON.stringify(body)}
+
+ kategori pengaduan sudah dihapus`
+ }, {
+ body: t.Object({
+ id: t.String({ minLength: 1, error: "id harus diisi" }),
+ }),
+ detail: {
+ summary: "delete kategori pengaduan",
+ description: `tool untuk delete kategori pengaduan`
+ }
+ })
+
+
+
+ // --- PENGADUAN ---
+ .post("/create", async ({ body }) => {
+ const { title, detail, location, image, idCategory, idWarga } = body
+ const noPengaduan = await generateNoPengaduan()
+
+ const pengaduan = await prisma.pengaduan.create({
+ data: {
+ title,
+ detail,
+ idCategory,
+ idWarga,
+ location,
+ image,
+ noPengaduan,
+ },
+ select: {
+ id: true,
+ }
+ })
+
+ if (!pengaduan.id) {
+ throw new Error("gagal membuat pengaduan")
+ }
+
+ await prisma.historyPengaduan.create({
+ data: {
+ idPengaduan: pengaduan.id,
+ deskripsi: "Pengaduan dibuat",
+ }
+ })
+
+ return `
+ ${JSON.stringify(body)}
+
+ pengaduan sudah dibuat`
+ }, {
+ body: t.Object({
+ title: t.String({ minLength: 1, error: "title harus diisi" }),
+ detail: t.String({ minLength: 1, error: "detail harus diisi" }),
+ location: t.String({ minLength: 1, error: "location harus diisi" }),
+ image: t.String({ minLength: 1, error: "image harus diisi" }),
+ idCategory: t.String({ minLength: 1, error: "idCategory harus diisi" }),
+ idWarga: t.String({ minLength: 1, error: "idWarga harus diisi" }),
+ }),
+ detail: {
+ summary: "buat pengaduan",
+ description: `tool untuk membuat pengaduan`
+ }
+ })
+ .post("/update-status", async ({ body }) => {
+ const { id, status, keterangan } = body
+ let deskripsi = ""
+
+ const pengaduan = await prisma.pengaduan.update({
+ where: {
+ id,
+ },
+ data: {
+ status: status as StatusPengaduan,
+ keterangan,
+ }
+ })
+
+ if (!pengaduan) {
+ throw new Error("gagal membuat pengaduan")
+ }
+
+ if(status === "diterima") {
+ deskripsi = "Pengaduan diterima oleh admin"
+ } else if(status === "dikerjakan") {
+ deskripsi = "Pengaduan dikerjakan oleh petugas"
+ } else if(status === "ditolak") {
+ deskripsi = "Pengaduan ditolak dengan keterangan " + keterangan
+ } else if(status === "selesai") {
+ deskripsi = "Pengaduan selesai"
+ }
+
+ await prisma.historyPengaduan.create({
+ data: {
+ idPengaduan: pengaduan.id,
+ deskripsi,
+ status: status as StatusPengaduan,
+ idUser: ""
+ }
+ })
+
+ return `
+ ${JSON.stringify(body)}
+
+ status pengaduan sudah diupdate`
+ }, {
+ body: t.Object({
+ id: t.String({ minLength: 1, error: "id harus diisi" }),
+ status: t.String({ minLength: 1, error: "status harus diisi" }),
+ keterangan: t.Any()
+ }),
+
+ detail: {
+ summary: "update status pengaduan",
+ description: `tool untuk update status pengaduan`
+ }
+ })
+export default PengaduanRoute