UI & API Menu Pendidikan, Submenu Perpustakaan Digital

This commit is contained in:
2025-07-29 17:58:17 +08:00
parent 0109886e00
commit c11cc421a4
31 changed files with 1804 additions and 100 deletions

View File

@@ -5,6 +5,7 @@ import BimbinganBelajarDesa from "./bimbingan-belajar-desa";
import PendidikanNonFormal from "./pendidikan-non-formal";
import DataPendidikan from "./data-pendidikan";
import Beasiswa from "./beasiswa-desa";
import PerpustakaanDigital from "./perpustakaan-digital";
const Pendidikan = new Elysia({
prefix: "/api/pendidikan",
@@ -17,5 +18,6 @@ const Pendidikan = new Elysia({
.use(PendidikanNonFormal)
.use(DataPendidikan)
.use(Beasiswa)
.use(PerpustakaanDigital)
export default Pendidikan;

View File

@@ -0,0 +1,32 @@
import prisma from "@/lib/prisma";
import { Context } from "elysia";
type FormCreate = {
judul: string;
deskripsi: string;
imageId: string;
kategoriId: string;
}
export default async function dataPerpustakaanCreate(context: Context) {
const body = (await context.body) as FormCreate;
try {
const result = await prisma.dataPerpustakaan.create({
data: {
judul: body.judul,
deskripsi: body.deskripsi,
imageId: body.imageId,
kategoriId: body.kategoriId,
},
});
return {
success: true,
message: "Berhasil membuat data perpustakaan",
data: result,
};
} catch (error) {
console.error("Error creating data perpustakaan:", error);
throw new Error("Gagal membuat data perpustakaan: " + (error as Error).message);
}
}

View File

@@ -0,0 +1,16 @@
import prisma from "@/lib/prisma";
import { Context } from "elysia";
export default async function dataPerpustakaanDelete(context: Context) {
const id = context.params.id as string;
await prisma.dataPerpustakaan.delete({
where: { id },
});
return {
status: 200,
success: true,
message: "Success delete data perpustakaan",
};
}

View File

@@ -0,0 +1,16 @@
import prisma from "@/lib/prisma";
export default async function dataPerpustakaanFindMany() {
const data = await prisma.dataPerpustakaan.findMany({
include: {
kategori: true,
image: true,
},
});
return {
success: true,
message: "Success get all data perpustakaan",
data,
};
}

View File

@@ -0,0 +1,50 @@
import prisma from "@/lib/prisma";
export default async function dataPerpustakaanFindUnique(request: Request) {
const url = new URL(request.url);
const pathSegments = url.pathname.split('/');
const id = pathSegments[pathSegments.length - 1];
if (!id) {
return {
success: false,
message: "ID is required",
}
}
try {
if (typeof id !== 'string') {
return {
success: false,
message: "ID is required",
}
}
const data = await prisma.dataPerpustakaan.findUnique({
where: { id },
include: {
kategori: true,
image: true,
},
});
if (!data) {
return {
success: false,
message: "Data not found",
}
}
return {
success: true,
message: "Success get data perpustakaan",
data,
}
} catch (error) {
console.error("Find by ID error:", error);
return {
success: false,
message: "Gagal mengambil data: " + (error instanceof Error ? error.message : 'Unknown error'),
}
}
}

View File

@@ -0,0 +1,39 @@
import Elysia, { t } from "elysia";
import dataPerpustakaanCreate from "./create";
import dataPerpustakaanDelete from "./del";
import dataPerpustakaanFindMany from "./findMany";
import dataPerpustakaanFindUnique from "./findUnique";
import dataPerpustakaanUpdate from "./updt";
const DataPerpustakaan = new Elysia({
prefix: "/dataperpustakaan",
tags: ["Pendidikan / Perpustakaan Digital / Data Perpustakaan"],
})
.post("/create", dataPerpustakaanCreate, {
body: t.Object({
judul: t.String(),
deskripsi: t.String(),
imageId: t.String(),
kategoriId: t.String(),
}),
})
.get("/findMany", dataPerpustakaanFindMany)
.get("/:id", async (context) => {
const response = await dataPerpustakaanFindUnique(
new Request(context.request)
);
return response;
})
.put("/:id", dataPerpustakaanUpdate, {
body: t.Object({
judul: t.String(),
deskripsi: t.String(),
imageId: t.String(),
kategoriId: t.String(),
}),
})
.delete("/del/:id", dataPerpustakaanDelete);
export default DataPerpustakaan;

View File

@@ -0,0 +1,35 @@
import prisma from "@/lib/prisma";
import { Context } from "elysia";
type FormUpdate = {
judul: string;
deskripsi: string;
imageId: string;
kategoriId: string;
}
export default async function dataPerpustakaanUpdate(context: Context) {
const body = (await context.body) as FormUpdate;
const id = context.params.id as string;
try {
const result = await prisma.dataPerpustakaan.update({
where: { id },
data: {
judul: body.judul,
deskripsi: body.deskripsi,
imageId: body.imageId,
kategoriId: body.kategoriId,
},
});
return {
success: true,
message: "Berhasil mengupdate data perpustakaan",
data: result,
};
} catch (error) {
console.error("Error updating data perpustakaan:", error);
throw new Error("Gagal mengupdate data perpustakaan: " + (error as Error).message);
}
}

View File

@@ -0,0 +1,12 @@
import Elysia from "elysia";
import DataPerpustakaan from "./data-perpustakaan";
import KategoriBuku from "./kategori-buku";
const PerpustakaanDigital = new Elysia({
prefix: "/perpustakaandigital",
tags: ["Pendidikan / Perpustakaan Digital"],
})
.use(DataPerpustakaan)
.use(KategoriBuku);
export default PerpustakaanDigital;

View File

@@ -0,0 +1,26 @@
import prisma from "@/lib/prisma";
import { Context } from "elysia";
type FormCreate = {
name: string;
}
export default async function kategoriBukuCreate(context: Context) {
const body = (await context.body) as FormCreate;
try {
const result = await prisma.kategoriBuku.create({
data: {
name: body.name,
},
});
return {
success: true,
message: "Berhasil membuat kategori buku",
data: result,
};
} catch (error) {
console.error("Error creating kategori buku:", error);
throw new Error("Gagal membuat kategori buku: " + (error as Error).message);
}
}

View File

@@ -0,0 +1,16 @@
import prisma from "@/lib/prisma";
import { Context } from "elysia";
export default async function kategoriBukuDelete(context: Context) {
const id = context.params.id as string;
await prisma.kategoriBuku.delete({
where: { id },
});
return {
status: 200,
success: true,
message: "Success delete kategori buku",
};
}

View File

@@ -0,0 +1,11 @@
import prisma from "@/lib/prisma";
export default async function kategoriBukuFindMany() {
const data = await prisma.kategoriBuku.findMany();
return {
success: true,
message: "Success get all kategori buku",
data,
};
}

View File

@@ -0,0 +1,46 @@
import prisma from "@/lib/prisma";
export default async function kategoriBukuFindUnique(request: Request) {
const url = new URL(request.url);
const pathSegments = url.pathname.split('/');
const id = pathSegments[pathSegments.length - 1];
if (!id) {
return {
success: false,
message: "ID is required",
}
}
try {
if (typeof id !== 'string') {
return {
success: false,
message: "ID is required",
}
}
const data = await prisma.kategoriBuku.findUnique({
where: { id },
});
if (!data) {
return {
success: false,
message: "Data not found",
}
}
return {
success: true,
message: "Success get kategori buku",
data,
}
} catch (error) {
console.error("Find by ID error:", error);
return {
success: false,
message: "Gagal mengambil data: " + (error instanceof Error ? error.message : 'Unknown error'),
}
}
}

View File

@@ -0,0 +1,33 @@
import Elysia, { t } from "elysia";
import kategoriBukuCreate from "./create";
import kategoriBukuDelete from "./del";
import kategoriBukuFindMany from "./findMany";
import kategoriBukuFindUnique from "./findUnique";
import kategoriBukuUpdate from "./updt";
const KategoriBuku = new Elysia({
prefix: "/kategoribuku",
tags: ["Pendidikan / Perpustakaan Digital / Kategori Buku"],
})
.post("/create", kategoriBukuCreate, {
body: t.Object({
name: t.String(),
}),
})
.get("/findMany", kategoriBukuFindMany)
.get("/:id", async (context) => {
const response = await kategoriBukuFindUnique(
new Request(context.request)
);
return response;
})
.put("/:id", kategoriBukuUpdate, {
body: t.Object({
name: t.String(),
}),
})
.delete("/del/:id", kategoriBukuDelete);
export default KategoriBuku;

View File

@@ -0,0 +1,28 @@
import prisma from "@/lib/prisma";
import { Context } from "elysia";
type FormUpdate = {
name: string;
}
export default async function kategoriBukuUpdate(context: Context) {
const body = (await context.body) as FormUpdate;
const id = context.params.id as string;
try {
const result = await prisma.kategoriBuku.update({
where: { id },
data: {
name: body.name,
},
});
return {
success: true,
message: "Berhasil mengupdate kategori buku",
data: result,
};
} catch (error) {
console.error("Error updating kategori buku:", error);
throw new Error("Gagal mengupdate kategori buku: " + (error as Error).message);
}
}