Fix Admin - User Menu Keamanan, Submenu Pencegahan Kriminalitas
This commit is contained in:
@@ -1,81 +1,35 @@
|
||||
import prisma from "@/lib/prisma";
|
||||
import { Prisma } from "@prisma/client";
|
||||
import { Context } from "elysia";
|
||||
|
||||
type ProgramKeamananInput = {
|
||||
nama: string;
|
||||
deskripsi: string;
|
||||
slug: string;
|
||||
};
|
||||
|
||||
type TipsKeamanan = {
|
||||
judul: string;
|
||||
konten: string;
|
||||
slug: string;
|
||||
};
|
||||
|
||||
type VideoKeamanan = {
|
||||
judul: string;
|
||||
deskripsi: string;
|
||||
videoUrl: string;
|
||||
slug: string;
|
||||
};
|
||||
|
||||
type createdPencegahanKriminalitas = {
|
||||
programKeamanan: ProgramKeamananInput;
|
||||
tipsKeamanan: TipsKeamanan;
|
||||
videoKeamanan: VideoKeamanan;
|
||||
};
|
||||
type FormCreate = Prisma.PencegahanKriminalitasGetPayload<{
|
||||
select: {
|
||||
judul: true;
|
||||
deskripsi: true;
|
||||
deskripsiSingkat: true;
|
||||
linkVideo: true;
|
||||
};
|
||||
}>;
|
||||
|
||||
const pencegahanKriminalitasCreate = async (context: Context) => {
|
||||
const { programKeamanan, tipsKeamanan, videoKeamanan } =
|
||||
(await context.body) as createdPencegahanKriminalitas;
|
||||
const body = context.body as FormCreate;
|
||||
|
||||
const createdProgram = await prisma.programKeamanan.create({
|
||||
await prisma.pencegahanKriminalitas.create({
|
||||
data: {
|
||||
nama: programKeamanan.nama,
|
||||
deskripsi: programKeamanan.deskripsi,
|
||||
slug: programKeamanan.slug,
|
||||
judul: body.judul,
|
||||
deskripsi: body.deskripsi,
|
||||
deskripsiSingkat: body.deskripsiSingkat,
|
||||
linkVideo: body.linkVideo,
|
||||
},
|
||||
});
|
||||
|
||||
const createdTips = await prisma.tipsKeamanan.create({
|
||||
return {
|
||||
success: true,
|
||||
message: "Success create pencegahan kriminalitas",
|
||||
data: {
|
||||
judul: tipsKeamanan.judul,
|
||||
konten: tipsKeamanan.konten,
|
||||
slug: tipsKeamanan.slug,
|
||||
...body,
|
||||
},
|
||||
});
|
||||
|
||||
const createdVideo = await prisma.videoKeamanan.create({
|
||||
data: {
|
||||
judul: videoKeamanan.judul,
|
||||
deskripsi: videoKeamanan.deskripsi,
|
||||
videoUrl: videoKeamanan.videoUrl,
|
||||
slug: videoKeamanan.slug,
|
||||
},
|
||||
});
|
||||
|
||||
const createdPencegahanKriminalitas =
|
||||
await prisma.pencegahanKriminalitas.create({
|
||||
data: {
|
||||
programKeamananId: createdProgram.id,
|
||||
tipsKeamananId: createdTips.id,
|
||||
videoKeamananId: createdVideo.id,
|
||||
},
|
||||
include: {
|
||||
programKeamanan: true,
|
||||
tipsKeamanan: true,
|
||||
videoKeamanan: true,
|
||||
},
|
||||
});
|
||||
|
||||
return Response.json(
|
||||
{
|
||||
success: true,
|
||||
message: "Success create program keamanan",
|
||||
data: createdPencegahanKriminalitas,
|
||||
},
|
||||
{ status: 200 }
|
||||
);
|
||||
status: 200,
|
||||
};
|
||||
};
|
||||
export default pencegahanKriminalitasCreate;
|
||||
|
||||
@@ -13,11 +13,6 @@ const pencegahanKriminalitasDelete = async (context: Context) => {
|
||||
|
||||
const pencegahanKriminalitas = await prisma.pencegahanKriminalitas.findUnique({
|
||||
where: { id },
|
||||
include: {
|
||||
programKeamanan: true,
|
||||
tipsKeamanan: true,
|
||||
videoKeamanan: true,
|
||||
}
|
||||
});
|
||||
|
||||
if (!pencegahanKriminalitas) {
|
||||
|
||||
@@ -0,0 +1,60 @@
|
||||
import prisma from "@/lib/prisma";
|
||||
import { Prisma } from "@prisma/client";
|
||||
import { Context } from "elysia";
|
||||
|
||||
export default async function pencegahanKriminalitasFindFirst(context: Context) {
|
||||
// Ambil parameter query
|
||||
const search = (context.query.search as string) || "";
|
||||
|
||||
// Buat where clause
|
||||
const where: Prisma.PencegahanKriminalitasWhereInput = { isActive: true };
|
||||
|
||||
if (search) {
|
||||
where.OR = [
|
||||
{
|
||||
judul: {
|
||||
contains: search,
|
||||
mode: "insensitive" as const,
|
||||
},
|
||||
},
|
||||
{
|
||||
deskripsi: {
|
||||
contains: search,
|
||||
mode: "insensitive" as const,
|
||||
},
|
||||
},
|
||||
{
|
||||
deskripsiSingkat: {
|
||||
contains: search,
|
||||
mode: "insensitive" as const,
|
||||
},
|
||||
},
|
||||
];
|
||||
}
|
||||
|
||||
try {
|
||||
const data = await prisma.pencegahanKriminalitas.findFirst({
|
||||
where,
|
||||
orderBy: { createdAt: "desc" }, // ambil yang terbaru
|
||||
});
|
||||
|
||||
if (!data) {
|
||||
return {
|
||||
success: false,
|
||||
message: "Data pencegahan kriminalitas tidak ditemukan",
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
success: true,
|
||||
message: "Success fetch first pencegahan kriminalitas",
|
||||
data,
|
||||
};
|
||||
} catch (error) {
|
||||
console.error("Find first error:", error);
|
||||
return {
|
||||
success: false,
|
||||
message: "Failed fetch first pencegahan kriminalitas",
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -16,18 +16,21 @@ export default async function pencegahanKriminalitasFindMany(context: Context) {
|
||||
if (search) {
|
||||
where.OR = [
|
||||
{
|
||||
programKeamanan: {
|
||||
nama: { contains: search, mode: "insensitive" as const },
|
||||
judul: {
|
||||
contains: search,
|
||||
mode: "insensitive" as const,
|
||||
},
|
||||
},
|
||||
{
|
||||
tipsKeamanan: {
|
||||
judul: { contains: search, mode: "insensitive" as const },
|
||||
deskripsi: {
|
||||
contains: search,
|
||||
mode: "insensitive" as const,
|
||||
},
|
||||
},
|
||||
{
|
||||
videoKeamanan: {
|
||||
judul: { contains: search, mode: "insensitive" as const },
|
||||
deskripsiSingkat: {
|
||||
contains: search,
|
||||
mode: "insensitive" as const,
|
||||
},
|
||||
},
|
||||
];
|
||||
@@ -36,11 +39,6 @@ export default async function pencegahanKriminalitasFindMany(context: Context) {
|
||||
const [data, total] = await Promise.all([
|
||||
prisma.pencegahanKriminalitas.findMany({
|
||||
where,
|
||||
include: {
|
||||
programKeamanan: true,
|
||||
tipsKeamanan: true,
|
||||
videoKeamanan: true,
|
||||
},
|
||||
skip,
|
||||
take: limit,
|
||||
orderBy: { createdAt: "desc" },
|
||||
|
||||
@@ -22,11 +22,6 @@ export default async function pencegahanKriminalitasFindUnique(request: Request)
|
||||
|
||||
const data = await prisma.pencegahanKriminalitas.findUnique({
|
||||
where: {id},
|
||||
include: {
|
||||
programKeamanan: true,
|
||||
tipsKeamanan: true,
|
||||
videoKeamanan: true,
|
||||
}
|
||||
})
|
||||
|
||||
if (!data) {
|
||||
|
||||
@@ -4,6 +4,7 @@ import pencegahanKriminalitasFindUnique from "./findUnique";
|
||||
import pencegahanKriminalitasFindMany from "./findMany";
|
||||
import pencegahanKriminalitasDelete from "./del";
|
||||
import pencegahanKriminalitasUpdate from "./updt";
|
||||
import pencegahanKriminalitasFindFirst from "./findFirst";
|
||||
|
||||
const PencegahanKriminalitas = new Elysia({
|
||||
prefix: "pencegahankriminalitas",
|
||||
@@ -11,22 +12,10 @@ const PencegahanKriminalitas = new Elysia({
|
||||
})
|
||||
.post("/create", pencegahanKriminalitasCreate, {
|
||||
body: t.Object({
|
||||
programKeamanan: t.Object({
|
||||
nama: t.String(),
|
||||
deskripsi: t.String(),
|
||||
slug: t.String(),
|
||||
}),
|
||||
tipsKeamanan: t.Object({
|
||||
judul: t.String(),
|
||||
konten: t.String(),
|
||||
slug: t.String(),
|
||||
}),
|
||||
videoKeamanan: t.Object({
|
||||
judul: t.String(),
|
||||
deskripsi: t.String(),
|
||||
videoUrl: t.String(),
|
||||
slug: t.String(),
|
||||
}),
|
||||
judul: t.String(),
|
||||
deskripsi: t.String(),
|
||||
deskripsiSingkat: t.String(),
|
||||
linkVideo: t.String(),
|
||||
}),
|
||||
})
|
||||
.get("/find-many", pencegahanKriminalitasFindMany)
|
||||
@@ -36,31 +25,20 @@ const PencegahanKriminalitas = new Elysia({
|
||||
);
|
||||
return response;
|
||||
})
|
||||
.get("/find-first", pencegahanKriminalitasFindFirst)
|
||||
.delete("/del/:id", pencegahanKriminalitasDelete)
|
||||
.put(
|
||||
":/id",
|
||||
"/:id",
|
||||
async (context) => {
|
||||
const response = await pencegahanKriminalitasUpdate(context);
|
||||
return response;
|
||||
},
|
||||
{
|
||||
body: t.Object({
|
||||
programKeamanan: t.Object({
|
||||
nama: t.String(),
|
||||
deskripsi: t.String(),
|
||||
slug: t.String(),
|
||||
}),
|
||||
tipsKeamanan: t.Object({
|
||||
judul: t.String(),
|
||||
konten: t.String(),
|
||||
slug: t.String(),
|
||||
}),
|
||||
videoKeamanan: t.Object({
|
||||
judul: t.String(),
|
||||
deskripsi: t.String(),
|
||||
videoUrl: t.String(),
|
||||
slug: t.String(),
|
||||
}),
|
||||
judul: t.String(),
|
||||
deskripsi: t.String(),
|
||||
deskripsiSingkat: t.String(),
|
||||
linkVideo: t.String(),
|
||||
}),
|
||||
}
|
||||
);
|
||||
|
||||
@@ -3,110 +3,91 @@ import { Prisma } from "@prisma/client";
|
||||
import { Context } from "elysia";
|
||||
|
||||
type FormUpdate = Prisma.PencegahanKriminalitasGetPayload<{
|
||||
select: {
|
||||
id: true;
|
||||
programKeamanan: true;
|
||||
tipsKeamanan: true;
|
||||
videoKeamanan: true;
|
||||
}
|
||||
}>
|
||||
select: {
|
||||
id: true;
|
||||
judul: true;
|
||||
deskripsi: true;
|
||||
deskripsiSingkat: true;
|
||||
linkVideo: true;
|
||||
};
|
||||
}>;
|
||||
export default async function pencegahanKriminalitasUpdate(context: Context) {
|
||||
try {
|
||||
const id = context.params?.id as string;
|
||||
const body = (await context.body) as Omit<FormUpdate, "id">;
|
||||
try {
|
||||
const id = context.params?.id as string;
|
||||
const body = (await context.body) as Omit<FormUpdate, "id">;
|
||||
|
||||
const {programKeamanan, tipsKeamanan, videoKeamanan} = body;
|
||||
const { judul, deskripsi, deskripsiSingkat, linkVideo } = body;
|
||||
|
||||
if (!id) {
|
||||
return new Response(JSON.stringify({
|
||||
success: false,
|
||||
message: "ID tidak diberikan",
|
||||
}), {
|
||||
status: 400,
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
},
|
||||
});
|
||||
if (!id) {
|
||||
return new Response(
|
||||
JSON.stringify({
|
||||
success: false,
|
||||
message: "ID tidak diberikan",
|
||||
}),
|
||||
{
|
||||
status: 400,
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
},
|
||||
}
|
||||
|
||||
const existing = await prisma.pencegahanKriminalitas.findUnique({
|
||||
where: { id },
|
||||
include: {
|
||||
programKeamanan: true,
|
||||
tipsKeamanan: true,
|
||||
videoKeamanan: true,
|
||||
}
|
||||
});
|
||||
|
||||
if (!existing) {
|
||||
return new Response(JSON.stringify({
|
||||
success: false,
|
||||
message: "Pencegahan kriminalitas tidak ditemukan",
|
||||
}), {
|
||||
status: 404,
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
await prisma.programKeamanan.update({
|
||||
where: {id: existing.programKeamananId},
|
||||
data: {
|
||||
nama: programKeamanan.nama,
|
||||
deskripsi: programKeamanan.deskripsi,
|
||||
slug: programKeamanan.slug,
|
||||
}
|
||||
});
|
||||
|
||||
await prisma.tipsKeamanan.update({
|
||||
where: {id: existing.tipsKeamananId},
|
||||
data: {
|
||||
judul: tipsKeamanan.judul,
|
||||
konten: tipsKeamanan.konten,
|
||||
slug: tipsKeamanan.slug,
|
||||
}
|
||||
});
|
||||
|
||||
await prisma.videoKeamanan.update({
|
||||
where: {id: existing.videoKeamananId},
|
||||
data: {
|
||||
judul: videoKeamanan.judul,
|
||||
deskripsi: videoKeamanan.deskripsi,
|
||||
videoUrl: videoKeamanan.videoUrl,
|
||||
slug: videoKeamanan.slug,
|
||||
}
|
||||
});
|
||||
|
||||
const updated = await prisma.pencegahanKriminalitas.update({
|
||||
where: { id },
|
||||
data: {
|
||||
programKeamananId: programKeamanan.id,
|
||||
tipsKeamananId: tipsKeamanan.id,
|
||||
videoKeamananId: videoKeamanan.id,
|
||||
}
|
||||
});
|
||||
|
||||
return new Response(JSON.stringify({
|
||||
success: true,
|
||||
message: "Success update pencegahan kriminalitas",
|
||||
data: updated,
|
||||
}), {
|
||||
status: 200,
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
},
|
||||
});
|
||||
} catch (error) {
|
||||
console.error("Update error:", error);
|
||||
return new Response(JSON.stringify({
|
||||
success: false,
|
||||
message: "Failed update pencegahan kriminalitas",
|
||||
}), {
|
||||
status: 500,
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
},
|
||||
});
|
||||
);
|
||||
}
|
||||
|
||||
const existing = await prisma.pencegahanKriminalitas.findUnique({
|
||||
where: { id },
|
||||
});
|
||||
|
||||
if (!existing) {
|
||||
return new Response(
|
||||
JSON.stringify({
|
||||
success: false,
|
||||
message: "Pencegahan kriminalitas tidak ditemukan",
|
||||
}),
|
||||
{
|
||||
status: 404,
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
},
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
const updated = await prisma.pencegahanKriminalitas.update({
|
||||
where: { id },
|
||||
data: {
|
||||
judul,
|
||||
deskripsi,
|
||||
deskripsiSingkat,
|
||||
linkVideo,
|
||||
},
|
||||
});
|
||||
|
||||
return new Response(
|
||||
JSON.stringify({
|
||||
success: true,
|
||||
message: "Success update pencegahan kriminalitas",
|
||||
data: updated,
|
||||
}),
|
||||
{
|
||||
status: 200,
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
},
|
||||
}
|
||||
);
|
||||
} catch (error) {
|
||||
console.error("Update error:", error);
|
||||
return new Response(
|
||||
JSON.stringify({
|
||||
success: false,
|
||||
message: "Failed update pencegahan kriminalitas",
|
||||
}),
|
||||
{
|
||||
status: 500,
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
},
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user