feat(kegiatan-desa): add full CRUD frontend + public detail page - bump to 0.1.47

- API: add GET /:id endpoint (findUnique) for KegiatanDesa
- Admin CMS: add pages for list-kegiatan-desa and kategori-kegiatan-desa (list, create, detail, edit)
- Public: add detail page at /desa/kegiatan-desa/[kategori]/[id]
- Refactor: move KegiatanCard to _com to fix Next.js page export constraint
- Nav: register kegiatan-desa in navbar and admin page list

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-30 14:27:28 +08:00
parent 23c955597e
commit e0a5177257
21 changed files with 2638 additions and 4 deletions

View File

@@ -0,0 +1,35 @@
import prisma from "@/lib/prisma";
import { Context } from "elysia";
async function kegiatanDesaFindUnique(context: Context) {
const { id } = context.params as { id: string };
if (!id) {
return { success: false, message: "ID is required" };
}
try {
const data = await prisma.kegiatanDesa.findUnique({
where: { id },
include: {
kategoriKegiatan: true,
image: true,
},
});
if (!data) {
return { success: false, message: "Data tidak ditemukan" };
}
return {
success: true,
message: "Berhasil ambil kegiatan desa",
data,
};
} catch (e) {
console.error("Error di kegiatanDesaFindUnique:", e);
return { success: false, message: "Gagal mengambil data kegiatan desa" };
}
}
export default kegiatanDesaFindUnique;

View File

@@ -1,11 +1,13 @@
import Elysia, { t } from "elysia";
import kegiatanDesaFindMany from "./find-many";
import kegiatanDesaFindUnique from "./findUnique";
import kegiatanDesaCreate from "./create";
import kegiatanDesaDelete from "./del";
import kegiatanDesaUpdate from "./updt";
const KegiatanDesa = new Elysia({ prefix: "/kegiatandesa", tags: ["Desa/Kegiatan Desa"] })
.get("/find-many", kegiatanDesaFindMany)
.get("/:id", kegiatanDesaFindUnique)
.post("/create", kegiatanDesaCreate, {
body: t.Object({
judul: t.String(),