Api Admin Menu Desa Sub Menu Layanan Tabs 3 Pelayanan Done

This commit is contained in:
2025-06-16 15:01:15 +08:00
parent e03b071b00
commit 7bf5ee69d5
28 changed files with 1652 additions and 152 deletions

View File

@@ -1,7 +1,13 @@
import Elysia from "elysia";
import PelayananSuratKeterangan from "./pelayanan_surat_keterangan";
import PelayananTelunjukSaktiDesa from "./pelayanan_telunjuk_sakti_desa";
import PelayananPerizinanBerusaha from "./pelayanan_perizinan_berusaha";
import PelayananPendudukNonPermanen from "./pelayanan_penduduk_non_permanen";
const LayananDesa = new Elysia({ prefix: "/layanan", tags: ["Desa/Layanan"] })
.use(PelayananSuratKeterangan)
.use(PelayananTelunjukSaktiDesa)
.use(PelayananPerizinanBerusaha)
.use(PelayananPendudukNonPermanen)
export default LayananDesa

View File

@@ -0,0 +1,60 @@
import prisma from "@/lib/prisma";
export default async function pelayananPendudukNonPermanenFindUnique(request: Request) {
const url = new URL(request.url);
const pathSegments = url.pathname.split("/");
const id = pathSegments[pathSegments.length - 1];
if (!id) {
return Response.json(
{
success: false,
message: "ID tidak boleh kosong",
},
{ status: 400 }
);
}
try {
if (typeof id !== "string") {
return Response.json(
{
success: false,
message: "ID tidak valid",
},
{ status: 400 }
);
}
const data = await prisma.pelayananPendudukNonPermanen.findUnique({
where: { id },
});
if (!data) {
return Response.json(
{
success: false,
message: "Pelayanan penduduk non permanen tidak ditemukan",
},
{ status: 404 }
);
}
return Response.json(
{
success: true,
message: "Success fetch pelayanan penduduk non permanen by ID",
data,
},
{ status: 200 }
);
} catch (e) {
console.error("Find by ID error:", e);
return Response.json(
{
success: false,
message: "Gagal mengambil pelayanan penduduk non permanen: " + (e instanceof Error ? e.message : 'Unknown error'),
},
{ status: 500 }
);
}
}

View File

@@ -0,0 +1,20 @@
import Elysia, { t } from "elysia";
import pelayananPendudukNonPermanenFindUnique from "./findUnique";
import pelayananPendudukNonPermanenUpdate from "./updt";
const PelayananPendudukNonPermanen = new Elysia({ prefix: "/pelayananpenduduknonpermanen", tags: ["Desa/Layanan/Pelayanan Penduduk Non Permanen"] })
.get("/:id", async (context) => {
const response = await pelayananPendudukNonPermanenFindUnique(new Request(context.request));
return response;
})
.put("/:id", async (context) => {
const response = await pelayananPendudukNonPermanenUpdate(context);
return response;
},
{
body: t.Object({
name: t.String(),
deskripsi: t.String(),
}),
})
export default PelayananPendudukNonPermanen;

View File

@@ -0,0 +1,72 @@
import prisma from "@/lib/prisma";
import { Prisma } from "@prisma/client";
import { Context } from "elysia";
type FormUpdate = Prisma.PelayananPendudukNonPermanenGetPayload<{
select: {
name: true;
deskripsi: true;
};
}>;
export default async function pelayananPendudukNonPermanenUpdate(context: Context) {
try {
const id = context.params?.id;
const body = (await context.body) as Omit<FormUpdate, "id">;
const { name, deskripsi } = body;
if (!id) {
return new Response(JSON.stringify({
success: false,
message: "ID tidak diberikan",
}), {
status: 400,
headers: {
"Content-Type": "application/json",
},
});
}
const existing = await prisma.pelayananPendudukNonPermanen.findUnique({
where: { id },
});
if (!existing) {
return new Response(JSON.stringify({
success: false,
message: "Pelayanan penduduk non permanen tidak ditemukan",
}), {
status: 404,
headers: {
"Content-Type": "application/json",
},
});
}
const updated = await prisma.pelayananPendudukNonPermanen.update({
where: { id },
data: { name, deskripsi },
});
return new Response(JSON.stringify({
success: true,
message: "Success update pelayanan penduduk non permanen",
data: updated,
}), {
status: 200,
headers: {
"Content-Type": "application/json",
},
});
} catch (e) {
console.error("Update error:", e);
return new Response(JSON.stringify({
success: false,
message: "Gagal mengupdate pelayanan penduduk non permanen: " + (e instanceof Error ? e.message : 'Unknown error'),
}), {
status: 500,
headers: {
"Content-Type": "application/json",
},
});
}
}

View File

@@ -0,0 +1,64 @@
import prisma from "@/lib/prisma";
export default async function pelayananPerizinanBerusahaFindUnique(
request: Request
) {
const url = new URL(request.url);
const pathSegments = url.pathname.split("/");
const id = pathSegments[pathSegments.length - 1];
if (!id) {
return Response.json(
{
success: false,
message: "ID tidak boleh kosong",
},
{ status: 400 }
);
}
try {
if (typeof id !== "string") {
return Response.json(
{
success: false,
message: "ID tidak valid",
},
{ status: 400 }
);
}
const data = await prisma.pelayananPerizinanBerusaha.findUnique({
where: { id },
});
if (!data) {
return Response.json(
{
success: false,
message: "Pelayanan perizinan berusaha tidak ditemukan",
},
{ status: 404 }
);
}
return Response.json(
{
success: true,
message: "Success fetch pelayanan perizinan berusaha by ID",
data,
},
{ status: 200 }
);
} catch (error) {
console.error("Find by ID error:", error);
return Response.json(
{
success: false,
message:
"Gagal mengambil pelayanan perizinan berusaha: " +
(error instanceof Error ? error.message : "Unknown error"),
},
{ status: 500 }
);
}
}

View File

@@ -0,0 +1,21 @@
import Elysia, { t } from "elysia";
import pelayananPerizinanBerusahaFindUnique from "./findUnique";
import pelayananPerizinanBerusahaUpdate from "./updt";
const PelayananPerizinanBerusaha = new Elysia({ prefix: "/pelayananperizinanberusaha", tags: ["Desa/Layanan/Pelayanan Perizinan Berusaha"] })
.get("/:id", async (context) => {
const response = await pelayananPerizinanBerusahaFindUnique(new Request(context.request));
return response;
})
.put("/:id", async (context) => {
const response = await pelayananPerizinanBerusahaUpdate(context);
return response;
},
{
body: t.Object({
name: t.String(),
deskripsi: t.String(),
link: t.String(),
}),
})
export default PelayananPerizinanBerusaha;

View File

@@ -0,0 +1,77 @@
import prisma from "@/lib/prisma";
import { Prisma } from "@prisma/client";
import { Context } from "elysia";
type FormUpdate = Prisma.PelayananPerizinanBerusahaGetPayload<{
select: {
name: true;
deskripsi: true;
link: true;
};
}>;
export default async function pelayananPerizinanBerusahaUpdate(context: Context) {
try {
const id = context.params?.id;
const body = (await context.body) as Omit<FormUpdate, "id">;
const { name, deskripsi, link } = body;
if (!id) {
return new Response(JSON.stringify({
success: false,
message: "ID tidak diberikan",
}), {
status: 400,
headers: {
"Content-Type": "application/json",
},
});
}
const existing = await prisma.pelayananPerizinanBerusaha.findUnique({
where: { id },
});
if (!existing) {
return new Response(JSON.stringify({
success: false,
message: "Pelayanan perizinan berusaha tidak ditemukan",
}), {
status: 404,
headers: {
"Content-Type": "application/json",
},
});
}
const updated = await prisma.pelayananPerizinanBerusaha.update({
where: { id },
data: {
name,
deskripsi,
link,
},
});
return new Response(JSON.stringify({
success: true,
message: "Success update pelayanan perizinan berusaha",
data: updated,
}), {
status: 200,
headers: {
"Content-Type": "application/json",
},
});
} catch (error) {
console.error("Error updating pelayanan perizinan berusaha:", error);
return new Response(JSON.stringify({
success: false,
message: "Terjadi kesalahan saat mengupdate pelayanan perizinan berusaha",
}), {
status: 500,
headers: {
"Content-Type": "application/json",
},
});
}
}

View File

@@ -0,0 +1,29 @@
import prisma from "@/lib/prisma";
import { Prisma } from "@prisma/client";
import { Context } from "elysia";
type FormCreate = Prisma.PelayananTelunjukSaktiDesaGetPayload<{
select: {
name: true;
deskripsi: true;
link: true;
};
}>;
export default async function pelayananTelunjukSaktiDesaCreate(context: Context) {
const body = context.body as FormCreate;
await prisma.pelayananTelunjukSaktiDesa.create({
data: {
name: body.name,
deskripsi: body.deskripsi,
link: body.link,
},
});
return {
success: true,
message: "Success create pelayanan telunjuk sakti desa",
data: {
...body,
},
};
}

View File

@@ -0,0 +1,33 @@
import prisma from "@/lib/prisma";
import { Context } from "elysia";
export default async function pelayananTelunjukSaktiDesaDelete(context: Context) {
const id = context.params?.id as string;
if (!id) {
return {
status: 400,
body: "ID tidak diberikan",
};
}
const pelayananTelunjukSaktiDesa = await prisma.pelayananTelunjukSaktiDesa.findUnique({
where: { id },
});
if (!pelayananTelunjukSaktiDesa) {
return {
status: 404,
body: "Pelayanan telunjuk sakti desa tidak ditemukan",
};
}
await prisma.pelayananTelunjukSaktiDesa.delete({
where: { id },
});
return {
status: 200,
body: "Pelayanan telunjuk sakti desa berhasil dihapus",
};
}

View File

@@ -0,0 +1,21 @@
import prisma from "@/lib/prisma";
export default async function pelayananTelunjukSaktiDesaFindMany() {
try {
const data = await prisma.pelayananTelunjukSaktiDesa.findMany({
where: { isActive: true },
});
return {
success: true,
message: "Success fetch pelayanan telunjuk sakti desa",
data,
};
} catch (e) {
console.error("Find many error:", e);
return {
success: false,
message: "Failed fetch pelayanan telunjuk sakti desa",
};
}
}

View File

@@ -0,0 +1,46 @@
import prisma from "@/lib/prisma";
export default async function pelayananTelunjukSaktiDesaFindUnique(request: Request){
const url = new URL(request.url);
const pathSegments = url.pathname.split('/');
const id = pathSegments[pathSegments.length - 1];
if(!id){
return Response.json({
success: false,
message: "ID tidak boleh kosong",
}, { status: 400 });
}
try {
if (typeof id !== 'string') {
return Response.json({
success: false,
message: "ID tidak valid",
}, { status: 400 });
}
const data = await prisma.pelayananTelunjukSaktiDesa.findUnique({
where: { id },
});
if (!data) {
return Response.json({
success: false,
message: "Pelayanan telunjuk sakti desa tidak ditemukan",
}, { status: 404 });
}
return Response.json({
success: true,
message: "Success fetch pelayanan telunjuk sakti desa by ID",
data,
}, { status: 200 });
} catch (error) {
console.error("Find by ID error:", error);
return Response.json({
success: false,
message: "Gagal mengambil pelayanan telunjuk sakti desa: " + (error instanceof Error ? error.message : 'Unknown error'),
}, { status: 500 });
}
}

View File

@@ -0,0 +1,33 @@
import Elysia, { t } from "elysia";
import pelayananTelunjukSaktiDesaFindUnique from "./findUnique";
import pelayananTelunjukSaktiDesaUpdate from "./updt";
import pelayananTelunjukSaktiDesaCreate from "./create";
import pelayananTelunjukSaktiDesaDelete from "./del";
import pelayananTelunjukSaktiDesaFindMany from "./find-many";
const pelayananTelunjukSaktiDesa = new Elysia({ prefix: "/pelayanantelunjuksaktidesa", tags: ["Desa/Layanan/Pelayanan Telunjuk Sakti Desa"] })
.get("/find-many", pelayananTelunjukSaktiDesaFindMany)
.get("/:id", async (context) => {
const response = await pelayananTelunjukSaktiDesaFindUnique(new Request(context.request));
return response;
})
.put("/:id", async (context) => {
const response = await pelayananTelunjukSaktiDesaUpdate(context);
return response;
},
{
body: t.Object({
name: t.String(),
deskripsi: t.String(),
link: t.String(),
}),
})
.post("/create", pelayananTelunjukSaktiDesaCreate, {
body: t.Object({
name: t.String(),
deskripsi: t.String(),
link: t.String(),
}),
})
.delete("/:id", pelayananTelunjukSaktiDesaDelete)
export default pelayananTelunjukSaktiDesa;

View File

@@ -0,0 +1,83 @@
import prisma from "@/lib/prisma";
import { Prisma } from "@prisma/client";
import { Context } from "elysia";
type FormUpdate = Prisma.PelayananTelunjukSaktiDesaGetPayload<{
select: {
name: true;
deskripsi: true;
link: true;
};
}>;
export default async function pelayananTelunjukSaktiDesaUpdate(context: Context) {
try {
const id = context.params?.id;
const body = (await context.body) as Omit<FormUpdate, "id">;
const { name, deskripsi, link } = body;
if (!id) {
return new Response(JSON.stringify({
success: false,
message: "ID tidak diberikan",
}), {
status: 400,
headers: {
"Content-Type": "application/json",
},
});
}
const data = await prisma.pelayananTelunjukSaktiDesa.update({
where: { id },
data: {
name,
deskripsi,
link,
},
});
if (!data) {
return new Response(JSON.stringify({
success: false,
message: "Gagal update pelayanan telunjuk sakti desa",
}), {
status: 404,
headers: {
"Content-Type": "application/json",
},
});
}
const updated = await prisma.pelayananTelunjukSaktiDesa.update({
where: { id },
data: {
name,
deskripsi,
link,
},
});
return new Response(JSON.stringify({
success: true,
message: "Success update pelayanan telunjuk sakti desa",
data: updated,
}), {
status: 200,
headers: {
"Content-Type": "application/json",
},
});
} catch (error) {
console.error(error);
return new Response(JSON.stringify({
success: false,
message: "Gagal update pelayanan telunjuk sakti desa",
}), {
status: 500,
headers: {
"Content-Type": "application/json",
},
});
}
}