API & UI Tabs SubMenu Pendapatan, Menu PADesa
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
import prisma from "@/lib/prisma";
|
||||
import { Context } from "elysia";
|
||||
|
||||
async function beritaFindManyPaginated(context: Context) {
|
||||
async function beritaFindMany(context: Context) {
|
||||
const page = Number(context.query.page) || 1;
|
||||
const limit = Number(context.query.limit) || 10;
|
||||
const skip = (page - 1) * limit;
|
||||
@@ -41,4 +41,4 @@ async function beritaFindManyPaginated(context: Context) {
|
||||
}
|
||||
}
|
||||
|
||||
export default beritaFindManyPaginated;
|
||||
export default beritaFindMany;
|
||||
|
||||
@@ -10,6 +10,7 @@ import JumlahPendudukMiskin from "./jumlah-penduduk-miskin";
|
||||
import SektorUnggulanDesa from "./sektor-unggulan-desa";
|
||||
import DemografiPekerjaan from "./demografi-pekerjaan";
|
||||
import JumlahPengangguran from "./jumlah-pengangguran";
|
||||
import PendapatanAsliDesa from "./pendapatan-asli-desa";
|
||||
|
||||
const Ekonomi = new Elysia({
|
||||
prefix: "/api/ekonomi",
|
||||
@@ -26,5 +27,6 @@ const Ekonomi = new Elysia({
|
||||
.use(SektorUnggulanDesa)
|
||||
.use(DemografiPekerjaan)
|
||||
.use(JumlahPengangguran)
|
||||
.use(PendapatanAsliDesa)
|
||||
|
||||
export default Ekonomi
|
||||
@@ -0,0 +1,34 @@
|
||||
import prisma from "@/lib/prisma";
|
||||
import { Context } from "elysia";
|
||||
|
||||
type FormCreate = {
|
||||
tahun: number;
|
||||
pendapatanId: string;
|
||||
belanjaId: string;
|
||||
pembiayaanId: string;
|
||||
}
|
||||
|
||||
export default async function apbDesaCreate(context: Context) {
|
||||
const body = context.body as FormCreate;
|
||||
|
||||
const created = await prisma.apbDesa.create({
|
||||
data: {
|
||||
tahun: body.tahun,
|
||||
pendapatanId: body.pendapatanId,
|
||||
belanjaId: body.belanjaId,
|
||||
pembiayaanId: body.pembiayaanId,
|
||||
},
|
||||
select: {
|
||||
id: true,
|
||||
tahun: true,
|
||||
pendapatanId: true,
|
||||
belanjaId: true,
|
||||
pembiayaanId: true,
|
||||
}
|
||||
});
|
||||
return {
|
||||
success: true,
|
||||
message: "Success create apb desa",
|
||||
data: created,
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
import prisma from "@/lib/prisma";
|
||||
import { Context } from "elysia";
|
||||
|
||||
export default async function apbDesaDelete(context: Context) {
|
||||
const { params } = context;
|
||||
const id = params?.id as string;
|
||||
|
||||
if (!id) {
|
||||
throw new Error("ID tidak ditemukan dalam parameter");
|
||||
}
|
||||
|
||||
const deleted = await prisma.apbDesa.delete({
|
||||
where: { id },
|
||||
});
|
||||
|
||||
return {
|
||||
success: true,
|
||||
message: "Berhasil menghapus apb desa",
|
||||
data: deleted,
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
import prisma from "@/lib/prisma";
|
||||
import { Context } from "elysia";
|
||||
|
||||
export default async function apbDesaFindMany(context: Context) {
|
||||
const page = Number(context.query.page) || 1;
|
||||
const limit = Number(context.query.limit) || 10;
|
||||
const skip = (page - 1) * limit;
|
||||
|
||||
try {
|
||||
const [data, total] = await Promise.all([
|
||||
prisma.apbDesa.findMany({
|
||||
where: { isActive: true },
|
||||
include: {
|
||||
pendapatan: true,
|
||||
belanja: true,
|
||||
pembiayaan: true,
|
||||
},
|
||||
skip,
|
||||
take: limit,
|
||||
orderBy: { createdAt: 'desc' },
|
||||
}),
|
||||
prisma.apbDesa.count({
|
||||
where: { isActive: true }
|
||||
})
|
||||
]);
|
||||
|
||||
return {
|
||||
success: true,
|
||||
message: "Success fetch apb desa with pagination",
|
||||
data,
|
||||
page,
|
||||
totalPages: Math.ceil(total / limit),
|
||||
total,
|
||||
};
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
return {
|
||||
success: false,
|
||||
message: "Failed to fetch apb desa with pagination",
|
||||
data: null,
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,56 @@
|
||||
import prisma from "@/lib/prisma";
|
||||
|
||||
export default async function apbDesaFindUnique(
|
||||
request: Request
|
||||
) {
|
||||
// Extract the ID from the URL path
|
||||
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 {
|
||||
// Validate that the ID is a valid UUID or whatever format you're using
|
||||
if (typeof id !== 'string') {
|
||||
return Response.json({
|
||||
success: false,
|
||||
message: "ID tidak valid",
|
||||
}, { status: 400 });
|
||||
}
|
||||
|
||||
const data = await prisma.apbDesa.findUnique({
|
||||
where: { id },
|
||||
});
|
||||
|
||||
if (!data) {
|
||||
return Response.json({
|
||||
success: false,
|
||||
message: "Apb desa tidak ditemukan",
|
||||
}, { status: 404 });
|
||||
}
|
||||
|
||||
// Ensure we're returning a proper Response object
|
||||
return Response.json({
|
||||
success: true,
|
||||
message: "Success fetch apb desa by ID",
|
||||
data,
|
||||
}, {
|
||||
status: 200,
|
||||
});
|
||||
} catch (e) {
|
||||
console.error("Find by ID error:", e);
|
||||
return Response.json({
|
||||
success: false,
|
||||
message: "Gagal mengambil apb desa: " + (e instanceof Error ? e.message : 'Unknown error'),
|
||||
}, {
|
||||
status: 500,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
import Elysia, { t } from "elysia";
|
||||
import apbDesaFindMany from "./findMany";
|
||||
import apbDesaFindUnique from "./findUnique";
|
||||
import apbDesaCreate from "./create";
|
||||
import apbDesaDelete from "./del";
|
||||
import apbDesaUpdate from "./updt";
|
||||
|
||||
const APBDesa = new Elysia({
|
||||
prefix: "/apbdesa",
|
||||
tags: ["Ekonomi/Pendapatan Asli Desa/APB Desa"],
|
||||
})
|
||||
.get("/find-many", apbDesaFindMany)
|
||||
.get("/:id", async (context) => {
|
||||
const response = await apbDesaFindUnique(new Request(context.request));
|
||||
return response;
|
||||
})
|
||||
.post("/create", apbDesaCreate, {
|
||||
body: t.Object({
|
||||
tahun: t.Number(),
|
||||
pendapatanId: t.String(),
|
||||
belanjaId: t.String(),
|
||||
pembiayaanId: t.String(),
|
||||
}),
|
||||
})
|
||||
.delete("/delete/:id", apbDesaDelete)
|
||||
.put(
|
||||
"/:id",
|
||||
async (context) => {
|
||||
const response = await apbDesaUpdate(context);
|
||||
return response;
|
||||
},
|
||||
{
|
||||
body: t.Object({
|
||||
tahun: t.Number(),
|
||||
pendapatanId: t.String(),
|
||||
belanjaId: t.String(),
|
||||
pembiayaanId: t.String(),
|
||||
}),
|
||||
}
|
||||
);
|
||||
export default APBDesa;
|
||||
@@ -0,0 +1,64 @@
|
||||
import prisma from "@/lib/prisma";
|
||||
import { Prisma } from "@prisma/client";
|
||||
import { Context } from "elysia";
|
||||
|
||||
type FormUpdate = Prisma.ApbDesaGetPayload<{
|
||||
select: {
|
||||
id: true;
|
||||
tahun: true;
|
||||
pendapatanId: true;
|
||||
belanjaId: true;
|
||||
pembiayaanId: true;
|
||||
};
|
||||
}>;
|
||||
export default async function apbDesaUpdate(context: Context) {
|
||||
try {
|
||||
const id = context.params?.id as string;
|
||||
const body = (await context.body) as Omit<FormUpdate, "id">;
|
||||
|
||||
const {
|
||||
tahun,
|
||||
pendapatanId,
|
||||
belanjaId,
|
||||
pembiayaanId,
|
||||
} = body;
|
||||
|
||||
if (!id) {
|
||||
return {
|
||||
success: false,
|
||||
message: "ID tidak boleh kosong",
|
||||
};
|
||||
}
|
||||
|
||||
const existing = await prisma.apbDesa.findUnique({
|
||||
where: { id },
|
||||
});
|
||||
|
||||
if (!existing) {
|
||||
return {
|
||||
success: false,
|
||||
message: "APB Desa tidak ditemukan",
|
||||
};
|
||||
}
|
||||
|
||||
const updated = await prisma.apbDesa.update({
|
||||
where: { id },
|
||||
data: {
|
||||
tahun,
|
||||
pendapatanId,
|
||||
belanjaId,
|
||||
pembiayaanId,
|
||||
}
|
||||
});
|
||||
return {
|
||||
success: true,
|
||||
message: "Success update APB Desa",
|
||||
data: updated,
|
||||
};
|
||||
} catch (error) {
|
||||
console.error('Error updating APB Desa:', error);
|
||||
context.set.status = 500;
|
||||
return { error: 'Failed to update APB Desa'};
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
import prisma from "@/lib/prisma";
|
||||
import { Context } from "elysia";
|
||||
|
||||
type FormCreate = {
|
||||
name: string;
|
||||
value: number;
|
||||
}
|
||||
|
||||
export default async function belanjaCreate(context: Context) {
|
||||
const body = context.body as FormCreate;
|
||||
|
||||
const created = await prisma.belanja.create({
|
||||
data: {
|
||||
name: body.name,
|
||||
value: body.value,
|
||||
},
|
||||
select: {
|
||||
id: true,
|
||||
name: true,
|
||||
value: true,
|
||||
}
|
||||
});
|
||||
return {
|
||||
success: true,
|
||||
message: "Success create belanja",
|
||||
data: created,
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
import prisma from "@/lib/prisma";
|
||||
import { Context } from "elysia";
|
||||
|
||||
export default async function belanjaDelete(context: Context) {
|
||||
const { params } = context;
|
||||
const id = params?.id as string;
|
||||
|
||||
if (!id) {
|
||||
throw new Error("ID tidak ditemukan dalam parameter");
|
||||
}
|
||||
|
||||
const deleted = await prisma.belanja.delete({
|
||||
where: { id },
|
||||
});
|
||||
|
||||
return {
|
||||
success: true,
|
||||
message: "Berhasil menghapus belanja",
|
||||
data: deleted,
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
import prisma from "@/lib/prisma";
|
||||
import { Context } from "elysia";
|
||||
|
||||
export default async function belanjaFindMany(context: Context) {
|
||||
const page = Number(context.query.page) || 1;
|
||||
const limit = Number(context.query.limit) || 10;
|
||||
const skip = (page - 1) * limit;
|
||||
|
||||
try {
|
||||
const [data, total] = await Promise.all([
|
||||
prisma.belanja.findMany({
|
||||
where: { isActive: true },
|
||||
skip,
|
||||
take: limit,
|
||||
orderBy: { createdAt: "desc" },
|
||||
}),
|
||||
prisma.belanja.count({
|
||||
where: { isActive: true },
|
||||
}),
|
||||
]);
|
||||
|
||||
return {
|
||||
success: true,
|
||||
message: "Success fetch berita with pagination",
|
||||
data,
|
||||
page,
|
||||
totalPages: Math.ceil(total / limit),
|
||||
total,
|
||||
};
|
||||
} catch (e) {
|
||||
console.error("Find many paginated error:", e);
|
||||
return {
|
||||
success: false,
|
||||
message: "Failed fetch berita with pagination",
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,69 @@
|
||||
import prisma from "@/lib/prisma";
|
||||
|
||||
export default async function belanjaFindUnique(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 {
|
||||
// Validate that the ID is a valid UUID or whatever format you're using
|
||||
if (typeof id !== "string") {
|
||||
return Response.json(
|
||||
{
|
||||
success: false,
|
||||
message: "ID tidak valid",
|
||||
},
|
||||
{ status: 400 }
|
||||
);
|
||||
}
|
||||
|
||||
const data = await prisma.belanja.findUnique({
|
||||
where: { id },
|
||||
});
|
||||
|
||||
if (!data) {
|
||||
return Response.json(
|
||||
{
|
||||
success: false,
|
||||
message: "Belanja tidak ditemukan",
|
||||
},
|
||||
{ status: 404 }
|
||||
);
|
||||
}
|
||||
|
||||
// Ensure we're returning a proper Response object
|
||||
return Response.json(
|
||||
{
|
||||
success: true,
|
||||
message: "Success fetch belanja by ID",
|
||||
data,
|
||||
},
|
||||
{
|
||||
status: 200,
|
||||
}
|
||||
);
|
||||
} catch (e) {
|
||||
console.error("Find by ID error:", e);
|
||||
return Response.json(
|
||||
{
|
||||
success: false,
|
||||
message:
|
||||
"Gagal mengambil belanja: " +
|
||||
(e instanceof Error ? e.message : "Unknown error"),
|
||||
},
|
||||
{
|
||||
status: 500,
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
import Elysia, { t } from "elysia";
|
||||
import belanjaFindMany from "./findMany";
|
||||
import belanjaFindUnique from "./findUnique";
|
||||
import belanjaCreate from "./create";
|
||||
import belanjaDelete from "./del";
|
||||
import belanjaUpdate from "./updt";
|
||||
|
||||
const Belanja = new Elysia({
|
||||
prefix: "/belanja",
|
||||
tags: ["Ekonomi/Pendapatan Asli Desa/Belanja"],
|
||||
})
|
||||
.get("/find-many", belanjaFindMany)
|
||||
.get("/:id", async (context) => {
|
||||
const response = await belanjaFindUnique(new Request(context.request));
|
||||
return response;
|
||||
})
|
||||
.post("/create", belanjaCreate, {
|
||||
body: t.Object({
|
||||
name: t.String(),
|
||||
value: t.Number(),
|
||||
}),
|
||||
})
|
||||
.delete("/delete/:id", belanjaDelete)
|
||||
.put("/:id", async (context) => {
|
||||
const response = await belanjaUpdate(context);
|
||||
return response;
|
||||
}, {
|
||||
body: t.Object({
|
||||
name: t.String(),
|
||||
value: t.Number(),
|
||||
}),
|
||||
});
|
||||
export default Belanja;
|
||||
@@ -0,0 +1,60 @@
|
||||
import prisma from "@/lib/prisma";
|
||||
import { Prisma } from "@prisma/client";
|
||||
import { Context } from "elysia";
|
||||
|
||||
type FormUpdate = Prisma.BelanjaGetPayload<{
|
||||
select: {
|
||||
id: true;
|
||||
name: true;
|
||||
value: true;
|
||||
};
|
||||
}>;
|
||||
|
||||
export default async function belanjaUpdate(context: Context) {
|
||||
try {
|
||||
const id = context.params?.id as string;
|
||||
const body = (await context.body) as Omit<FormUpdate, "id">;
|
||||
|
||||
const {
|
||||
name,
|
||||
value,
|
||||
} = body;
|
||||
|
||||
if (!id) {
|
||||
return {
|
||||
success: false,
|
||||
message: "ID tidak boleh kosong",
|
||||
};
|
||||
}
|
||||
|
||||
const existing = await prisma.belanja.findUnique({
|
||||
where: { id },
|
||||
});
|
||||
|
||||
if (!existing) {
|
||||
return {
|
||||
success: false,
|
||||
message: "Belanja tidak ditemukan",
|
||||
};
|
||||
}
|
||||
|
||||
const updated = await prisma.belanja.update({
|
||||
where: { id },
|
||||
data: {
|
||||
name,
|
||||
value,
|
||||
}
|
||||
});
|
||||
return {
|
||||
success: true,
|
||||
message: "Success update belanja",
|
||||
data: updated,
|
||||
};
|
||||
} catch (error) {
|
||||
console.error("Update error:", error);
|
||||
return {
|
||||
success: false,
|
||||
message: "Failed update belanja",
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
import Elysia from "elysia";
|
||||
import PendapatanAsli from "./pendapatan";
|
||||
import Belanja from "./belanja";
|
||||
import Pembiayaan from "./pembiayaan";
|
||||
import APBDesa from "./apbDesa";
|
||||
|
||||
const PendapatanAsliDesa = new Elysia({
|
||||
prefix: "/pendapatanaslidesa",
|
||||
tags: ["Ekonomi/Pendapatan Asli Desa"],
|
||||
})
|
||||
.use(PendapatanAsli)
|
||||
.use(Belanja)
|
||||
.use(Pembiayaan)
|
||||
.use(APBDesa)
|
||||
export default PendapatanAsliDesa;
|
||||
@@ -0,0 +1,28 @@
|
||||
import prisma from "@/lib/prisma";
|
||||
import { Context } from "elysia";
|
||||
|
||||
type FormCreate = {
|
||||
name: string;
|
||||
value: number;
|
||||
}
|
||||
|
||||
export default async function pembiayaanCreate(context: Context) {
|
||||
const body = context.body as FormCreate;
|
||||
|
||||
const created = await prisma.pembiayaan.create({
|
||||
data: {
|
||||
name: body.name,
|
||||
value: body.value,
|
||||
},
|
||||
select: {
|
||||
id: true,
|
||||
name: true,
|
||||
value: true,
|
||||
}
|
||||
});
|
||||
return {
|
||||
success: true,
|
||||
message: "Success create pembiayaan",
|
||||
data: created,
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
import prisma from "@/lib/prisma";
|
||||
import { Context } from "elysia";
|
||||
|
||||
export default async function pembiayaanDelete(context: Context) {
|
||||
const { params } = context;
|
||||
const id = params?.id as string;
|
||||
|
||||
if (!id) {
|
||||
throw new Error("ID tidak ditemukan dalam parameter");
|
||||
}
|
||||
|
||||
const deleted = await prisma.pembiayaan.delete({
|
||||
where: { id },
|
||||
});
|
||||
|
||||
return {
|
||||
success: true,
|
||||
message: "Berhasil menghapus pembiayaan",
|
||||
data: deleted,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
import prisma from "@/lib/prisma";
|
||||
import { Context } from "elysia";
|
||||
|
||||
export default async function pembiayaanFindMany(context: Context) {
|
||||
const page = Number(context.query.page) || 1;
|
||||
const limit = Number(context.query.limit) || 10;
|
||||
const skip = (page - 1) * limit;
|
||||
|
||||
try {
|
||||
const [data, total] = await Promise.all([
|
||||
prisma.pembiayaan.findMany({
|
||||
where: { isActive: true },
|
||||
skip,
|
||||
take: limit,
|
||||
orderBy: { createdAt: 'desc' },
|
||||
}),
|
||||
prisma.pembiayaan.count({
|
||||
where: { isActive: true }
|
||||
})
|
||||
]);
|
||||
|
||||
return {
|
||||
success: true,
|
||||
message: "Success fetch pembiayaan with pagination",
|
||||
data,
|
||||
page,
|
||||
totalPages: Math.ceil(total / limit),
|
||||
total,
|
||||
};
|
||||
} catch (e) {
|
||||
console.error("Find many paginated error:", e);
|
||||
return {
|
||||
success: false,
|
||||
message: "Failed fetch pembiayaan with pagination",
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,67 @@
|
||||
import prisma from "@/lib/prisma";
|
||||
|
||||
export default async function pembiayaanFindUnique(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.pembiayaan.findUnique({
|
||||
where: { id },
|
||||
});
|
||||
|
||||
if (!data) {
|
||||
return Response.json(
|
||||
{
|
||||
success: false,
|
||||
message: "Pembiayaan tidak ditemukan",
|
||||
},
|
||||
{ status: 404 }
|
||||
);
|
||||
}
|
||||
|
||||
return Response.json(
|
||||
{
|
||||
success: true,
|
||||
message: "Success fetch pembiayaan by ID",
|
||||
data,
|
||||
},
|
||||
{
|
||||
status: 200,
|
||||
}
|
||||
);
|
||||
} catch (error) {
|
||||
console.error("Find by ID error:", error);
|
||||
return Response.json(
|
||||
{
|
||||
success: false,
|
||||
message:
|
||||
"Gagal mengambil pembiayaan: " +
|
||||
(error instanceof Error ? error.message : "Unknown error"),
|
||||
},
|
||||
{
|
||||
status: 500,
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
import Elysia, { t } from "elysia";
|
||||
import pembiayaanFindMany from "./findMany";
|
||||
import pembiayaanFindUnique from "./findUnique";
|
||||
import pembiayaanCreate from "./create";
|
||||
import pembiayaanDelete from "./del";
|
||||
import pembiayaanUpdate from "./updt";
|
||||
|
||||
const Pembiayaan = new Elysia({
|
||||
prefix: "/pembiayaan",
|
||||
tags: ["Ekonomi/Pendapatan Asli Desa/Pembiayaan"],
|
||||
})
|
||||
.get("/find-many", pembiayaanFindMany)
|
||||
.get("/:id", async (context) => {
|
||||
const response = await pembiayaanFindUnique(new Request(context.request));
|
||||
return response;
|
||||
})
|
||||
.post("/create", pembiayaanCreate, {
|
||||
body: t.Object({
|
||||
name: t.String(),
|
||||
value: t.Number(),
|
||||
}),
|
||||
})
|
||||
.delete("/delete/:id", pembiayaanDelete)
|
||||
.put(
|
||||
"/:id",
|
||||
async (context) => {
|
||||
const response = await pembiayaanUpdate(context);
|
||||
return response;
|
||||
},
|
||||
{
|
||||
body: t.Object({
|
||||
name: t.String(),
|
||||
value: t.Number(),
|
||||
}),
|
||||
}
|
||||
);
|
||||
export default Pembiayaan;
|
||||
@@ -0,0 +1,60 @@
|
||||
import prisma from "@/lib/prisma";
|
||||
import { Prisma } from "@prisma/client";
|
||||
import { Context } from "elysia";
|
||||
|
||||
type FormUpdate = Prisma.PembiayaanGetPayload<{
|
||||
select: {
|
||||
id: true;
|
||||
name: true;
|
||||
value: true;
|
||||
};
|
||||
}>;
|
||||
|
||||
export default async function pembiayaanUpdate(context: Context) {
|
||||
try {
|
||||
const id = context.params?.id as string;
|
||||
const body = (await context.body) as Omit<FormUpdate, "id">;
|
||||
|
||||
const {
|
||||
name,
|
||||
value,
|
||||
} = body;
|
||||
|
||||
if (!id) {
|
||||
return {
|
||||
success: false,
|
||||
message: "ID tidak boleh kosong",
|
||||
};
|
||||
}
|
||||
|
||||
const existing = await prisma.pembiayaan.findUnique({
|
||||
where: { id },
|
||||
});
|
||||
|
||||
if (!existing) {
|
||||
return {
|
||||
success: false,
|
||||
message: "Pembiayaan tidak ditemukan",
|
||||
};
|
||||
}
|
||||
|
||||
const updated = await prisma.pembiayaan.update({
|
||||
where: { id },
|
||||
data: {
|
||||
name,
|
||||
value,
|
||||
}
|
||||
});
|
||||
return {
|
||||
success: true,
|
||||
message: "Success update pembiayaan",
|
||||
data: updated,
|
||||
};
|
||||
} catch (error) {
|
||||
console.error("Update error:", error);
|
||||
return {
|
||||
success: false,
|
||||
message: "Failed update pembiayaan",
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
import prisma from "@/lib/prisma";
|
||||
import { Context } from "elysia";
|
||||
|
||||
type FormCreate = {
|
||||
name: string;
|
||||
value: number;
|
||||
|
||||
}
|
||||
|
||||
export default async function pendapatanAsliCreate(context: Context) {
|
||||
const body = context.body as FormCreate;
|
||||
|
||||
const created = await prisma.pendapatan.create({
|
||||
data: {
|
||||
name: body.name,
|
||||
value: body.value,
|
||||
},
|
||||
select: {
|
||||
id: true,
|
||||
name: true,
|
||||
value: true,
|
||||
}
|
||||
});
|
||||
return {
|
||||
success: true,
|
||||
message: "Success create pendapatan asli desa",
|
||||
data: created,
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
import prisma from "@/lib/prisma";
|
||||
import { Context } from "elysia";
|
||||
|
||||
export default async function pendapatanAsliDelete(context: Context) {
|
||||
const { params } = context;
|
||||
const id = params?.id as string;
|
||||
|
||||
if (!id) {
|
||||
throw new Error("ID tidak ditemukan dalam parameter");
|
||||
}
|
||||
|
||||
const deleted = await prisma.pendapatan.delete({
|
||||
where: { id },
|
||||
});
|
||||
|
||||
return {
|
||||
success: true,
|
||||
message: "Berhasil menghapus pendapatan asli desa",
|
||||
data: deleted,
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
|
||||
import prisma from "@/lib/prisma";
|
||||
import { Context } from "elysia";
|
||||
|
||||
async function pendapatanAsliFindMany(context: Context) {
|
||||
const page = Number(context.query.page) || 1;
|
||||
const limit = Number(context.query.limit) || 10;
|
||||
const skip = (page - 1) * limit;
|
||||
|
||||
try {
|
||||
const [data, total] = await Promise.all([
|
||||
prisma.pendapatan.findMany({
|
||||
where: { isActive: true },
|
||||
skip,
|
||||
take: limit,
|
||||
orderBy: { createdAt: 'desc' },
|
||||
}),
|
||||
prisma.pendapatan.count({
|
||||
where: { isActive: true }
|
||||
})
|
||||
]);
|
||||
|
||||
return {
|
||||
success: true,
|
||||
message: "Success fetch berita with pagination",
|
||||
data,
|
||||
page,
|
||||
totalPages: Math.ceil(total / limit),
|
||||
total,
|
||||
};
|
||||
} catch (e) {
|
||||
console.error("Find many paginated error:", e);
|
||||
return {
|
||||
success: false,
|
||||
message: "Failed fetch berita with pagination",
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
export default pendapatanAsliFindMany;
|
||||
@@ -0,0 +1,56 @@
|
||||
import prisma from "@/lib/prisma";
|
||||
|
||||
export default async function pendapatanAsliFindUnique(
|
||||
request: Request
|
||||
) {
|
||||
// Extract the ID from the URL path
|
||||
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 {
|
||||
// Validate that the ID is a valid UUID or whatever format you're using
|
||||
if (typeof id !== 'string') {
|
||||
return Response.json({
|
||||
success: false,
|
||||
message: "ID tidak valid",
|
||||
}, { status: 400 });
|
||||
}
|
||||
|
||||
const data = await prisma.pendapatan.findUnique({
|
||||
where: { id },
|
||||
});
|
||||
|
||||
if (!data) {
|
||||
return Response.json({
|
||||
success: false,
|
||||
message: "Pendapatan tidak ditemukan",
|
||||
}, { status: 404 });
|
||||
}
|
||||
|
||||
// Ensure we're returning a proper Response object
|
||||
return Response.json({
|
||||
success: true,
|
||||
message: "Success fetch pendapatan asli desa by ID",
|
||||
data,
|
||||
}, {
|
||||
status: 200,
|
||||
});
|
||||
} catch (e) {
|
||||
console.error("Find by ID error:", e);
|
||||
return Response.json({
|
||||
success: false,
|
||||
message: "Gagal mengambil pendapatan asli desa: " + (e instanceof Error ? e.message : 'Unknown error'),
|
||||
}, {
|
||||
status: 500,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
import Elysia, { t } from "elysia";
|
||||
import pendapatanAsliFindMany from "./findMany";
|
||||
import pendapatanAsliFindUnique from "./findUnique";
|
||||
import pendapatanAsliCreate from "./create";
|
||||
import pendapatanAsliDelete from "./del";
|
||||
import pendapatanAsliUpdate from "./updt";
|
||||
|
||||
|
||||
const PendapatanAsli = new Elysia({
|
||||
prefix: "/pendapatanasli",
|
||||
tags: ["Ekonomi/Pendapatan Asli Desa/Pendapatan"],
|
||||
})
|
||||
.get("/find-many", pendapatanAsliFindMany)
|
||||
.get("/:id", async (context) => {
|
||||
const response = await pendapatanAsliFindUnique(
|
||||
new Request(context.request)
|
||||
);
|
||||
return response;
|
||||
})
|
||||
.post("/create", pendapatanAsliCreate, {
|
||||
body: t.Object({
|
||||
name: t.String(),
|
||||
value: t.Number(),
|
||||
}),
|
||||
})
|
||||
.delete("/del/:id", pendapatanAsliDelete)
|
||||
.put(
|
||||
"/:id",
|
||||
async (context) => {
|
||||
return await pendapatanAsliUpdate(context);
|
||||
},
|
||||
{
|
||||
params: t.Object({
|
||||
id: t.String(),
|
||||
}),
|
||||
body: t.Object({
|
||||
name: t.String(),
|
||||
value: t.Number(),
|
||||
}),
|
||||
}
|
||||
)
|
||||
|
||||
export default PendapatanAsli;
|
||||
@@ -0,0 +1,36 @@
|
||||
import prisma from "@/lib/prisma";
|
||||
import { Context } from "elysia";
|
||||
|
||||
export default async function pendapatanAsliUpdate(context: Context) {
|
||||
const id = context.params?.id as string;
|
||||
const body = context.body as { name: string; value: number };
|
||||
|
||||
if (!id) {
|
||||
return { success: false, message: "ID tidak boleh kosong" };
|
||||
}
|
||||
|
||||
try {
|
||||
const existing = await prisma.pendapatan.findUnique({ where: { id } });
|
||||
if (!existing) {
|
||||
return { success: false, message: "Data tidak ditemukan" };
|
||||
}
|
||||
|
||||
const updated = await prisma.pendapatan.update({
|
||||
where: { id },
|
||||
data: {
|
||||
name: body.name,
|
||||
value: body.value,
|
||||
},
|
||||
});
|
||||
|
||||
return {
|
||||
success: true,
|
||||
message: "Berhasil update pendapatan",
|
||||
data: updated,
|
||||
};
|
||||
} catch (error) {
|
||||
console.error("Update error:", error);
|
||||
return { success: false, message: "Gagal update pendapatan" };
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user