API & UI Menu Ekonomi, Submenu Jumlah Pengangguran

This commit is contained in:
2025-07-10 00:21:33 +08:00
parent d328f64d86
commit 7b2b306849
55 changed files with 205 additions and 1316 deletions

View File

@@ -1,10 +1,10 @@
import Elysia, { t } from "elysia";
import detailDataPengangguranFindMany from "./findMany";
import detailDataPengangguranCreate from "./create";
import detailDataPengangguranUpdate from "./updt";
import detailDataPengangguranFindUnique from "./findUnique";
import detailDataPengangguranDelete from "./del";
import findByMonthYear from "./findByMonthYear";
import detailDataPengangguranFindMany from "./findMany";
import detailDataPengangguranFindUnique from "./findUnique";
import detailDataPengangguranUpdate from "./updt";
const DetailDataPengangguran = new Elysia({
prefix: "/detaildatapengangguran",
@@ -50,6 +50,6 @@ const DetailDataPengangguran = new Elysia({
month: t.String(),
year: t.String(),
}),
});
})
export default DetailDataPengangguran;

View File

@@ -1,13 +1,10 @@
import Elysia from "elysia";
import DetailDataPengangguran from "./detail-data-pengangguran";
import RingkasanDataPengangguran from "./ringkasan-data-pengangguran";
import SedangMencariKerja from "./sedang-mencari-kerja";
const JumlahPengangguran = new Elysia({
prefix: "/jumlahpengangguran",
})
.use(DetailDataPengangguran)
.use(RingkasanDataPengangguran)
.use(SedangMencariKerja)
export default JumlahPengangguran;

View File

@@ -1,61 +0,0 @@
import prisma from "@/lib/prisma";
import { Prisma } from "@prisma/client";
import { Context } from "elysia";
type FormCreate = Prisma.RingkasanDataPengangguranGetPayload<{
select: {
year: true;
totalUnemployment: true;
educatedUnemployment: true;
percentageEducatedOfTotal: true;
productiveAgePopulation: true;
percentageProductiveOfTotal: true;
percentageChangeFromPreviousYear: true;
};
}>;
export default async function ringkasanDataPengangguranCreate(context: Context) {
const body = context.body as FormCreate;
const existing = await prisma.ringkasanDataPengangguran.findFirst({
where: {
year: body.year,
},
});
if (existing) {
return {
success: false,
message: `Data tahun ${body.year} sudah ada.`,
data: null,
};
}
const created = await prisma.ringkasanDataPengangguran.create({
data: {
year: body.year,
totalUnemployment: body.totalUnemployment,
educatedUnemployment: body.educatedUnemployment,
percentageEducatedOfTotal: body.percentageEducatedOfTotal,
productiveAgePopulation: body.productiveAgePopulation,
percentageProductiveOfTotal: body.percentageProductiveOfTotal,
percentageChangeFromPreviousYear: body.percentageChangeFromPreviousYear,
},
select: {
id: true,
year: true,
totalUnemployment: true,
educatedUnemployment: true,
percentageEducatedOfTotal: true,
productiveAgePopulation: true,
percentageProductiveOfTotal: true,
percentageChangeFromPreviousYear: true,
},
});
return {
success: true,
message: "Berhasil menambahkan data ringkasan pengangguran",
data: created,
};
}

View File

@@ -1,38 +0,0 @@
import prisma from "@/lib/prisma";
import { Context } from "elysia";
export default async function ringkasanDataPengangguranDelete(context: Context) {
const id = context.params?.id;
if (!id) {
return {
success: false,
message: "ID tidak ditemukan",
}
}
const existing = await prisma.ringkasanDataPengangguran.findUnique({
where: {
id: id,
},
})
if (!existing) {
return {
success: false,
message: "Data tidak ditemukan",
}
}
const deleted = await prisma.ringkasanDataPengangguran.delete({
where: {
id: id,
},
})
return {
success: true,
message: "Berhasil menghapus data ringkasan pengangguran",
data: deleted,
}
}

View File

@@ -1,10 +0,0 @@
import prisma from "@/lib/prisma";
export default async function ringkasanDataPengangguranFindMany() {
const res = await prisma.ringkasanDataPengangguran.findMany({
orderBy: [{ year: "desc" }],
});
return {
data: res,
};
}

View File

@@ -1,45 +0,0 @@
import prisma from "@/lib/prisma";
export default async function ringkasanDataPengangguranFindUnique(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.ringkasanDataPengangguran.findUnique({
where: { id },
});
if (!data) {
return Response.json({
success: false,
message: "Data tidak ditemukan",
}, { status: 404 });
}
return Response.json({
success: true,
data: data,
}, { status: 200 });
} catch (error) {
console.error("Error fetching data:", error);
return Response.json({
success: false,
message: "Terjadi kesalahan saat mengambil data",
}, { status: 500 });
}
}

View File

@@ -1,50 +0,0 @@
import Elysia, { t } from "elysia";
import ringkasanDataPengangguranFindUnique from "./findUnique";
import ringkasanDataPengangguranFindMany from "./findMany";
import ringkasanDataPengangguranCreate from "./create";
import ringkasanDataPengangguranUpdate from "./updt";
import ringkasanDataPengangguranDelete from "./del";
const RingkasanDataPengangguran = new Elysia({
prefix: "/ringkasandatapengangguran",
tags: ["Ekonomi/Jumlah Pengangguran/Ringkasan Data Pengangguran"],
})
.get("/:id", async (context) => {
const response = await ringkasanDataPengangguranFindUnique(
new Request(context.request)
);
return response;
})
.get("/find-many", ringkasanDataPengangguranFindMany)
.post("/create", ringkasanDataPengangguranCreate, {
body: t.Object({
year: t.Number(),
totalUnemployment: t.Number(),
educatedUnemployment: t.Number(),
percentageEducatedOfTotal: t.Number(),
productiveAgePopulation: t.Number(),
percentageProductiveOfTotal: t.Number(),
percentageChangeFromPreviousYear: t.Number(),
}),
})
.put("/:id", ringkasanDataPengangguranUpdate, {
params: t.Object({
id: t.String(),
}),
body: t.Object({
year: t.Number(),
totalUnemployment: t.Number(),
educatedUnemployment: t.Number(),
percentageEducatedOfTotal: t.Number(),
productiveAgePopulation: t.Number(),
percentageProductiveOfTotal: t.Number(),
percentageChangeFromPreviousYear: t.Number(),
}),
})
.delete("/del/:id", ringkasanDataPengangguranDelete, {
params: t.Object({
id: t.String(),
}),
});
export default RingkasanDataPengangguran;

View File

@@ -1,70 +0,0 @@
import prisma from "@/lib/prisma";
import { Context } from "elysia";
export default async function ringkasanDataPengangguranUpdate(context: Context) {
const id = context.params?.id;
if (!id) {
return {
success: false,
message: "ID tidak ditemukan",
}
}
const { year, totalUnemployment, educatedUnemployment, percentageEducatedOfTotal, productiveAgePopulation, percentageProductiveOfTotal, percentageChangeFromPreviousYear } = context.body as {
year: number;
totalUnemployment: number;
educatedUnemployment: number;
percentageEducatedOfTotal: number;
productiveAgePopulation: number;
percentageProductiveOfTotal: number;
percentageChangeFromPreviousYear: number;
}
const duplicate = await prisma.ringkasanDataPengangguran.findFirst({
where: {
year,
NOT: { id },
},
});
if (duplicate) {
return {
success: false,
message: `Data tahun ${year} sudah ada.`,
};
}
const existing = await prisma.ringkasanDataPengangguran.findUnique({
where: {
id: id,
},
})
if (!existing) {
return {
success: false,
message: "Data tidak ditemukan",
}
}
const updated = await prisma.ringkasanDataPengangguran.update({
where: { id },
data: {
year,
totalUnemployment,
educatedUnemployment,
percentageEducatedOfTotal,
productiveAgePopulation,
percentageProductiveOfTotal,
percentageChangeFromPreviousYear,
},
})
return {
success: true,
message: "Data berhasil diupdate",
data: updated,
}
}

View File

@@ -1,49 +0,0 @@
import prisma from "@/lib/prisma";
import { Prisma } from "@prisma/client";
import { Context } from "elysia";
type FormCreate = Prisma.SedangMencariKerjaGetPayload<{
select: {
count: true;
percentageOfTotal: true;
recordedDate: true;
};
}>;
export default async function sedangMencariKerjaCreate(context: Context) {
const body = context.body as FormCreate;
const existing = await prisma.sedangMencariKerja.findFirst({
where: {
recordedDate: body.recordedDate,
},
});
if (existing) {
return {
success: false,
message: "Data sudah ada",
data: null,
};
}
const created = await prisma.sedangMencariKerja.create({
data: {
count: body.count,
percentageOfTotal: body.percentageOfTotal,
recordedDate: body.recordedDate,
},
select: {
id: true,
count: true,
percentageOfTotal: true,
recordedDate: true,
},
});
return {
success: true,
message: "Berhasil menambahkan data sedang mencari kerja",
data: created,
};
}

View File

@@ -1,38 +0,0 @@
import prisma from "@/lib/prisma";
import { Context } from "elysia";
export default async function sedangMencariKerjaDelete(context: Context) {
const id = context.params?.id;
if (!id) {
return {
success: false,
message: "ID tidak ditemukan",
}
}
const existing = await prisma.sedangMencariKerja.findUnique({
where: {
id: id,
},
})
if (!existing) {
return {
success: false,
message: "Data tidak ditemukan",
}
}
const deleted = await prisma.sedangMencariKerja.delete({
where: {
id: id,
},
})
return {
success: true,
message: "Berhasil menghapus data sedang mencari kerja",
data: deleted,
}
}

View File

@@ -1,10 +0,0 @@
import prisma from "@/lib/prisma";
export default async function sedangMencariKerjaFindMany() {
const res = await prisma.sedangMencariKerja.findMany({
orderBy: [{ recordedDate: "desc" }],
});
return {
data: res,
};
}

View File

@@ -1,46 +0,0 @@
import prisma from "@/lib/prisma";
export default async function sedangMencariKerjaFindUnique(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.sedangMencariKerja.findUnique({
where: { id },
});
if (!data) {
return Response.json({
success: false,
message: "Data tidak ditemukan",
}, { status: 404 });
}
return Response.json({
success: true,
message: "Data ditemukan",
data,
}, { status: 200 });
} catch (error) {
console.error("Error fetching data:", error);
return Response.json({
success: false,
message: "Terjadi kesalahan saat mengambil data",
}, { status: 500 });
}
}

View File

@@ -1,42 +0,0 @@
import Elysia, { t } from "elysia";
import sedangMencariKerjaFindUnique from "./findUnique";
import sedangMencariKerjaFindMany from "./findMany";
import sedangMencariKerjaCreate from "./create";
import sedangMencariKerjaUpdate from "./updt";
import sedangMencariKerjaDelete from "./del";
const SedangMencariKerja = new Elysia({
prefix: "/sedangmencarikerja",
tags: ["Ekonomi/Jumlah Pengangguran/Sedang Mencari Kerja"],
})
.get("/:id", async (context) => {
const response = await sedangMencariKerjaFindUnique(
new Request(context.request)
);
return response;
})
.get("/find-many", sedangMencariKerjaFindMany)
.post("/create", sedangMencariKerjaCreate, {
body: t.Object({
count: t.Number(),
percentageOfTotal: t.Number(),
recordedDate: t.String(),
}),
})
.put("/:id", sedangMencariKerjaUpdate, {
params: t.Object({
id: t.String(),
}),
body: t.Object({
count: t.Number(),
percentageOfTotal: t.Number(),
recordedDate: t.String(),
}),
})
.delete("/del/:id", sedangMencariKerjaDelete, {
params: t.Object({
id: t.String(),
}),
});
export default SedangMencariKerja;

View File

@@ -1,49 +0,0 @@
import prisma from "@/lib/prisma";
import { Context } from "elysia";
export default async function sedangMencariKerjaUpdate(context: Context) {
const id = context.params?.id;
if (!id) {
return {
success: false,
message: "ID tidak ditemukan",
}
}
const { count, percentageOfTotal, recordedDate } = context.body as {
count: number;
percentageOfTotal: number;
recordedDate: string;
}
const existing = await prisma.sedangMencariKerja.findUnique({
where: {
id: id,
},
})
if (!existing) {
return {
success: false,
message: "Data tidak ditemukan",
}
}
const updated = await prisma.sedangMencariKerja.update({
where: {
id: id,
},
data: {
count: count,
percentageOfTotal: percentageOfTotal,
recordedDate: recordedDate,
},
})
return {
success: true,
message: "Berhasil mengupdate data sedang mencari kerja",
data: updated,
}
}