diff --git a/prisma/migrations/20260225082505_deploy/migration.sql b/prisma/migrations/20260225082505_deploy/migration.sql new file mode 100644 index 00000000..ac4024a7 --- /dev/null +++ b/prisma/migrations/20260225082505_deploy/migration.sql @@ -0,0 +1,170 @@ +/* + Warnings: + + - You are about to alter the column `nama` on the `KategoriPotensi` table. The data in that column could be lost. The data in that column will be cast from `Text` to `VarChar(100)`. + - You are about to alter the column `name` on the `PotensiDesa` table. The data in that column could be lost. The data in that column will be cast from `Text` to `VarChar(255)`. + - You are about to alter the column `kategoriId` on the `PotensiDesa` table. The data in that column could be lost. The data in that column will be cast from `Text` to `VarChar(36)`. + - A unique constraint covering the columns `[nama]` on the table `KategoriPotensi` will be added. If there are existing duplicate values, this will fail. + - A unique constraint covering the columns `[name]` on the table `PotensiDesa` will be added. If there are existing duplicate values, this will fail. + - Made the column `kategoriId` on table `PotensiDesa` required. This step will fail if there are existing NULL values in that column. + +*/ +-- DropForeignKey +ALTER TABLE "DataPerpustakaan" DROP CONSTRAINT "DataPerpustakaan_imageId_fkey"; + +-- DropForeignKey +ALTER TABLE "DesaDigital" DROP CONSTRAINT "DesaDigital_imageId_fkey"; + +-- DropForeignKey +ALTER TABLE "InfoTekno" DROP CONSTRAINT "InfoTekno_imageId_fkey"; + +-- DropForeignKey +ALTER TABLE "KegiatanDesa" DROP CONSTRAINT "KegiatanDesa_imageId_fkey"; + +-- DropForeignKey +ALTER TABLE "PengaduanMasyarakat" DROP CONSTRAINT "PengaduanMasyarakat_imageId_fkey"; + +-- DropForeignKey +ALTER TABLE "PotensiDesa" DROP CONSTRAINT "PotensiDesa_kategoriId_fkey"; + +-- DropForeignKey +ALTER TABLE "ProfileDesaImage" DROP CONSTRAINT "ProfileDesaImage_imageId_fkey"; + +-- AlterTable +ALTER TABLE "CaraMemperolehInformasi" ALTER COLUMN "deletedAt" DROP NOT NULL, +ALTER COLUMN "deletedAt" DROP DEFAULT; + +-- AlterTable +ALTER TABLE "CaraMemperolehSalinanInformasi" ALTER COLUMN "deletedAt" DROP NOT NULL, +ALTER COLUMN "deletedAt" DROP DEFAULT; + +-- AlterTable +ALTER TABLE "DaftarInformasiPublik" ALTER COLUMN "deletedAt" DROP NOT NULL, +ALTER COLUMN "deletedAt" DROP DEFAULT; + +-- AlterTable +ALTER TABLE "DasarHukumPPID" ALTER COLUMN "deletedAt" DROP NOT NULL, +ALTER COLUMN "deletedAt" DROP DEFAULT; + +-- AlterTable +ALTER TABLE "DataPerpustakaan" ALTER COLUMN "imageId" DROP NOT NULL; + +-- AlterTable +ALTER TABLE "DesaDigital" ALTER COLUMN "imageId" DROP NOT NULL; + +-- AlterTable +ALTER TABLE "FormulirPermohonanKeberatan" ALTER COLUMN "deletedAt" DROP NOT NULL, +ALTER COLUMN "deletedAt" DROP DEFAULT; + +-- AlterTable +ALTER TABLE "InfoTekno" ALTER COLUMN "imageId" DROP NOT NULL; + +-- AlterTable +ALTER TABLE "JenisInformasiDiminta" ALTER COLUMN "deletedAt" DROP NOT NULL, +ALTER COLUMN "deletedAt" DROP DEFAULT; + +-- AlterTable +ALTER TABLE "JenisKelaminResponden" ALTER COLUMN "deletedAt" DROP NOT NULL, +ALTER COLUMN "deletedAt" DROP DEFAULT; + +-- AlterTable +ALTER TABLE "KategoriPotensi" ALTER COLUMN "nama" SET DATA TYPE VARCHAR(100), +ALTER COLUMN "deletedAt" DROP NOT NULL, +ALTER COLUMN "deletedAt" DROP DEFAULT; + +-- AlterTable +ALTER TABLE "KategoriPrestasiDesa" ALTER COLUMN "deletedAt" DROP NOT NULL, +ALTER COLUMN "deletedAt" DROP DEFAULT; + +-- AlterTable +ALTER TABLE "KegiatanDesa" ALTER COLUMN "imageId" DROP NOT NULL; + +-- AlterTable +ALTER TABLE "LambangDesa" ALTER COLUMN "deletedAt" DROP NOT NULL, +ALTER COLUMN "deletedAt" DROP DEFAULT; + +-- AlterTable +ALTER TABLE "MaskotDesa" ALTER COLUMN "deletedAt" DROP NOT NULL, +ALTER COLUMN "deletedAt" DROP DEFAULT; + +-- AlterTable +ALTER TABLE "PegawaiPPID" ADD COLUMN "deletedAt" TIMESTAMP(3); + +-- AlterTable +ALTER TABLE "PengaduanMasyarakat" ALTER COLUMN "imageId" DROP NOT NULL; + +-- AlterTable +ALTER TABLE "PermohonanInformasiPublik" ALTER COLUMN "deletedAt" DROP NOT NULL, +ALTER COLUMN "deletedAt" DROP DEFAULT; + +-- AlterTable +ALTER TABLE "PilihanRatingResponden" ALTER COLUMN "deletedAt" DROP NOT NULL, +ALTER COLUMN "deletedAt" DROP DEFAULT; + +-- AlterTable +ALTER TABLE "PosisiOrganisasiPPID" ADD COLUMN "deletedAt" TIMESTAMP(3); + +-- AlterTable +ALTER TABLE "PotensiDesa" ALTER COLUMN "name" SET DATA TYPE VARCHAR(255), +ALTER COLUMN "deletedAt" DROP NOT NULL, +ALTER COLUMN "deletedAt" DROP DEFAULT, +ALTER COLUMN "kategoriId" SET NOT NULL, +ALTER COLUMN "kategoriId" SET DATA TYPE VARCHAR(36); + +-- AlterTable +ALTER TABLE "PrestasiDesa" ALTER COLUMN "deletedAt" DROP NOT NULL, +ALTER COLUMN "deletedAt" DROP DEFAULT; + +-- AlterTable +ALTER TABLE "ProfileDesaImage" ALTER COLUMN "imageId" DROP NOT NULL; + +-- AlterTable +ALTER TABLE "ProfilePPID" ALTER COLUMN "deletedAt" DROP NOT NULL, +ALTER COLUMN "deletedAt" DROP DEFAULT; + +-- AlterTable +ALTER TABLE "Responden" ALTER COLUMN "deletedAt" DROP NOT NULL, +ALTER COLUMN "deletedAt" DROP DEFAULT; + +-- AlterTable +ALTER TABLE "SejarahDesa" ALTER COLUMN "deletedAt" DROP NOT NULL, +ALTER COLUMN "deletedAt" DROP DEFAULT; + +-- AlterTable +ALTER TABLE "UmurResponden" ALTER COLUMN "deletedAt" DROP NOT NULL, +ALTER COLUMN "deletedAt" DROP DEFAULT; + +-- AlterTable +ALTER TABLE "VisiMisiDesa" ALTER COLUMN "deletedAt" DROP NOT NULL, +ALTER COLUMN "deletedAt" DROP DEFAULT; + +-- AlterTable +ALTER TABLE "VisiMisiPPID" ALTER COLUMN "deletedAt" DROP NOT NULL, +ALTER COLUMN "deletedAt" DROP DEFAULT; + +-- CreateIndex +CREATE UNIQUE INDEX "KategoriPotensi_nama_key" ON "KategoriPotensi"("nama"); + +-- CreateIndex +CREATE UNIQUE INDEX "PotensiDesa_name_key" ON "PotensiDesa"("name"); + +-- AddForeignKey +ALTER TABLE "ProfileDesaImage" ADD CONSTRAINT "ProfileDesaImage_imageId_fkey" FOREIGN KEY ("imageId") REFERENCES "FileStorage"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "PotensiDesa" ADD CONSTRAINT "PotensiDesa_kategoriId_fkey" FOREIGN KEY ("kategoriId") REFERENCES "KategoriPotensi"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "DesaDigital" ADD CONSTRAINT "DesaDigital_imageId_fkey" FOREIGN KEY ("imageId") REFERENCES "FileStorage"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "InfoTekno" ADD CONSTRAINT "InfoTekno_imageId_fkey" FOREIGN KEY ("imageId") REFERENCES "FileStorage"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "PengaduanMasyarakat" ADD CONSTRAINT "PengaduanMasyarakat_imageId_fkey" FOREIGN KEY ("imageId") REFERENCES "FileStorage"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "KegiatanDesa" ADD CONSTRAINT "KegiatanDesa_imageId_fkey" FOREIGN KEY ("imageId") REFERENCES "FileStorage"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "DataPerpustakaan" ADD CONSTRAINT "DataPerpustakaan_imageId_fkey" FOREIGN KEY ("imageId") REFERENCES "FileStorage"("id") ON DELETE SET NULL ON UPDATE CASCADE; diff --git a/prisma/migrations/migration_lock.toml b/prisma/migrations/migration_lock.toml index 648c57fd..044d57cd 100644 --- a/prisma/migrations/migration_lock.toml +++ b/prisma/migrations/migration_lock.toml @@ -1,3 +1,3 @@ # Please do not edit this file manually # It should be added in your version-control system (e.g., Git) -provider = "postgresql" \ No newline at end of file +provider = "postgresql" diff --git a/src/app/admin/(dashboard)/desa/berita/kategori-berita/page.tsx b/src/app/admin/(dashboard)/desa/berita/kategori-berita/page.tsx index 82be57ec..5f6d7a78 100644 --- a/src/app/admin/(dashboard)/desa/berita/kategori-berita/page.tsx +++ b/src/app/admin/(dashboard)/desa/berita/kategori-berita/page.tsx @@ -160,7 +160,7 @@ function ListKategoriBerita({ search }: { search: string }) { )) ) : ( - + {/* ✅ Match column count (3 columns) */}
Tidak ada data kategori berita yang cocok diff --git a/src/app/admin/(dashboard)/desa/berita/list-berita/page.tsx b/src/app/admin/(dashboard)/desa/berita/list-berita/page.tsx index 97dc4d11..c36447f6 100644 --- a/src/app/admin/(dashboard)/desa/berita/list-berita/page.tsx +++ b/src/app/admin/(dashboard)/desa/berita/list-berita/page.tsx @@ -187,7 +187,7 @@ function ListBerita({ search }: { search: string }) { { - load(newPage, 10); + load(newPage, 10, debouncedSearch); // ✅ Include search parameter window.scrollTo({ top: 0, behavior: 'smooth' }); }} total={totalPages} diff --git a/src/app/api/[[...slugs]]/_lib/desa/berita/kategori-berita/del.ts b/src/app/api/[[...slugs]]/_lib/desa/berita/kategori-berita/del.ts index 6e4d94c4..7e24bc8e 100644 --- a/src/app/api/[[...slugs]]/_lib/desa/berita/kategori-berita/del.ts +++ b/src/app/api/[[...slugs]]/_lib/desa/berita/kategori-berita/del.ts @@ -2,15 +2,50 @@ import prisma from "@/lib/prisma"; import { Context } from "elysia"; export default async function kategoriBeritaDelete(context: Context) { - const id = context.params.id as string; + try { + const id = context.params?.id as string; - await prisma.kategoriBerita.delete({ - where: { id }, - }); + if (!id) { + return Response.json({ + success: false, + message: "ID tidak boleh kosong", + }, { status: 400 }); + } - return { - status: 200, - success: true, - message: "Sukses Menghapus kategori berita", - }; + // ✅ Cek apakah kategori masih digunakan oleh berita + const beritaCount = await prisma.berita.count({ + where: { + kategoriBeritaId: id, + isActive: true, + deletedAt: null, + }, + }); + + if (beritaCount > 0) { + return Response.json({ + success: false, + message: `Kategori tidak dapat dihapus karena masih digunakan oleh ${beritaCount} berita`, + }, { status: 400 }); + } + + // ✅ Soft delete (bukan hard delete) + await prisma.kategoriBerita.update({ + where: { id }, + data: { + deletedAt: new Date(), + isActive: false, + }, + }); + + return { + success: true, + message: "Kategori berita berhasil dihapus", + }; + } catch (error) { + console.error("Delete kategori error:", error); + return Response.json({ + success: false, + message: "Gagal menghapus kategori: " + (error instanceof Error ? error.message : 'Unknown error'), + }, { status: 500 }); + } } \ No newline at end of file