Skip to content

Fix: Bug pada Modul Potensi - #1719

Open
pandigresik wants to merge 1 commit into
rilis-devfrom
fix/modul_potensi
Open

Fix: Bug pada Modul Potensi#1719
pandigresik wants to merge 1 commit into
rilis-devfrom
fix/modul_potensi

Conversation

@pandigresik

Copy link
Copy Markdown
Contributor

Pull Request: Bug pada Modul Potensi

Description

Memperbaiki bug pada Modul Potensi di frontend website, di mana halaman potensi menampilkan error "Requested filter(s) tipe.slug are not allowed" karena filter tersebut belum terdaftar pada repository API. Selain itu, redirect link dari halaman index potensi mengarahkan ke URL yang salah (menggunakan slug yang tidak tersedia pada resource) sehingga tombol "Baca Selengkapnya" gagal menampilkan detail potensi.

Changes made:

  1. Bug Fix: Menambahkan AllowedFilter::exact('tipe.slug') pada PotensiApiRepository agar filter filter[tipe.slug] diterima oleh Spatie Query Builder
  2. Bug Fix: Mengubah parameter PotensiShow dari $slug menjadi $id di PageController sesuai dengan perubahan URL dan cara pengambilan data resource
  3. Bug Fix: Mengubah rute potensi.kategori.show dari '/potensi/{kategori}/{slug}' menjadi '/potensi/{kategori}/{id}' agar sesuai dengan parameter id yang digunakan untuk mengambil data
  4. Bug Fix: Memperbaiki link detail potensi di index.blade.php dengan menggunakan item.id (bukan potensi.slug) sebagai parameter URL
  5. Bug Fix: Mengubah query API di show.blade.php dari filter[slug] menjadi filter[id] agar sesuai dengan cara resource potensi diambil berdasarkan id
  6. Refactor: Menambahkan type hint parameter dan return type pada seluruh method PageController (mis. : View, : JsonResponse, : RedirectResponse, string $slug)
  7. Refactor: Memindahkan validasi kirimKomentar dan kirimBalasan dari inline $request->validate() ke class FormRequest terpisah (KirimKomentarRequest, KirimBalasanRequest)

Reason for change:

  • Bug: Filter filter[tipe.slug] di halaman index potensi ditolak oleh Spatie Query Builder karena tipe.slug belum terdaftar di allowedFilters, sehingga halaman gagal memuat data
  • Bug Detail: Halaman detail potensi (PotensiShow) mengambil data berdasarkan slug namun slug tidak tersedia/benar pada resource, padahal API hanya mendukung pencarian via filter[id]
  • Code Quality: Controller dipenuhi tipe yang tidak eksplisit dan validasi inline; pengubahan ke FormRequest + type hint meningkatkan kejelasan dan pemeliharaan kode

Impact of change:

Bug Fix: Halaman index potensi dapat memuat dan menampilkan data sesuai filter tipe
Bug Fix: Tombol "Baca Selengkapnya" mengarahkan ke URL yang benar dan halaman detail potensi menampilkan item yang sesuai
Code Quality: Kontroller lebih rapi dengan type hint, dan validasi dipindah ke FormRequest terpusat

Related Issue

#1718

Steps to Reproduce

Before fix (problem):

  1. Buka halaman index potensi (mis. [DOMAIN]/potensi/{kategori-slug})
  2. Halaman melakukan request ke API /potensi?filter[tipe.slug]=...&include=tipe
  3. Muncul error "Requested filter(s) tipe.slug are not allowed. Allowed filter(s) are ..."
  4. Data potensi tidak tampil meskipun data tersedia
  5. Klik tombol "Baca Selengkapnya" → URL salah → halaman detail tidak menampilkan item yang benar
  6. ❌ Data potensi tidak dapat ditampilkan / detail potensi broken

After fix (solution):

  1. Buka halaman index potensi (mis. [DOMAIN]/potensi/{kategori-slug})
  2. Halaman request ke API /potensi?filter[tipe.slug]=...&include=tipe
  3. Filter diterima oleh repository → data potensi tampil ✅
  4. Klik tombol "Baca Selengkapnya" → URL /potensi/{kategori}/{id} → detail ditampilkan
  5. Halaman detail potensi menampilkan item yang benar berdasarkan id
  6. ✅ Data potensi tampil dan detail berfungsi normal

Testing on related features:

  • Listing potensi berdasarkan kategori ✅
  • Detail potensi (show) ✅
  • Komentar artikel (regresi) ✅
  • Balasan komentar (regresi) ✅

Checklist

Technical Details

Technical Explanation

Bug 1 — Filter ditolak:

Halaman index potensi mengirim request:

/potensi?filter[tipe.slug]={slug}&include=tipe&page[number]={page}

Spatie Query Builder menolak filter[tipe.slug] karena key tersebut belum terdaftar pada allowedFilters di PotensiApiRepository. Solusinya menambahkan:

AllowedFilter::exact('tipe.slug'),

Bug 2 — Parameter URL salah:

Resource potensi tidak memiliki atribut slug yang digunakan oleh halaman index (potensi.slug). Link detail sebelumnya:

/potensi/{tipe.slug}/{potensi.slug}   // slug potensi tidak ada → URL broken

Diperbaiki menjadi berbasis id:

/potensi/{tipe.slug}/{item.id}

Bug 3 — Pencarian detail:

show.blade.php sebelumnya mengambil data dengan filter[slug] yang tidak valid. Karena data diambil berdasarkan item id dari list, query diubah menjadi filter[id].

Refactor:

  • PotensiShow(string $kategori, string $id) — parameter diubah dari $slug ke $id bersamaan dengan perubahan route {kategori}/{id}.
  • Seluruh method PageController diberi type hint parameter (string $slug) dan return type (View, JsonResponse, RedirectResponse).
  • Validasi kirimKomentar dan kirimBalasan dipindah dari $request->validate() inline ke KirimKomentarRequest dan KirimBalasanRequest (aturan tetap identik).

File changes detail

Baru:

  • app/Http/Requests/KirimKomentarRequest.php - FormRequest untuk validasi komentar artikel
  • app/Http/Requests/KirimBalasanRequest.php - FormRequest untuk validasi balasan komentar

Diubah:

  • app/Repositories/PotensiApiRepository.php - Tambah AllowedFilter::exact('tipe.slug')
  • app/Http/Controllers/FrontEnd/PageController.php - Type hint + return type, potensi show parameter $slug$id, pakai FormRequest
  • routes/web.php - Route potensi.kategori.show {slug}{id}
  • themes/opendk/default/resources/views/pages/potensi/index.blade.php - Link detail menggunakan item.id
  • themes/opendk/default/resources/views/pages/potensi/show.blade.php - Query filter[slug]filter[id]

Configuration changes

Tidak ada perubahan konfigurasi.

Dependencies added

No new dependencies

Testing

Manual Testing

  • Halaman index potensi menampilkan data sesuai kategori/tipe
  • Klik "Baca Selengkapnya" → detail potensi sesuai item yang dipilih
  • Regresi: komentar artikel dan balasan (validasi tetap bekerja dengan FormRequest)
  • Regresi: halaman beranda/berita tetap normal

Automated Testing

  • Unit Test - filter tipe.slug pada PotensiApiRepository
  • Integration Test - PotensiShow dan kirimKomentar / kirimBalasan

Screenshots / Video

simplescreenrecorder-2026-09-01_14.06.04.mp4

Before:

  • Error "Requested filter(s) tipe.slug are not allowed" pada halaman potensi
  • Tombol "Baca Selengkapnya" mengarah ke URL yang salah → halaman detail broken

After:

  • Halaman index potensi menampilkan data
  • Halaman detail potensi menampilkan item yang benar

Breaking Changes

None

Migration Guide

Not required

References


Additional notes: Perubahan utama difokuskan pada perbaikan alur detail potensi (dari slug ke id) dan penambahan filter tipe.slug. Refactor type hint dan FormRequest menyertai perubahan untuk meningkatkan kualitas kode. Disarankan untuk menambahkan test otomatis (unit/integration) pada PotensiApiRepository dan PageController sebagai follow-up.

@github-actions

github-actions Bot commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

🔄 AI PR Review sedang antri di server...

Proses review akan segera dimulai di background — hasil akan muncul sebagai komentar setelah selesai.
Powered by CrewAI · PR #1719

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant