API & UI Menu Lingkungan Submenu Pengelolaan Sampah

This commit is contained in:
2025-07-18 15:01:43 +08:00
parent 7439eb7687
commit 4025771a4d
25 changed files with 1235 additions and 304 deletions

View File

@@ -4,6 +4,7 @@ import pengelolaanSampahDelete from "./del";
import pengelolaanSampahFindMany from "./findMany";
import pengelolaanSampahFindUnique from "./findUnique";
import pengelolaanSampahUpdate from "./updt";
import KeteranganBankSampahTerdekat from "./keterangan-bank-sampah";
const PengelolaanSampah = new Elysia({
prefix: "/pengelolaansampah",
@@ -33,5 +34,6 @@ const PengelolaanSampah = new Elysia({
}),
}
)
.delete("/del/:id", pengelolaanSampahDelete);
.delete("/del/:id", pengelolaanSampahDelete)
.use(KeteranganBankSampahTerdekat);
export default PengelolaanSampah;

View File

@@ -0,0 +1,33 @@
import prisma from "@/lib/prisma";
import { Context } from "elysia";
type FormCreateKeteranganBankSampahTerdekat = {
name: string;
alamat: string;
namaTempatMaps: string;
lat: number;
lng: number;
}
export default async function keteranganBankSampahTerdekatCreate(context: Context) {
const body = context.body as FormCreateKeteranganBankSampahTerdekat;
const linkPetunjukArah = `https://www.google.com/maps/dir/?api=1&destination=${body.lat},${body.lng}`;
const created = await prisma.keteranganBankSampahTerdekat.create({
data: {
name: body.name,
alamat: body.alamat,
namaTempatMaps: body.namaTempatMaps,
lat: body.lat,
lng: body.lng,
linkPetunjukArah,
},
});
return {
success: true,
message: "Success create keterangan bank sampah terdekat",
data: created,
};
}

View File

@@ -0,0 +1,36 @@
import prisma from "@/lib/prisma";
import { Context } from "elysia";
const keteranganBankSampahTerdekatDelete = async (context: Context) => {
const id = context.params?.id as string;
if (!id) {
return {
status: 400,
body: "ID tidak diberikan",
};
}
const keteranganBankSampahTerdekat = await prisma.keteranganBankSampahTerdekat.findUnique({
where: { id },
});
if (!keteranganBankSampahTerdekat) {
return {
status: 404,
body: "Keterangan bank sampah terdekat tidak ditemukan",
};
}
await prisma.keteranganBankSampahTerdekat.delete({
where: { id },
});
return {
success: true,
status: 200,
message: "Keterangan bank sampah terdekat berhasil dihapus",
};
};
export default keteranganBankSampahTerdekatDelete;

View File

@@ -0,0 +1,21 @@
import prisma from "@/lib/prisma";
export default async function keteranganBankSampahTerdekatFindMany() {
try {
const data = await prisma.keteranganBankSampahTerdekat.findMany({
where: { isActive: true },
});
return {
success: true,
message: "Success fetch keterangan bank sampah terdekat",
data,
};
} catch (e) {
console.error("Find many error:", e);
return {
success: false,
message: "Failed fetch keterangan bank sampah terdekat",
};
}
}

View File

@@ -0,0 +1,39 @@
/* eslint-disable @typescript-eslint/no-explicit-any */
import prisma from "@/lib/prisma";
import { Context } from "elysia";
export default async function keteranganBankSampahTerdekatFindUnique(context: Context) {
const { id } = context.params as { id: string };
if (!id) {
return {
success: false,
message: "ID keterangan bank sampah terdekat diperlukan",
};
}
try {
const keteranganBankSampahTerdekat = await prisma.keteranganBankSampahTerdekat.findUnique({
where: { id },
});
if (!keteranganBankSampahTerdekat) {
return {
success: false,
message: "Keterangan bank sampah terdekat tidak ditemukan",
};
}
return {
success: true,
data: keteranganBankSampahTerdekat,
};
} catch (error: any) {
console.error("Error findUnique keterangan bank sampah terdekat:", error);
return {
success: false,
message: "Gagal mengambil data keterangan bank sampah terdekat",
error: error.message,
};
}
}

View File

@@ -0,0 +1,44 @@
import Elysia, { t } from "elysia";
import keteranganBankSampahTerdekatCreate from "./create";
import keteranganBankSampahTerdekatDelete from "./del";
import keteranganBankSampahTerdekatFindMany from "./findMany";
import keteranganBankSampahTerdekatFindUnique from "./findUnique";
import keteranganBankSampahTerdekatUpdate from "./updt";
const KeteranganBankSampahTerdekat = new Elysia({
prefix: "/keteranganbankterdekat",
tags: ["Lingkungan/Pengelolaan Sampah/Keterangan Bank Sampah Terdekat"],
})
.get("/find-many", keteranganBankSampahTerdekatFindMany)
.get("/:id", async (context) => {
const response = await keteranganBankSampahTerdekatFindUnique(context);
return response;
})
.post("/create", keteranganBankSampahTerdekatCreate, {
body: t.Object({
name: t.String(),
alamat: t.String(),
namaTempatMaps: t.String(),
lat: t.Number(),
lng: t.Number(),
}),
})
.put(
"/:id",
async (context) => {
const response = await keteranganBankSampahTerdekatUpdate(context);
return response;
},
{
body: t.Object({
name: t.String(),
alamat: t.String(),
namaTempatMaps: t.String(),
lat: t.Number(),
lng: t.Number(),
}),
}
)
.delete("/del/:id", keteranganBankSampahTerdekatDelete);
export default KeteranganBankSampahTerdekat;

View File

@@ -0,0 +1,55 @@
/* eslint-disable @typescript-eslint/no-explicit-any */
import prisma from "@/lib/prisma";
import { Context } from "elysia";
type FormUpdateKeteranganBankSampahTerdekat = {
id: string;
name?: string;
alamat?: string;
namaTempatMaps?: string;
lat?: number;
lng?: number;
};
export default async function keteranganBankSampahTerdekatUpdate(context: Context) {
const body = context.body as FormUpdateKeteranganBankSampahTerdekat;
const id = context.params?.id;
if (!id) {
return {
success: false,
message: "ID keterangan bank sampah terdekat wajib diisi",
};
}
try {
const updateData: any = {
name: body.name,
alamat: body.alamat,
namaTempatMaps: body.namaTempatMaps,
};
if (body.lat !== undefined && body.lng !== undefined) {
updateData.lat = body.lat;
updateData.lng = body.lng;
updateData.linkPetunjukArah = `https://www.google.com/maps/dir/?api=1&destination=${body.lat},${body.lng}`;
}
const updated = await prisma.keteranganBankSampahTerdekat.update({
where: { id },
data: updateData,
});
return {
success: true,
message: "Success update keterangan bank sampah terdekat",
data: updated,
};
} catch (error) {
console.error("Update error:", error);
return {
success: false,
message: "Gagal mengupdate keterangan bank sampah terdekat",
};
}
}