Menambahkan menu dokter dan tenaga medis, admin bisa create, edit, delet dokter
Menambahkan menu tarif dan layanan, admin bisa create, edit, delete tarif dan layanan Dibagian fasilitas kesehatan admin bisa multiselect bagian dokter dan tarif layanan Di tampilan user juga sudah disesuaikan dengan datanya bisa muncul lebih dari 1 dokter dan 1 tarif layanan
This commit is contained in:
@@ -1,18 +1,16 @@
|
||||
import prisma from "@/lib/prisma";
|
||||
import { Context } from "elysia";
|
||||
|
||||
type FasilitasKesehatanInput = {
|
||||
name: string;
|
||||
informasiUmum: { fasilitas: string; alamat: string; jamOperasional: string };
|
||||
layananUnggulan: { content: string };
|
||||
dokterdanTenagaMedis: { name: string; specialist: string; jadwal: string };
|
||||
fasilitasPendukung: { content: string };
|
||||
prosedurPendaftaran: { content: string };
|
||||
tarifDanLayanan: { layanan: string; tarif: string };
|
||||
};
|
||||
|
||||
const fasilitasKesehatanCreate = async (context: Context) => {
|
||||
const body = await context.body as FasilitasKesehatanInput;
|
||||
const body = (await context.body) as {
|
||||
name: string;
|
||||
informasiUmum: { fasilitas: string; alamat: string; jamOperasional: string };
|
||||
layananUnggulan: { content: string };
|
||||
dokterdanTenagaMedis: string[]; // ← ARRAY OF ID
|
||||
fasilitasPendukung: { content: string };
|
||||
prosedurPendaftaran: { content: string };
|
||||
tarifDanLayanan: string[]; // ← ARRAY OF ID
|
||||
};
|
||||
|
||||
const {
|
||||
name,
|
||||
@@ -24,25 +22,30 @@ const fasilitasKesehatanCreate = async (context: Context) => {
|
||||
tarifDanLayanan,
|
||||
} = body;
|
||||
|
||||
// Buat masing-masing relasi terlebih dahulu
|
||||
const [createdInformasiUmum, createdLayananUnggulan, createdDokter, createdPendukung, createdProsedur, createdTarif] = await Promise.all([
|
||||
prisma.informasiUmum.create({ data: informasiUmum }),
|
||||
prisma.layananUnggulan.create({ data: layananUnggulan }),
|
||||
prisma.dokterdanTenagaMedis.create({ data: dokterdanTenagaMedis }),
|
||||
prisma.fasilitasPendukung.create({ data: fasilitasPendukung }),
|
||||
prisma.prosedurPendaftaran.create({ data: prosedurPendaftaran }),
|
||||
prisma.tarifDanLayanan.create({ data: tarifDanLayanan }),
|
||||
]);
|
||||
// CREATE SINGLE DATA
|
||||
const [createdInformasi, createdUnggulan, createdPendukung, createdProsedur] =
|
||||
await Promise.all([
|
||||
prisma.informasiUmum.create({ data: informasiUmum }),
|
||||
prisma.layananUnggulan.create({ data: layananUnggulan }),
|
||||
prisma.fasilitasPendukung.create({ data: fasilitasPendukung }),
|
||||
prisma.prosedurPendaftaran.create({ data: prosedurPendaftaran }),
|
||||
]);
|
||||
|
||||
// ✅ CUKUP CONNECT KE ID YANG SUDAH ADA
|
||||
const fasilitas = await prisma.fasilitasKesehatan.create({
|
||||
data: {
|
||||
name,
|
||||
informasiUmumId: createdInformasiUmum.id,
|
||||
layananUnggulanId: createdLayananUnggulan.id,
|
||||
dokterdanTenagaMedisId: createdDokter.id,
|
||||
informasiUmumId: createdInformasi.id,
|
||||
layananUnggulanId: createdUnggulan.id,
|
||||
fasilitasPendukungId: createdPendukung.id,
|
||||
prosedurPendaftaranId: createdProsedur.id,
|
||||
tarifDanLayananId: createdTarif.id,
|
||||
|
||||
dokterdantenagamedis: {
|
||||
connect: dokterdanTenagaMedis.map(id => ({ id })), // ← langsung dari input
|
||||
},
|
||||
tarifdanlayanan: {
|
||||
connect: tarifDanLayanan.map(id => ({ id })), // ← langsung dari input
|
||||
},
|
||||
},
|
||||
include: {
|
||||
informasiumum: true,
|
||||
|
||||
@@ -2,42 +2,14 @@ import prisma from "@/lib/prisma";
|
||||
import { Context } from "elysia";
|
||||
|
||||
const fasilitasKesehatanDelete = async (context: Context) => {
|
||||
const id = context.params?.id as string;
|
||||
const id = context.params?.id as string;
|
||||
|
||||
if (!id) {
|
||||
return {
|
||||
status: 400,
|
||||
message: "ID tidak ditemukan",
|
||||
}
|
||||
}
|
||||
const data = await prisma.fasilitasKesehatan.findUnique({ where: { id } });
|
||||
if (!data) return { status: 404, message: "Data tidak ditemukan" };
|
||||
|
||||
const fasilitasKesehatan = await prisma.fasilitasKesehatan.findUnique({
|
||||
where: { id },
|
||||
include: {
|
||||
informasiumum: true,
|
||||
layananunggulan: true,
|
||||
dokterdantenagamedis: true,
|
||||
fasilitaspendukung: true,
|
||||
prosedurpendaftaran: true,
|
||||
tarifdanlayanan: true,
|
||||
}
|
||||
})
|
||||
await prisma.fasilitasKesehatan.delete({ where: { id } });
|
||||
|
||||
if (!fasilitasKesehatan) {
|
||||
return {
|
||||
status: 404,
|
||||
message: "Fasilitas kesehatan tidak ditemukan",
|
||||
}
|
||||
}
|
||||
return { success: true, message: "Berhasil dihapus" };
|
||||
};
|
||||
|
||||
await prisma.fasilitasKesehatan.delete({
|
||||
where: { id },
|
||||
})
|
||||
|
||||
return {
|
||||
status: 200,
|
||||
success: true,
|
||||
message: "Fasilitas kesehatan berhasil dihapus",
|
||||
}
|
||||
}
|
||||
export default fasilitasKesehatanDelete
|
||||
export default fasilitasKesehatanDelete;
|
||||
|
||||
@@ -5,6 +5,11 @@ type FormCreate = {
|
||||
name: string;
|
||||
specialist: string;
|
||||
jadwal: string;
|
||||
jadwalLibur: string;
|
||||
jamBukaOperasional: string;
|
||||
jamTutupOperasional: string;
|
||||
jamBukaLibur: string;
|
||||
jamTutupLibur: string;
|
||||
};
|
||||
|
||||
export default async function dokterTenagaMedisCreate(context: Context) {
|
||||
@@ -15,11 +20,21 @@ export default async function dokterTenagaMedisCreate(context: Context) {
|
||||
name: body.name,
|
||||
specialist: body.specialist,
|
||||
jadwal: body.jadwal,
|
||||
jadwalLibur: body.jadwalLibur,
|
||||
jamBukaOperasional: body.jamBukaOperasional,
|
||||
jamTutupOperasional: body.jamTutupOperasional,
|
||||
jamBukaLibur: body.jamBukaLibur,
|
||||
jamTutupLibur: body.jamTutupLibur,
|
||||
},
|
||||
select: {
|
||||
name: true,
|
||||
specialist: true,
|
||||
jadwal: true,
|
||||
jadwalLibur: true,
|
||||
jamBukaOperasional: true,
|
||||
jamTutupOperasional: true,
|
||||
jamBukaLibur: true,
|
||||
jamTutupLibur: true,
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -19,6 +19,7 @@ async function dokterTenagaMedisFindMany(context: Context) {
|
||||
{ name: { contains: search, mode: 'insensitive' } },
|
||||
{ specialist: { contains: search, mode: 'insensitive' } },
|
||||
{ jadwal: { contains: search, mode: 'insensitive' } },
|
||||
{ jadwalLibur: { contains: search, mode: 'insensitive' } },
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
@@ -19,6 +19,11 @@ const DokterTenagaMedis = new Elysia({
|
||||
name: t.String(),
|
||||
specialist: t.String(),
|
||||
jadwal: t.String(),
|
||||
jadwalLibur: t.String(),
|
||||
jamBukaOperasional: t.String(),
|
||||
jamTutupOperasional: t.String(),
|
||||
jamBukaLibur: t.String(),
|
||||
jamTutupLibur: t.String(),
|
||||
}),
|
||||
})
|
||||
.put("/:id", dokterTenagaMedisUpdate, {
|
||||
@@ -26,6 +31,11 @@ const DokterTenagaMedis = new Elysia({
|
||||
name: t.String(),
|
||||
specialist: t.String(),
|
||||
jadwal: t.String(),
|
||||
jadwalLibur: t.String(),
|
||||
jamBukaOperasional: t.String(),
|
||||
jamTutupOperasional: t.String(),
|
||||
jamBukaLibur: t.String(),
|
||||
jamTutupLibur: t.String(),
|
||||
}),
|
||||
})
|
||||
.delete("/del/:id", dokterTenagaMedisDelete)
|
||||
|
||||
@@ -5,6 +5,11 @@ type FormUpdate = {
|
||||
name: string;
|
||||
specialist: string;
|
||||
jadwal: string;
|
||||
jadwalLibur: string;
|
||||
jamBukaOperasional: string;
|
||||
jamTutupOperasional: string;
|
||||
jamBukaLibur: string;
|
||||
jamTutupLibur: string;
|
||||
}
|
||||
|
||||
export default async function dokterTenagaMedisUpdate(context: Context) {
|
||||
@@ -18,6 +23,12 @@ export default async function dokterTenagaMedisUpdate(context: Context) {
|
||||
name: body.name,
|
||||
specialist: body.specialist,
|
||||
jadwal: body.jadwal,
|
||||
jadwalLibur: body.jadwalLibur,
|
||||
jamBukaOperasional: body.jamBukaOperasional,
|
||||
jamTutupOperasional: body.jamTutupOperasional,
|
||||
jamBukaLibur: body.jamBukaLibur,
|
||||
jamTutupLibur: body.jamTutupLibur,
|
||||
|
||||
},
|
||||
});
|
||||
return {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { Elysia, t } from "elysia";
|
||||
import fasilitasKesehatanCreate from "./create";
|
||||
import findManyFasilitasKesehatan from "./findMany";
|
||||
import fasilitasKesehatanFindMany from "./findMany";
|
||||
import findUniqueFasilitasKesehatan from "./findUnique";
|
||||
import fasilitasKesehatanUpdate from "./updt";
|
||||
import fasilitasKesehatanDelete from "./del";
|
||||
@@ -9,42 +9,61 @@ const FasilitasKesehatan = new Elysia({
|
||||
prefix: "fasilitas-kesehatan",
|
||||
tags: ["Kesehatan/Fasilitas Kesehatan"],
|
||||
})
|
||||
|
||||
// ==========================
|
||||
// CREATE
|
||||
// ==========================
|
||||
.post("/create", fasilitasKesehatanCreate, {
|
||||
body: t.Object({
|
||||
name: t.String(),
|
||||
|
||||
informasiUmum: t.Object({
|
||||
fasilitas: t.String(),
|
||||
alamat: t.String(),
|
||||
jamOperasional: t.String(),
|
||||
}),
|
||||
|
||||
layananUnggulan: t.Object({
|
||||
content: t.String(),
|
||||
}),
|
||||
dokterdanTenagaMedis: t.Object({
|
||||
name: t.String(),
|
||||
specialist: t.String(),
|
||||
jadwal: t.String(),
|
||||
}),
|
||||
|
||||
dokterdanTenagaMedis: t.Array(t.String()), // FIX karena create pakai array of string
|
||||
|
||||
fasilitasPendukung: t.Object({
|
||||
content: t.String(),
|
||||
}),
|
||||
|
||||
prosedurPendaftaran: t.Object({
|
||||
content: t.String(),
|
||||
}),
|
||||
tarifDanLayanan: t.Object({
|
||||
layanan: t.String(),
|
||||
tarif: t.String(),
|
||||
}),
|
||||
|
||||
tarifDanLayanan: t.Array(t.String()), // FIX karena create pakai array of string
|
||||
}),
|
||||
})
|
||||
.get("/find-many", findManyFasilitasKesehatan)
|
||||
|
||||
// ==========================
|
||||
// FIND MANY
|
||||
// ==========================
|
||||
.get("/find-many", fasilitasKesehatanFindMany)
|
||||
|
||||
// ==========================
|
||||
// DELETE
|
||||
// ==========================
|
||||
.delete("/del/:id", fasilitasKesehatanDelete)
|
||||
|
||||
// ==========================
|
||||
// FIND UNIQUE
|
||||
// ==========================
|
||||
.get("/:id", async (context) => {
|
||||
const response = await findUniqueFasilitasKesehatan(
|
||||
new Request(context.request)
|
||||
);
|
||||
return response;
|
||||
})
|
||||
|
||||
// ==========================
|
||||
// UPDATE
|
||||
// ==========================
|
||||
.put(
|
||||
"/:id",
|
||||
async (context) => {
|
||||
@@ -54,29 +73,30 @@ const FasilitasKesehatan = new Elysia({
|
||||
{
|
||||
body: t.Object({
|
||||
name: t.String(),
|
||||
|
||||
informasiUmum: t.Object({
|
||||
fasilitas: t.String(),
|
||||
alamat: t.String(),
|
||||
jamOperasional: t.String(),
|
||||
}),
|
||||
|
||||
layananUnggulan: t.Object({
|
||||
content: t.String(),
|
||||
}),
|
||||
dokterdanTenagaMedis: t.Object({
|
||||
name: t.String(),
|
||||
specialist: t.String(),
|
||||
jadwal: t.String(),
|
||||
}),
|
||||
|
||||
// FIX → harus array of string (ID dokter)
|
||||
dokterdanTenagaMedis: t.Array(t.String()),
|
||||
|
||||
fasilitasPendukung: t.Object({
|
||||
content: t.String(),
|
||||
}),
|
||||
|
||||
prosedurPendaftaran: t.Object({
|
||||
content: t.String(),
|
||||
}),
|
||||
tarifDanLayanan: t.Object({
|
||||
layanan: t.String(),
|
||||
tarif: t.String(),
|
||||
}),
|
||||
|
||||
// FIX → harus array of string (ID tarif)
|
||||
tarifDanLayanan: t.Array(t.String()),
|
||||
}),
|
||||
}
|
||||
);
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
import prisma from "@/lib/prisma";
|
||||
import { Context } from "elysia";
|
||||
|
||||
type FormCreate = {
|
||||
layanan: string;
|
||||
tarif: string;
|
||||
};
|
||||
|
||||
export default async function tarifLayananCreate(context: Context) {
|
||||
const body = context.body as FormCreate;
|
||||
|
||||
const created = await prisma.tarifDanLayanan.create({
|
||||
data: {
|
||||
layanan: body.layanan,
|
||||
tarif: body.tarif,
|
||||
},
|
||||
select: {
|
||||
layanan: true,
|
||||
tarif: true,
|
||||
}
|
||||
});
|
||||
|
||||
return {
|
||||
success: true,
|
||||
message: "Sukses menambahkan dokter tenaga medis",
|
||||
data: created,
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
import prisma from "@/lib/prisma";
|
||||
import { Context } from "elysia";
|
||||
|
||||
export default async function tarifLayananDelete(context: Context) {
|
||||
|
||||
const id = context.params?.id;
|
||||
|
||||
if (!id) {
|
||||
return {
|
||||
success: false,
|
||||
message: "ID tidak ditemukan",
|
||||
};
|
||||
}
|
||||
|
||||
const existing = await prisma.tarifDanLayanan.findUnique({
|
||||
where: {
|
||||
id: id,
|
||||
},
|
||||
});
|
||||
|
||||
if (!existing) {
|
||||
return {
|
||||
success: false,
|
||||
message: "Data tidak ditemukan",
|
||||
};
|
||||
}
|
||||
|
||||
const deleted = await prisma.tarifDanLayanan.delete({
|
||||
where: { id },
|
||||
});
|
||||
|
||||
return {
|
||||
success: true,
|
||||
message: "Data berhasil dihapus",
|
||||
data: deleted,
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
/* eslint-disable @typescript-eslint/no-explicit-any */
|
||||
// /api/berita/findManyPaginated.ts
|
||||
import prisma from "@/lib/prisma";
|
||||
import { Context } from "elysia";
|
||||
|
||||
async function tarifLayananFindMany(context: Context) {
|
||||
// Ambil parameter dari query
|
||||
const page = Number(context.query.page) || 1;
|
||||
const limit = Number(context.query.limit) || 10;
|
||||
const search = (context.query.search as string) || '';
|
||||
const skip = (page - 1) * limit;
|
||||
|
||||
// Buat where clause
|
||||
const where: any = { isActive: true };
|
||||
|
||||
// Tambahkan pencarian (jika ada)
|
||||
if (search) {
|
||||
where.OR = [
|
||||
{ layanan: { contains: search, mode: 'insensitive' } },
|
||||
{ tarif: { contains: search, mode: 'insensitive' } },
|
||||
];
|
||||
}
|
||||
|
||||
try {
|
||||
// Ambil data dan total count secara paralel
|
||||
const [data, total] = await Promise.all([
|
||||
prisma.tarifDanLayanan.findMany({
|
||||
where,
|
||||
skip,
|
||||
take: limit,
|
||||
orderBy: { layanan: 'asc' },
|
||||
}),
|
||||
prisma.tarifDanLayanan.count({ where }),
|
||||
]);
|
||||
|
||||
return {
|
||||
success: true,
|
||||
message: "Berhasil ambil data tarif layanan dengan pagination",
|
||||
data,
|
||||
page,
|
||||
limit,
|
||||
total,
|
||||
totalPages: Math.ceil(total / limit),
|
||||
};
|
||||
} catch (e) {
|
||||
console.error("Error di findMany paginated:", e);
|
||||
return {
|
||||
success: false,
|
||||
message: "Gagal mengambil data tarif layanan",
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
export default tarifLayananFindMany;
|
||||
@@ -0,0 +1,47 @@
|
||||
import prisma from "@/lib/prisma";
|
||||
|
||||
export default async function tarifLayananFindUnique(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.tarifDanLayanan.findUnique({
|
||||
where: { id },
|
||||
});
|
||||
|
||||
if (!data) {
|
||||
return Response.json({
|
||||
success: false,
|
||||
message: "Data tidak ditemukan",
|
||||
}, { status: 404 });
|
||||
}
|
||||
|
||||
return Response.json({
|
||||
success: true,
|
||||
message: "Berhasil mengambil data berdasarkan ID",
|
||||
data,
|
||||
}, { status: 200 });
|
||||
} catch (error) {
|
||||
console.error("Error fetching data:", error);
|
||||
return Response.json({
|
||||
success: false,
|
||||
message: "Terjadi kesalahan saat mengambil data",
|
||||
}, { status: 500 });
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
import Elysia, { t } from "elysia";
|
||||
import tarifLayananCreate from "./create";
|
||||
import tarifLayananFindMany from "./findMany";
|
||||
import tarifLayananFindUnique from "./findUnique";
|
||||
import tarifLayananDelete from "./del";
|
||||
import tarifLayananUpdate from "./updt";
|
||||
|
||||
const TarifLayanan = new Elysia({
|
||||
prefix: "/tarifdanlayanan",
|
||||
tags: ["Data Kesehatan/Fasilitas Kesehatan/Tarif Layanan"]
|
||||
})
|
||||
.get("/:id", async (context) => {
|
||||
const response = await tarifLayananFindUnique(new Request(context.request));
|
||||
return response;
|
||||
})
|
||||
.get("/findMany", tarifLayananFindMany)
|
||||
.post("/create", tarifLayananCreate, {
|
||||
body: t.Object({
|
||||
tarif: t.String(),
|
||||
layanan: t.String()
|
||||
}),
|
||||
})
|
||||
.put("/:id", tarifLayananUpdate, {
|
||||
body: t.Object({
|
||||
tarif: t.String(),
|
||||
layanan: t.String(),
|
||||
}),
|
||||
})
|
||||
.delete("/del/:id", tarifLayananDelete)
|
||||
export default TarifLayanan
|
||||
@@ -0,0 +1,32 @@
|
||||
import prisma from "@/lib/prisma";
|
||||
import { Context } from "elysia";
|
||||
|
||||
type FormUpdate = {
|
||||
layanan: string;
|
||||
tarif: string;
|
||||
};
|
||||
|
||||
export default async function tarifLayananUpdate(context: Context) {
|
||||
const body = (await context.body) as FormUpdate;
|
||||
const id = context.params.id as string;
|
||||
|
||||
try {
|
||||
const result = await prisma.tarifDanLayanan.update({
|
||||
where: { id },
|
||||
data: {
|
||||
layanan: body.layanan,
|
||||
tarif: body.tarif,
|
||||
},
|
||||
});
|
||||
return {
|
||||
success: true,
|
||||
message: "Berhasil mengupdate data tarif layanan",
|
||||
data: result,
|
||||
};
|
||||
} catch (error) {
|
||||
console.error("Error updating data tarif layanan:", error);
|
||||
throw new Error(
|
||||
"Gagal mengupdate data tarif layanan: " + (error as Error).message
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -5,32 +5,26 @@ type FasilitasKesehatanInput = {
|
||||
name: string;
|
||||
informasiUmum: { fasilitas: string; alamat: string; jamOperasional: string };
|
||||
layananUnggulan: { content: string };
|
||||
dokterdanTenagaMedis: { name: string; specialist: string; jadwal: string };
|
||||
dokterdanTenagaMedis: string[]; // ← ID saja
|
||||
fasilitasPendukung: { content: string };
|
||||
prosedurPendaftaran: { content: string };
|
||||
tarifDanLayanan: { layanan: string; tarif: string };
|
||||
tarifDanLayanan: string[]; // ← ID saja
|
||||
};
|
||||
|
||||
const fasilitasKesehatanUpdate = async (context: Context) => {
|
||||
const id = context.params?.id as string;
|
||||
const body = await context.body as FasilitasKesehatanInput;
|
||||
|
||||
if (!id) {
|
||||
return new Response(
|
||||
JSON.stringify({ success: false, message: "ID is required" }),
|
||||
{ status: 400, headers: { "Content-Type": "application/json" } }
|
||||
);
|
||||
}
|
||||
const body = (await context.body) as FasilitasKesehatanInput;
|
||||
|
||||
const existing = await prisma.fasilitasKesehatan.findUnique({
|
||||
where: { id },
|
||||
include: {
|
||||
dokterdantenagamedis: true,
|
||||
tarifdanlayanan: true,
|
||||
},
|
||||
});
|
||||
|
||||
if (!existing) {
|
||||
return new Response(
|
||||
JSON.stringify({ success: false, message: "Data not found" }),
|
||||
{ status: 404, headers: { "Content-Type": "application/json" } }
|
||||
);
|
||||
return { success: false, message: "Data tidak ditemukan" };
|
||||
}
|
||||
|
||||
const {
|
||||
@@ -43,38 +37,46 @@ const fasilitasKesehatanUpdate = async (context: Context) => {
|
||||
tarifDanLayanan,
|
||||
} = body;
|
||||
|
||||
// Update data masing-masing relasi
|
||||
// update relasi 1-1
|
||||
await Promise.all([
|
||||
prisma.informasiUmum.update({
|
||||
where: { id: existing.informasiUmumId },
|
||||
data: informasiUmum,
|
||||
}),
|
||||
|
||||
prisma.layananUnggulan.update({
|
||||
where: { id: existing.layananUnggulanId },
|
||||
data: layananUnggulan,
|
||||
}),
|
||||
prisma.dokterdanTenagaMedis.update({
|
||||
where: { id: existing.dokterdanTenagaMedisId },
|
||||
data: dokterdanTenagaMedis,
|
||||
}),
|
||||
|
||||
prisma.fasilitasPendukung.update({
|
||||
where: { id: existing.fasilitasPendukungId },
|
||||
data: fasilitasPendukung,
|
||||
}),
|
||||
|
||||
prisma.prosedurPendaftaran.update({
|
||||
where: { id: existing.prosedurPendaftaranId },
|
||||
data: prosedurPendaftaran,
|
||||
}),
|
||||
prisma.tarifDanLayanan.update({
|
||||
where: { id: existing.tarifDanLayananId },
|
||||
data: tarifDanLayanan,
|
||||
}),
|
||||
]);
|
||||
|
||||
// Update main record
|
||||
// update m2m
|
||||
const updated = await prisma.fasilitasKesehatan.update({
|
||||
where: { id },
|
||||
data: { name },
|
||||
|
||||
data: {
|
||||
name,
|
||||
|
||||
// reset dokter lama → ganti baru
|
||||
dokterdantenagamedis: {
|
||||
set: dokterdanTenagaMedis.map((id) => ({ id })),
|
||||
},
|
||||
|
||||
tarifdanlayanan: {
|
||||
set: tarifDanLayanan.map((id) => ({ id })),
|
||||
},
|
||||
},
|
||||
|
||||
include: {
|
||||
informasiumum: true,
|
||||
layananunggulan: true,
|
||||
@@ -87,7 +89,7 @@ const fasilitasKesehatanUpdate = async (context: Context) => {
|
||||
|
||||
return {
|
||||
success: true,
|
||||
message: "Fasilitas berhasil diupdate",
|
||||
message: "Fasilitas diupdate",
|
||||
data: updated,
|
||||
};
|
||||
};
|
||||
|
||||
@@ -20,6 +20,7 @@ import Kelahiran from "./data_kesehatan_warga/persentase_kelahiran_kematian/kela
|
||||
import Kematian from "./data_kesehatan_warga/persentase_kelahiran_kematian/kematian";
|
||||
import DokterTenagaMedis from "./data_kesehatan_warga/fasilitas_kesehatan/dokter-tenaga-medis";
|
||||
import PendaftaranJadwalKegiatan from "./data_kesehatan_warga/jadwal_kegiatan/pendaftaran";
|
||||
import TarifLayanan from "./data_kesehatan_warga/fasilitas_kesehatan/tarif-layanan";
|
||||
|
||||
|
||||
const Kesehatan = new Elysia({
|
||||
@@ -46,5 +47,6 @@ const Kesehatan = new Elysia({
|
||||
.use(Kelahiran)
|
||||
.use(Kematian)
|
||||
.use(DokterTenagaMedis)
|
||||
.use(TarifLayanan)
|
||||
.use(PendaftaranJadwalKegiatan)
|
||||
export default Kesehatan;
|
||||
|
||||
@@ -557,25 +557,37 @@ export default async function searchFindMany(context: Context) {
|
||||
],
|
||||
},
|
||||
layananunggulan: { content: { contains: query, mode: "insensitive" } },
|
||||
dokterdantenagamedis: {
|
||||
OR: [
|
||||
{ name: { contains: query, mode: "insensitive" } },
|
||||
{ specialist: { contains: query, mode: "insensitive" } },
|
||||
{ jadwal: { contains: query, mode: "insensitive" } },
|
||||
],
|
||||
},
|
||||
|
||||
fasilitaspendukung: {
|
||||
content: { contains: query, mode: "insensitive" },
|
||||
},
|
||||
prosedurpendaftaran: {
|
||||
content: { contains: query, mode: "insensitive" },
|
||||
},
|
||||
tarifdanlayanan: {
|
||||
OR: [
|
||||
{ layanan: { contains: query, mode: "insensitive" } },
|
||||
{ tarif: { contains: query, mode: "insensitive" } },
|
||||
],
|
||||
},
|
||||
},
|
||||
skip,
|
||||
take: limitNum,
|
||||
});
|
||||
return { data, nextPage: data.length < limitNum ? null : pageNum + 1 };
|
||||
}
|
||||
|
||||
if (type === "doktertenagamedis") {
|
||||
const data = await prisma.dokterdanTenagaMedis.findMany({
|
||||
where: {
|
||||
name: { contains: query, mode: "insensitive" },
|
||||
specialist: { contains: query, mode: "insensitive" },
|
||||
},
|
||||
skip,
|
||||
take: limitNum,
|
||||
});
|
||||
return { data, nextPage: data.length < limitNum ? null : pageNum + 1 };
|
||||
}
|
||||
|
||||
if (type === "tarifdanlayanan") {
|
||||
const data = await prisma.tarifDanLayanan.findMany({
|
||||
where: {
|
||||
layanan: { contains: query, mode: "insensitive" },
|
||||
tarif: { contains: query, mode: "insensitive" },
|
||||
},
|
||||
skip,
|
||||
take: limitNum,
|
||||
@@ -1567,6 +1579,8 @@ export default async function searchFindMany(context: Context) {
|
||||
jenisProgramYangDiselenggarakan,
|
||||
dataPerpustakaan,
|
||||
dataPendidikan,
|
||||
dokterDanTenagaMedis,
|
||||
tarifDanLayanan
|
||||
] = await Promise.all([
|
||||
prisma.pejabatDesa.findMany({
|
||||
where: { name: { contains: query, mode: "insensitive" } },
|
||||
@@ -1894,25 +1908,27 @@ export default async function searchFindMany(context: Context) {
|
||||
],
|
||||
},
|
||||
layananunggulan: { content: { contains: query, mode: "insensitive" } },
|
||||
dokterdantenagamedis: {
|
||||
OR: [
|
||||
{ name: { contains: query, mode: "insensitive" } },
|
||||
{ specialist: { contains: query, mode: "insensitive" } },
|
||||
{ jadwal: { contains: query, mode: "insensitive" } },
|
||||
],
|
||||
},
|
||||
|
||||
fasilitaspendukung: {
|
||||
content: { contains: query, mode: "insensitive" },
|
||||
},
|
||||
prosedurpendaftaran: {
|
||||
content: { contains: query, mode: "insensitive" },
|
||||
},
|
||||
tarifdanlayanan: {
|
||||
OR: [
|
||||
{ layanan: { contains: query, mode: "insensitive" } },
|
||||
{ tarif: { contains: query, mode: "insensitive" } },
|
||||
],
|
||||
},
|
||||
},
|
||||
take: limitNum,
|
||||
}),
|
||||
prisma.dokterdanTenagaMedis.findMany({
|
||||
where: {
|
||||
name: { contains: query, mode: "insensitive" },
|
||||
specialist: { contains: query, mode: "insensitive" },
|
||||
},
|
||||
take: limitNum,
|
||||
}),
|
||||
prisma.tarifDanLayanan.findMany({
|
||||
where: {
|
||||
tarif: { contains: query, mode: "insensitive" },
|
||||
layanan: { contains: query, mode: "insensitive" },
|
||||
},
|
||||
take: limitNum,
|
||||
}),
|
||||
@@ -2316,7 +2332,7 @@ export default async function searchFindMany(context: Context) {
|
||||
{ judul: { contains: query, mode: "insensitive" } },
|
||||
{ deskripsiSingkat: { contains: query, mode: "insensitive" } },
|
||||
{ deskripsiLengkap: { contains: query, mode: "insensitive" } },
|
||||
{ lokasi: { contains: query, mode: "insensitive" } },
|
||||
{ lokasi: { contains: query, mode: "insensitive" } },
|
||||
{
|
||||
kategoriKegiatan: {
|
||||
nama: { contains: query, mode: "insensitive" },
|
||||
@@ -2559,6 +2575,8 @@ export default async function searchFindMany(context: Context) {
|
||||
...penghargaan.map((b) => ({ type: "penghargaan", ...b })),
|
||||
...posyandu.map((b) => ({ type: "posyandu", ...b })),
|
||||
...fasilitasKesehatan.map((b) => ({ type: "fasilitasKesehatan", ...b })),
|
||||
...dokterDanTenagaMedis.map((b) => ({ type: "dokterdanTenagaMedis", ...b })),
|
||||
...tarifDanLayanan.map((b) => ({ type: "tarifDanLayanan", ...b })),
|
||||
...jadwalKegiatan.map((b) => ({ type: "jadwalKegiatan", ...b })),
|
||||
...artikelKesehatan.map((b) => ({ type: "artikelKesehatan", ...b })),
|
||||
...puskesmas.map((b) => ({ type: "puskesmas", ...b })),
|
||||
|
||||
Reference in New Issue
Block a user