ProfilePPID bagian Profile, VisiMisiPPD sudah ada seed dan bisa di edit

This commit is contained in:
2025-05-13 11:51:48 +08:00
parent 8a34a122d0
commit e5889ca903
39 changed files with 1048 additions and 418 deletions

View File

@@ -0,0 +1,33 @@
import prisma from "@/lib/prisma";
import { Context } from "elysia";
export default async function dasarHukumPPIDFindById(context: Context) {
try {
const id = context?.params?.slugs?.[0];
// If no ID provided, get the first profile
if (!id) {
const data = await prisma.dasarHukumPPID.findFirst();
return {
success: true,
data,
};
}
const data = await prisma.dasarHukumPPID.findUniqueOrThrow({
where: { id },
});
return {
success: true,
data,
};
} catch (error) {
console.error("Error fetching profilePPID:", error);
return {
success: false,
message: error instanceof Error ? error.message : "Unknown error",
};
}
}

View File

@@ -0,0 +1,18 @@
import Elysia, { t } from "elysia";
import dasarHukumPPIDFindById from "./find-by-id";
import dasarHukumPPIDUpdate from "./update";
const DasarHukumPPID = new Elysia({
prefix: "/dasarhukumppid",
tags: ["PPID/Dasar Hukum PPID"]
})
.get("/find-by-id", dasarHukumPPIDFindById)
.post("/update", dasarHukumPPIDUpdate, {
body: t.Object({
id: t.String(),
judul: t.String(),
content: t.String(),
})
})
export default DasarHukumPPID

View File

@@ -0,0 +1,29 @@
import prisma from "@/lib/prisma";
import { Prisma } from "@prisma/client";
import { Context } from "elysia";
type FormCreate = Prisma.DasarHukumPPIDGetPayload<{
select: {
id: true;
judul: true;
content: true;
}
}>
export default async function dasarHukumPPIDUpdate(context: Context) {
const body = context.body as FormCreate;
await prisma.dasarHukumPPID.update({
where: {
id: body.id
},
data: {
judul: body.judul,
content: body.content,
}
})
return {
success: true,
message: "Dasar Hukum PPID Berhasil Dibuat",
}
}

View File

@@ -7,7 +7,9 @@ import GrafikBerdasarkanUmur from "./ikm/grafik_berdasarkan_umur";
import PermohonanInformasiPublik from "./permohonan_informasi_publik";
import PermohonanKeberatanInformasiPublik from "./permohonan_keberatan_informasi_publik";
import ProfilePPID from "./profile_ppid";
import VisiMisiPPID from "./visi_misi_ppid";
import VisiMisiPPID from "./visi_misi_ppid/visi_misi_ppid";
import DasarHukumPPID from "./dasar_hukum";
@@ -21,6 +23,7 @@ const PPID = new Elysia({ prefix: "/api/ppid", tags: ["PPID"] })
.use(PermohonanInformasiPublik)
.use(PermohonanKeberatanInformasiPublik)
.use(VisiMisiPPID)
.use(DasarHukumPPID)

View File

@@ -0,0 +1,61 @@
import prisma from "@/lib/prisma";
import { Context } from "elysia";
import { writeFile, unlink } from "fs/promises";
import path from "path";
import fs from "fs";
interface ProfilePPIDBody {
id: string;
file: Blob & { name: string; type: string };
}
export default async function editImageProfilePPID(context: Context<{ body: ProfilePPIDBody }>) {
const { id, file } = context.body;
if (!file || !id) {
return {
success: false,
message: "File atau ID harus disertakan",
};
}
// Validasi ekstensi file
const allowedTypes = ["image/jpeg", "image/png", "image/webp"];
if (!allowedTypes.includes(file.type)) {
return {
success: false,
message: "Tipe file tidak diizinkan. Hanya JPG, PNG, atau WEBP",
};
}
const bytes = await file.arrayBuffer();
const buffer = Buffer.from(bytes);
const filename = `${id}_${Date.now()}_${file.name}`;
const filePath = path.resolve("public", "assets", "images", "ppid", "profile-ppid", filename);
// Simpan file baru
await writeFile(filePath, buffer);
const imageUrl = `/assets/images/ppid/profile-ppid/${filename}`;
// Hapus file lama (opsional, kalau mau bersih)
const oldData = await prisma.profilePPID.findUnique({ where: { id } });
if (oldData?.imageUrl) {
const oldPath = path.resolve("public", oldData.imageUrl.replace(/^\//, ""));
if (fs.existsSync(oldPath)) {
await unlink(oldPath).catch(() => {});
}
}
// Update DB
await prisma.profilePPID.update({
where: { id },
data: { imageUrl },
});
return {
success: true,
message: "Gambar berhasil diunggah",
url: imageUrl,
};
}

View File

@@ -0,0 +1,33 @@
import prisma from "@/lib/prisma";
import { Context } from "elysia";
export default async function profilePPIDFindById(context: Context) {
try {
const id = context?.params?.slugs?.[0];
// If no ID provided, get the first profile
if (!id) {
const data = await prisma.profilePPID.findFirst();
return {
success: true,
data,
};
}
const data = await prisma.profilePPID.findUniqueOrThrow({
where: { id },
});
return {
success: true,
data,
};
} catch (error) {
console.error("Error fetching profilePPID:", error);
return {
success: false,
message: error instanceof Error ? error.message : "Unknown error",
};
}
}

View File

@@ -1,9 +0,0 @@
import prisma from "@/lib/prisma";
export default async function profilePPIDFindMany() {
const res = await prisma.profilePPID.findMany();
return{
data: res
}
}

View File

@@ -1,14 +1,16 @@
import Elysia, { t } from "elysia";
import profilePPIDCreate from "./create";
import profilePPIDFindMany from "./find-many";
import profilePPIDFindById from "./find-by-id";
import profilePPIDUpdate from "./update";
import editImageProfilePPID from "./edit-img";
const ProfilePPID = new Elysia({
prefix: "/profileppid",
tags: ["PPID/Profile PPID"]
})
.get("/find-many", profilePPIDFindMany)
.post("/create", profilePPIDCreate, {
.get("/find-by-id", profilePPIDFindById)
.post("/update", profilePPIDUpdate, {
body: t.Object({
id: t.String(),
name: t.String(),
biodata: t.String(),
riwayat: t.String(),
@@ -16,6 +18,7 @@ const ProfilePPID = new Elysia({
unggulan: t.String(),
})
})
.post("/edit-img", editImageProfilePPID)
export default ProfilePPID;

View File

@@ -4,6 +4,7 @@ import { Context } from "elysia";
type FormCreate = Prisma.ProfilePPIDGetPayload<{
select: {
id: true;
name: true;
biodata: true;
riwayat: true;
@@ -11,10 +12,13 @@ type FormCreate = Prisma.ProfilePPIDGetPayload<{
unggulan: true;
}
}>
export default async function profilePPIDCreate(context: Context) {
export default async function profilePPIDUpdate(context: Context) {
const body = context.body as FormCreate;
await prisma.profilePPID.create({
await prisma.profilePPID.update({
where: {
id: body.id
},
data: {
name: body.name,
biodata: body.biodata,

View File

@@ -1,7 +0,0 @@
import Elysia from "elysia";
import MisiPPID from "./misi_ppid";
const VisiMisiPPID = new Elysia({ prefix: "/visimisippid", tags: ["PPID/Visi Misi PPID"] })
.use(MisiPPID)
export default VisiMisiPPID

View File

@@ -1,27 +0,0 @@
import prisma from "@/lib/prisma";
import { Prisma } from "@prisma/client";
import { Context } from "elysia";
type FormCreate = Prisma.MisiPPIDGetPayload<{
select: {
content: true;
}
}>
export default async function misiPPIDCreate(context: Context) {
const body = context.body as FormCreate;
await prisma.misiPPID.create({
data: {
content: body.content,
}
})
return {
success: true,
message: "Misi PPID Berhasil Dibuat",
data: {
...body,
}
}
}

View File

@@ -1,17 +0,0 @@
import prisma from "@/lib/prisma";
import { Context } from "elysia";
export async function misiPPIDDelete(context: Context) {
const id = context.params.id
await prisma.misiPPID.delete({
where: {
id: id
}
})
return {
success: true,
message: "Misi PPID Berhasil Dihapus",
}
}

View File

@@ -1,8 +0,0 @@
import prisma from "@/lib/prisma";
export async function misiPPIDFindMany() {
const res = await prisma.misiPPID.findMany();
return {
data: res,
};
}

View File

@@ -1,24 +0,0 @@
import Elysia, { t } from "elysia";
import { misiPPIDFindMany } from "./find-many";
import misiPPIDCreate from "./create";
import { misiPPIDDelete } from "./delete";
import misiPPIDUpdate from "./update";
const MisiPPID = new Elysia({
prefix: "/misippid",
tags: ["PPID/Visi Misi PPID/ Misi PPID"],
})
.get("/find-many", misiPPIDFindMany)
.post("/create", misiPPIDCreate, {
body: t.Object({
content: t.String(),
})
})
.put("/update/:id", misiPPIDUpdate, {
body: t.Object({
content: t.String(),
})
})
.delete("/delete/:id", misiPPIDDelete)
export default MisiPPID;

View File

@@ -1,29 +0,0 @@
import prisma from "@/lib/prisma";
import { Prisma } from "@prisma/client";
import { Context } from "elysia";
type FormUpdate = Prisma.MisiPPIDGetPayload<{
select: {
content: true;
}
}>
export default async function misiPPIDUpdate(context: Context) {
const id = context.params.id
const body = context.body as FormUpdate;
await prisma.misiPPID.update({
where: { id: id },
data: {
content: body.content,
}
})
return {
success: true,
message: "Misi PPID Berhasil Diupdate",
data: {
...body,
}
}
}

View File

@@ -0,0 +1,33 @@
import prisma from "@/lib/prisma";
import { Context } from "elysia";
export default async function visimisiPPIDFindById(context: Context) {
try {
const id = context?.params?.slugs?.[0];
// If no ID provided, get the first profile
if (!id) {
const data = await prisma.visiMisiPPID.findFirst();
return {
success: true,
data,
};
}
const data = await prisma.visiMisiPPID.findUniqueOrThrow({
where: { id },
});
return {
success: true,
data,
};
} catch (error) {
console.error("Error fetching visiPPID:", error);
return {
success: false,
message: error instanceof Error ? error.message : "Unknown error",
};
}
}

View File

@@ -0,0 +1,20 @@
import Elysia from "elysia";
import visimisiPPIDFindById from "./find-by-id";
import visimisiPPIDUpdate from "./update";
import { t } from "elysia";
const VisiMisiPPID = new Elysia({
prefix: "/visimisippid",
tags: ["PPID/Visi Misi PPID"]
})
.get("/find-by-id", visimisiPPIDFindById)
.post("/update", visimisiPPIDUpdate, {
body: t.Object({
id: t.String(),
misi: t.String(),
visi: t.String(),
})
})
export default VisiMisiPPID

View File

@@ -0,0 +1,32 @@
import prisma from "@/lib/prisma";
import { Prisma } from "@prisma/client";
import { Context } from "elysia";
type FormCreate = Prisma.VisiMisiPPIDGetPayload<{
select: {
id: true;
misi: true;
visi: true;
}
}>
export default async function visimisiPPIDUpdate(context: Context) {
const body = context.body as FormCreate;
await prisma.visiMisiPPID.update({
where: {
id: body.id
},
data: {
misi: body.misi,
visi: body.visi,
}
})
return {
success: true,
message: "Visi PPID Berhasil Diupdate",
data: {
...body,
}
}
}