Sisa 1 Tabs aja yang data kesehatan warga

This commit is contained in:
2025-06-26 17:24:57 +08:00
parent 4f6cc66b7c
commit 924be5b11b
38 changed files with 1577 additions and 1065 deletions

View File

@@ -0,0 +1,61 @@
import prisma from "@/lib/prisma";
import { Context } from "elysia";
type JadwalKegiatanInput = {
content: string;
informasiJadwalKegiatan: { name: string; tanggal: string; waktu: string; lokasi: string };
deskripsiJadwalKegiatan: { deskripsi: string };
layananJadwalKegiatan: { content: string };
syaratKetentuanJadwalKegiatan: { content: string };
dokumenJadwalKegiatan: { content: string };
pendaftaranJadwalKegiatan: { name: string, tanggal: string, namaOrangtua: string, nomor: string, alamat: string, catatan: string };
}
const jadwalKegiatanCreate = async (context: Context) => {
const body = await context.body as JadwalKegiatanInput;
const {
content,
informasiJadwalKegiatan,
deskripsiJadwalKegiatan,
layananJadwalKegiatan,
syaratKetentuanJadwalKegiatan,
dokumenJadwalKegiatan,
pendaftaranJadwalKegiatan,
} = body;
const [createdInformasiJadwalKegiatan, createdDeskripsiJadwalKegiatan, createdLayananJadwalKegiatan, createdSyaratKetentuanJadwalKegiatan, createdDokumenJadwalKegiatan, createdPendaftaranJadwalKegiatan] = await Promise.all([
prisma.informasiJadwalKegiatan.create({ data: informasiJadwalKegiatan }),
prisma.deskripsiJadwalKegiatan.create({ data: deskripsiJadwalKegiatan }),
prisma.layananJadwalKegiatan.create({ data: layananJadwalKegiatan }),
prisma.syaratKetentuanJadwalKegiatan.create({ data: syaratKetentuanJadwalKegiatan }),
prisma.dokumenJadwalKegiatan.create({ data: dokumenJadwalKegiatan }),
prisma.pendaftaranJadwalKegiatan.create({ data: pendaftaranJadwalKegiatan }),
])
const jadwalKegiatan = await prisma.jadwalKegiatan.create({
data: {
content,
informasiJadwalKegiatanId: createdInformasiJadwalKegiatan.id,
deskripsiJadwalKegiatanId: createdDeskripsiJadwalKegiatan.id,
layananJadwalKegiatanId: createdLayananJadwalKegiatan.id,
syaratKetentuanJadwalKegiatanId: createdSyaratKetentuanJadwalKegiatan.id,
dokumenJadwalKegiatanId: createdDokumenJadwalKegiatan.id,
pendaftaranJadwalKegiatanId: createdPendaftaranJadwalKegiatan.id,
},
include: {
informasijadwalkegiatan: true,
deskripsijadwalkegiatan: true,
layananjadwalkegiatan: true,
syaratketentuanjadwalkegiatan: true,
dokumenjadwalkegiatan: true,
pendaftaranjadwalkegiatan: true,
}
})
return {
success: true,
message: "Success create jadwal kegiatan",
data: jadwalKegiatan
}
}
export default jadwalKegiatanCreate;

View File

@@ -0,0 +1,43 @@
import prisma from "@/lib/prisma";
import { Context } from "elysia";
const jadwalKegiatanDelete = async (context: Context) => {
const id = context.params?.id as string;
if (!id) {
return {
status: 400,
message: "ID tidak ditemukan",
}
}
const jadwalKegiatan = await prisma.jadwalKegiatan.findUnique({
where: { id },
include: {
informasijadwalkegiatan: true,
deskripsijadwalkegiatan: true,
layananjadwalkegiatan: true,
syaratketentuanjadwalkegiatan: true,
dokumenjadwalkegiatan: true,
pendaftaranjadwalkegiatan: true,
}
})
if (!jadwalKegiatan) {
return {
status: 404,
message: "Jadwal kegiatan tidak ditemukan",
}
}
await prisma.jadwalKegiatan.delete({
where: { id },
})
return {
status: 200,
success: true,
message: "Jadwal kegiatan berhasil dihapus",
}
}
export default jadwalKegiatanDelete

View File

@@ -1,28 +0,0 @@
import prisma from "@/lib/prisma";
import { Prisma } from "@prisma/client";
import { Context } from "elysia";
type FormCreate = Prisma.DeskripsiJadwalKegiatanGetPayload<{
select: {
deskripsi: true
}
}>
async function deskripsiJadwalKegiatanCreate(context: Context) {
const body = context.body as FormCreate
await prisma.deskripsiJadwalKegiatan.create({
data: {
deskripsi: body.deskripsi,
}
})
return{
success: true,
message: "Success create deskripsi jadwal kegiatan",
data: {
...body
}
}
}
export default deskripsiJadwalKegiatanCreate

View File

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

View File

@@ -1,16 +0,0 @@
import Elysia, { t } from "elysia";
import deskripsiJadwalKegiatanFindMany from "./find-many";
import deskripsiJadwalKegiatanCreate from "./create";
const DeskripsiJadwalKegiatan = new Elysia({
prefix: "/deskripsikegiatan",
tags: ["Data Kesehatan/Jadwal Kegiatan/Deskripsi Kegiatan"],
})
.get("/find-many", deskripsiJadwalKegiatanFindMany)
.post("/create", deskripsiJadwalKegiatanCreate, {
body: t.Object({
deskripsi: t.String(),
}),
})
export default DeskripsiJadwalKegiatan

View File

@@ -1,26 +0,0 @@
import prisma from "@/lib/prisma";
import { Prisma } from "@prisma/client";
import { Context } from "elysia";
type FormCreate = Prisma.DokumenJadwalKegiatanGetPayload<{
select: {
content: true
}
}>
export default async function DokumenDiperlukanCreate(context: Context){
const body = context.body as FormCreate
await prisma.dokumenJadwalKegiatan.create({
data: {
content: body.content
}
})
return {
success: true,
message: "Success create dokumen yang diperlukan",
data: {
...body
}
}
}

View File

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

View File

@@ -1,17 +0,0 @@
import Elysia, { t } from "elysia";
import DokumenDiperlukanCreate from "./create";
import DokumenDiperlukanFindMany from "./find-many";
const DokumenDiperlukan = new Elysia({
prefix: "/dokumendiperlukan",
tags: ["Data Kesehatan/Jadwal Kegiatan/Dokumen yang diperlukan"]
})
.get("/find-many", DokumenDiperlukanFindMany)
.post("/create", DokumenDiperlukanCreate, {
body: t.Object({
content: t.String()
})
})
export default DokumenDiperlukan

View File

@@ -0,0 +1,30 @@
import prisma from "@/lib/prisma";
export default async function jadwalKegiatanFindMany() {
try {
const data = await prisma.jadwalKegiatan.findMany({
where: {
isActive: true,
},
include: {
informasijadwalkegiatan: true,
deskripsijadwalkegiatan: true,
layananjadwalkegiatan: true,
syaratketentuanjadwalkegiatan: true,
dokumenjadwalkegiatan: true,
pendaftaranjadwalkegiatan: true,
}
})
return {
success: true,
message: "Success fetch jadwal kegiatan",
data,
}
} catch (error) {
console.error("Find many error:", error);
return {
success: false,
message: "Failed fetch jadwal kegiatan",
}
}
}

View File

@@ -0,0 +1,53 @@
import prisma from "@/lib/prisma";
export default async function jadwalKegiatanFindUnique(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.jadwalKegiatan.findUnique({
where: {id},
include: {
informasijadwalkegiatan: true,
deskripsijadwalkegiatan: true,
layananjadwalkegiatan: true,
syaratketentuanjadwalkegiatan: true,
dokumenjadwalkegiatan: true,
pendaftaranjadwalkegiatan: true,
}
})
if (!data) {
return Response.json({
success: false,
message: "Data tidak ditemukan",
}, { status: 404 })
}
return Response.json({
success: true,
data,
}, { status: 200 })
} catch (error) {
console.error("Gagal mengambil data jadwal kegiatan:", error);
return Response.json({
success: false,
message: "Gagal mengambil data jadwal kegiatan",
}, { status: 500 })
}
}

View File

@@ -0,0 +1,89 @@
import Elysia, { t } from "elysia";
import jadwalKegiatanCreate from "./create";
import jadwalKegiatanFindMany from "./findMany";
import jadwalKegiatanDelete from "./del";
import jadwalKegiatanFindUnique from "./findUnique";
import jadwalKegiatanUpdate from "./updt";
const JadwalKegiatan = new Elysia({
prefix: "jadwal-kegiatan",
tags: ["Kesehatan/Jadwal Kegiatan"],
})
.post("/create", jadwalKegiatanCreate, {
body: t.Object({
content: t.String(),
informasiJadwalKegiatan: t.Object({
name: t.String(),
tanggal: t.String(),
waktu: t.String(),
lokasi: t.String(),
}),
deskripsiJadwalKegiatan: t.Object({
deskripsi: t.String(),
}),
layananJadwalKegiatan: t.Object({
content: t.String(),
}),
syaratKetentuanJadwalKegiatan: t.Object({
content: t.String(),
}),
dokumenJadwalKegiatan: t.Object({
content: t.String(),
}),
pendaftaranJadwalKegiatan: t.Object({
name: t.String(),
tanggal: t.String(),
namaOrangtua: t.String(),
nomor: t.String(),
alamat: t.String(),
catatan: t.String(),
}),
}),
})
.get("/find-many", jadwalKegiatanFindMany)
.delete("/del/:id", jadwalKegiatanDelete)
.get("/:id", async (context) => {
const response = await jadwalKegiatanFindUnique(
new Request(context.request)
);
return response;
})
.put(
"/:id",
async (context) => {
const response = await jadwalKegiatanUpdate(context);
return response;
},
{
body: t.Object({
content: t.String(),
informasiJadwalKegiatan: t.Object({
name: t.String(),
tanggal: t.String(),
waktu: t.String(),
lokasi: t.String(),
}),
deskripsiJadwalKegiatan: t.Object({
deskripsi: t.String(),
}),
layananJadwalKegiatan: t.Object({
content: t.String(),
}),
syaratKetentuanJadwalKegiatan: t.Object({
content: t.String(),
}),
dokumenJadwalKegiatan: t.Object({
content: t.String(),
}),
pendaftaranJadwalKegiatan: t.Object({
name: t.String(),
tanggal: t.String(),
namaOrangtua: t.String(),
nomor: t.String(),
alamat: t.String(),
catatan: t.String(),
}),
}),
}
);
export default JadwalKegiatan;

View File

@@ -1,33 +0,0 @@
import prisma from "@/lib/prisma";
import { Prisma } from "@prisma/client";
import { Context } from "elysia";
type FormCreate = Prisma.InformasiJadwalKegiatanGetPayload<{
select: {
name: true
tanggal: true
waktu: true
lokasi: true
}
}>
async function informasiJadwalKegiatanCreate(context: Context) {
const body = context.body as FormCreate
await prisma.informasiJadwalKegiatan.create({
data: {
name: body.name,
tanggal: body.tanggal,
waktu: body.waktu,
lokasi: body.lokasi,
}
})
return{
success: true,
message: "Success create informasi jadwal kegiatan",
data: {
...body
}
}
}
export default informasiJadwalKegiatanCreate

View File

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

View File

@@ -1,19 +0,0 @@
import Elysia, { t } from "elysia";
import informasiJadwalKegiatanFindMany from "./find-many";
import informasiJadwalKegiatanCreate from "./create";
const InformasiJadwalKegiatan = new Elysia({
prefix: "/informasiJadwalKegiatan",
tags: ["Data Kesehatan/Jadwal Kegiatan/Informasi Kegiatan"],
})
.get("/find-many", informasiJadwalKegiatanFindMany)
.post("/create", informasiJadwalKegiatanCreate, {
body: t.Object({
name: t.String(),
tanggal: t.String(),
waktu: t.String(),
lokasi: t.String(),
}),
})
export default InformasiJadwalKegiatan

View File

@@ -1,26 +0,0 @@
import prisma from "@/lib/prisma";
import { Prisma } from "@prisma/client";
import { Context } from "elysia";
type FormCreate = Prisma.LayananJadwalKegiatanGetPayload<{
select: {
content: true
}
}>
export default async function LayananTersediaCreate(context: Context) {
const body = context.body as FormCreate
await prisma.layananJadwalKegiatan.create({
data: {
content: body.content
}
})
return {
success: true,
message: "Success create layanan yang tersedia",
data: {
...body
}
}
}

View File

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

View File

@@ -1,17 +0,0 @@
import Elysia, { t } from "elysia";
import LayananTersediaFindMany from "./find-many";
import LayananTersediaCreate from "./create";
const LayananTersedia = new Elysia({
prefix: "/layanantersedia",
tags: ["Data Kesehatan/Jadwal Kegiatan/Layanan Tersedia"]
})
.get("/find-many", LayananTersediaFindMany)
.post("/create", LayananTersediaCreate, {
body: t.Object({
content: t.String()
})
})
export default LayananTersedia

View File

@@ -1,36 +0,0 @@
import prisma from "@/lib/prisma";
import { Prisma } from "@prisma/client";
import { Context } from "elysia";
type FormCreate = Prisma.PendaftaranJadwalKegiatanGetPayload<{
select: {
name: true
tanggal: true
namaOrangtua: true
nomor: true
alamat: true
catatan: true
}
}>
export default async function PendaftaranJadwalCreate(context: Context) {
const body = context.body as FormCreate
await prisma.pendaftaranJadwalKegiatan.create({
data: {
name: body.name,
tanggal: body.tanggal,
namaOrangtua: body.namaOrangtua,
nomor: body.nomor,
alamat: body.alamat,
catatan: body.catatan
}
})
return {
success: true,
message: "Success create pendaftaran jadwal kegiatan",
data: {
...body
}
}
}

View File

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

View File

@@ -1,21 +0,0 @@
import Elysia, { t } from "elysia"
import PendaftaranJadwalFindMany from "./find-many"
import PendaftaranJadwalCreate from "./create"
const PendaftaranJadwal = new Elysia({
prefix: "/pendaftaranJadwalKegiatan",
tags: ["Data Kesehatan/Jadwal Kegiatan/Pendaftaran Jadwal"],
})
.get("/find-many", PendaftaranJadwalFindMany)
.post("/create", PendaftaranJadwalCreate, {
body: t.Object({
name: t.String(),
tanggal: t.String(),
namaOrangtua: t.String(),
nomor: t.String(),
alamat: t.String(),
catatan: t.String(),
})
})
export default PendaftaranJadwal

View File

@@ -1,26 +0,0 @@
import prisma from "@/lib/prisma";
import { Prisma } from "@prisma/client";
import { Context } from "elysia";
type FormCreate = Prisma.SyaratKetentuanJadwalKegiatanGetPayload<{
select: {
content: true;
};
}>;
export default async function SyaratKetentuanCreate(context: Context) {
const body = context.body as FormCreate;
await prisma.syaratKetentuanJadwalKegiatan.create({
data: {
content: body.content,
},
});
return {
success: true,
message: "Success create syarat ketentuan jadwal kegiatan",
data: {
...body,
},
};
}

View File

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

View File

@@ -1,16 +0,0 @@
import Elysia, { t } from "elysia";
import SyaratKetentuanFindMany from "./find-many";
import SyaratKetentuanCreate from "./create";
const SyaratKetentuan = new Elysia({
prefix: "/syaratketentuan",
tags: ["Data Kesehatan/Jadwal Kegiatan/Syarat dan Ketentuan"]
})
.get("/find-many", SyaratKetentuanFindMany)
.post("/create", SyaratKetentuanCreate, {
body: t.Object({
content: t.String()
})
})
export default SyaratKetentuan

View File

@@ -0,0 +1,103 @@
import prisma from "@/lib/prisma";
import { Context } from "elysia";
type JadwalKegiatanUpdateInput = {
content: string;
informasiJadwalKegiatan: {
name: string;
tanggal: string;
waktu: string;
lokasi: string;
};
deskripsiJadwalKegiatan: { deskripsi: string };
layananJadwalKegiatan: { content: string };
syaratKetentuanJadwalKegiatan: { content: string };
dokumenJadwalKegiatan: { content: string };
pendaftaranJadwalKegiatan: {
name: string;
tanggal: string;
namaOrangtua: string;
nomor: string;
alamat: string;
catatan: string;
};
};
const jadwalKegiatanUpdate = async (context: Context) => {
const id = context.params?.id as string;
const body = (await context.body) as JadwalKegiatanUpdateInput;
if (!id) {
return new Response(
JSON.stringify({ success: false, message: "ID is required" }),
{ status: 400, headers: { "Content-Type": "application/json" } }
);
}
const existing = await prisma.jadwalKegiatan.findUnique({ where: { id } });
if (!existing) {
return new Response(
JSON.stringify({ success: false, message: "Data not found" }),
{ status: 404, headers: { "Content-Type": "application/json" } }
);
}
const {
content,
informasiJadwalKegiatan,
deskripsiJadwalKegiatan,
layananJadwalKegiatan,
syaratKetentuanJadwalKegiatan,
dokumenJadwalKegiatan,
pendaftaranJadwalKegiatan,
} = body;
await Promise.all([
prisma.informasiJadwalKegiatan.update({
where: { id: existing.informasiJadwalKegiatanId },
data: informasiJadwalKegiatan
}),
prisma.deskripsiJadwalKegiatan.update({
where: { id: existing.deskripsiJadwalKegiatanId },
data: deskripsiJadwalKegiatan
}),
prisma.layananJadwalKegiatan.update({
where: { id: existing.layananJadwalKegiatanId },
data: layananJadwalKegiatan
}),
prisma.syaratKetentuanJadwalKegiatan.update({
where: { id: existing.syaratKetentuanJadwalKegiatanId },
data: syaratKetentuanJadwalKegiatan,
}),
prisma.dokumenJadwalKegiatan.update({
where: { id: existing.dokumenJadwalKegiatanId },
data: dokumenJadwalKegiatan
}),
prisma.pendaftaranJadwalKegiatan.update({
where: { id: existing.pendaftaranJadwalKegiatanId },
data: pendaftaranJadwalKegiatan,
}),
]);
const updated = await prisma.jadwalKegiatan.update({
where: { id },
data: {
content,
},
include: {
informasijadwalkegiatan: true,
deskripsijadwalkegiatan: true,
layananjadwalkegiatan: true,
syaratketentuanjadwalkegiatan: true,
dokumenjadwalkegiatan: true,
pendaftaranjadwalkegiatan: true,
},
});
return {
success: true,
message: "Success update jadwal kegiatan",
data: updated,
};
};
export default jadwalKegiatanUpdate;

View File

@@ -6,12 +6,6 @@ import MythVsFact from "./data_kesehatan_warga/artikel_kesehatan/myth_vs_fact";
import Prevention from "./data_kesehatan_warga/artikel_kesehatan/prevention";
import Syptom from "./data_kesehatan_warga/artikel_kesehatan/syptom";
import GrafikKepuasan from "./data_kesehatan_warga/grafik_kepuasan";
import DeskripsiJadwalKegiatan from "./data_kesehatan_warga/jadwal_kegiatan/deskripsi_kegiatan";
import DokumenDiperlukan from "./data_kesehatan_warga/jadwal_kegiatan/dokumen_yang_diperlukan";
import InformasiJadwalKegiatan from "./data_kesehatan_warga/jadwal_kegiatan/informasi_kegiatan";
import LayananTersedia from "./data_kesehatan_warga/jadwal_kegiatan/layanan_yang_tersedia";
import PendaftaranJadwal from "./data_kesehatan_warga/jadwal_kegiatan/pendaftaran";
import SyaratKetentuan from "./data_kesehatan_warga/jadwal_kegiatan/syarat_dan_ketentuan";
import PersentaseKelahiranKematian from "./data_kesehatan_warga/persentase_kelahiran_kematian";
import InfoWabahPenyakit from "./info-wabah-penyakit";
import KontakDarurat from "./kontak-darurat";
@@ -20,18 +14,13 @@ import Posyandu from "./posyandu";
import ProgramKesehatan from "./program-kesehatan";
import Puskesmas from "./puskesmas";
import FasilitasKesehatan from "./data_kesehatan_warga/fasilitas_kesehatan";
import JadwalKegiatan from "./data_kesehatan_warga/jadwal_kegiatan";
const Kesehatan = new Elysia({
prefix: "/api/kesehatan",
tags: ["Kesehatan"],
})
.use(InformasiJadwalKegiatan)
.use(DeskripsiJadwalKegiatan)
.use(LayananTersedia)
.use(SyaratKetentuan)
.use(DokumenDiperlukan)
.use(PendaftaranJadwal)
.use(PersentaseKelahiranKematian)
.use(GrafikKepuasan)
.use(Introduction)
@@ -47,4 +36,5 @@ const Kesehatan = new Elysia({
.use(KontakDarurat)
.use(InfoWabahPenyakit)
.use(FasilitasKesehatan)
.use(JadwalKegiatan)
export default Kesehatan;