Fix: Integrasi Artikel CMS OpenKab ke Widget Artikel Terbaru dan Halaman Publik Daftar Artikel - #1269
Merged
Merged
Conversation
|
🔄 AI PR Review sedang antri di server...
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
issue # #1268
🎯 Deskripsi
Pull request ini mengintegrasikan artikel yang dibuat melalui CMS OpenKab (
/cms/articles/ tabelarticles) ke dalam antarmuka publik, yaitu:/): Menampilkan gabungan artikel terbaru baik dari CMS lokal OpenKab maupun dari API upstream OpenSID secara otomatis dan terurut berdasarkan tanggal publikasi terbaru./artikel-opensid): Menampilkan daftar artikel gabungan lengkap dengan dukungan pencarian (search), penanda sumber artikel (badge OpenKab), dan paginasi (LengthAwarePaginator)./a/{slug}): Mempercantik antarmuka detail artikel CMS lokal agar konsisten dengan artikel publik (memiliki gambar utama, metadata kategori, tanggal rilis, dan tombol kembali ke daftar artikel).Sebelumnya, widget Beranda dan halaman daftar artikel hanya mengambil data dari API Database Gabungan (
API_DATABASE_GABUNGAN_HOST/api/v1/artikel/...), sehingga artikel lokal yang ditulis oleh pengelola CMS OpenKab tidak muncul pada halaman depan maupun daftar berita publik.Dengan PR ini, arsitektur data artikel di OpenKab telah disatukan pada layer
ArtikelServicedengan mekanisme caching dan cache invalidation otomatis, serta graceful fallback jika API upstream sedang tidak dapat diakses.🛠️ Perubahan yang Dilakukan
1.
app/Services/ArtikelService.phpFeature — Penyatuan Data Artikel Lokal CMS dan Upstream API:
getLocalArticles()untuk mengambil artikel CMS lokal yang aktif/terbit (state = 1danpublished_at <= now()) serta memetakan atributnya ke struktur objek standar (id,judul,isi,gambar,kategori_nama,tgl_upload,source,detail_url).getCombinedArticles()untuk menggabungkan artikel lokal dan artikel upstream API dengan pengurutan berdasarkan tanggal terbaru (tgl_uploaddescending).getArtikelTerbaru(int $limit = 6)untuk menyuplai data widget beranda.2.
routes/web.php&app/Http/Controllers/Web/ArtikelController.phpFeature & Fix — Endpoint JSON Artikel Terbaru, Paginasi Gabungan, dan Fallback Detail:
Route::get('artikel/terbaru', [ArtikelController::class, 'terbaru'])->name('web.artikel.terbaru').ArtikelController::index()untuk merender data gabungan dengan paginasi Laravel (LengthAwarePaginator).ArtikelController::terbaru()yang mengembalikan JSON data artikel terbaru untuk kebutuhan AJAX widget beranda.ArtikelController::show($id)dengan fallback redirect keroute('article', $localArticle->slug)jika$idyang diakses adalah ID/slug artikel CMS lokal.+ Route::get('artikel/terbaru', [ArtikelController::class, 'terbaru'])->name('web.artikel.terbaru');3.
app/Http/Controllers/CMS/ArticleController.phpFix — Cache Invalidation Otomatis:
(new ArtikelService)->clearAllCache()saat artikel CMS disimpan (store), diperbarui (update), atau dihapus (destroy) agar data di frontend langsung terbarui tanpa menunggu kedaluwarsa TTL cache.4.
resources/views/web/partials/artikel_terbaru.blade.phpRefactor — Mengarahkan Permintaan AJAX ke Endpoint Internal:
route('web.artikel.terbaru').detail_urlserta lencana sumber (OpenKab).5.
resources/views/web/artikel/index.blade.php&resources/views/web/article.blade.phpUI/UX — Navigasi Dinamis, Lencana Sumber, dan Tampilan Detail:
$article->detail_urlpada tombol "Selengkapnya" pada daftar artikel (web.artikel.index).<span class="badge bg-success">OpenKab</span>untuk memudahkan identifikasi artikel CMS.$articles->links('pagination::bootstrap-5')).web.article) dengan gambar utama, metadata kategori, tanggal rilis, dan tombol kembali ke daftar artikel.6.
tests/Feature/ArtikelWebTest.phpTest — Penambahan dan Pembaruan Test Suite Artikel Web:
web.artikel.index).OpenKab.web.artikel.terbaru).✅ Test Cases yang Diimplementasikan
/artikel-opensid)./)./a/{slug}untuk artikel OpenKab, dan/artikel-opensid/{id}untuk artikel OpenSID)./artikel-opensid?search=...dapat memfilter artikel CMS lokal dan artikel API.ArtikelWebTest.phplolos (pass) tanpa error.📸 Cara Menjalankan Uji Coba Manual
http://openkab.test/cms/articles) dan buat artikel baru dengan status Terbitkan.http://openkab.test/).http://openkab.test/artikel-opensid)./a/{slug}dengan tampilan lengkap beserta gambar dan metadata.🤖 Cara Menjalankan Uji Coba Otomatis (Automated Test)
Jalankan perintah berikut di terminal:
php artisan test tests/Feature/ArtikelWebTest.phpUntuk menjalankan seluruh pengujian terkait modul website dan CMS:
php artisan test tests/Feature/PageControllerWebsiteTest.php tests/Feature/ArticleControllerCmsTest.php tests/Feature/CategoryControllerCmsTest.php tests/Feature/XssPreventionTest.php📸 Screenshot atau Video