Skip to content

Feat/gunakan api untuk berita desa gabungan#1649

Open
pandigresik wants to merge 3 commits into
rilis-devfrom
feat/gunakan_api_untuk_berita_desa_gabungan
Open

Feat/gunakan api untuk berita desa gabungan#1649
pandigresik wants to merge 3 commits into
rilis-devfrom
feat/gunakan_api_untuk_berita_desa_gabungan

Conversation

@pandigresik

Copy link
Copy Markdown
Contributor

Pull Request: feat: Ubah berita desa dari RSS ke API Database Gabungan

Description

Halaman berita desa saat ini mengambil data dari RSS feed setiap website desa secara server-side menggunakan SimplePie. PR ini mengubah pengambilan data menjadi client-side API yang mengambil dari database gabungan, hanya berlaku ketika sinkronisasi database gabungan aktif. Jika tidak aktif, tetap menggunakan RSS seperti sebelumnya.

Changes made:

  1. Feature: PageController@beritaDesa() — menambahkan pengecekan isDatabaseGabungan(). Jika aktif, mengarahkan ke view desa_api dengan apiBase URL ke database gabungan API. Jika tidak aktif, tetap menggunakan RSS.
  2. New File: themes/opendk/default/resources/views/pages/berita/desa_api.blade.php — view baru untuk mode API, mengambil data dari database gabungan secara client-side menggunakan $.getJSON(), dengan filter desa, pencarian, sort tanggal, dan pagination.
  3. Code Style: Cleanup import, whitespace, dan format di PageController.php dan routes/web.php.

Reason for change:

  • Point 1: RSS feed membutuhkan request ke setiap website desa secara individual, sangat lambat dan sering timeout.
  • Point 2: Database gabungan menyediakan artikel dari semua desa dalam satu API call, lebih efisien.
  • Point 3: Dengan adanya filter kode_kecamatan, data hanya mengambil artikel dari kecamatan yang sesuai.

Impact of change:

Performance: Pengambilan data lebih cepat karena satu API call menggantikan banyak RSS request
Konsistensi: Mengikuti pola yang sama dengan halaman berita kecamatan (client-side API fetching)
Backward Compatible: Jika database gabungan tidak aktif, tetap menggunakan RSS seperti sebelumnya

Related Issue

Steps to Reproduce

Before fix (RSS mode):

  1. Buka halaman /berita-desa
  2. Server melakukan request RSS ke setiap website desa
  3. Proses sangat lambat, timeout sering terjadi
  4. ❌ Loading lama, banyak error

After fix (API mode, database gabungan aktif):

  1. Buka halaman /berita-desa
  2. Browser melakukan AJAX request ke database gabungan API dengan filter kode_kecamatan
  3. Data ditampilkan dengan filter, pencarian, dan pagination
  4. ✅ Loading cepat, data terpusat

After fix (database gabungan tidak aktif):

  1. Buka halaman /berita-desa
  2. Tetap menggunakan RSS seperti sebelumnya
  3. ✅ Tidak ada perubahan perilaku

Checklist

  • Sesuai dengan aturan penulisan script
  • Manual testing dilakukan di development environment
  • Tidak ada console errors
  • backward compatible (RSS tetap berfungsi)

Technical Details

Technical Explanation

Pada PageController@beritaDesa(), ditambahkan pengecekan $this->isDatabaseGabungan() (yang mengecek setting sinkronisasi_database_gabungan). Jika aktif:

  1. Controller membangun apiBase URL ke database gabungan API ({api_server}/api/v1/artikel-kecamatan) dengan parameter filter:

    • kode_kecamatan — diambil dari config('profil.kecamatan_id') tanpa titik
    • filter[enabled] = 1
    • page[size] dari config artikel_desa_perhalaman
    • sort = -tgl_upload
  2. View desa_api.blade.php menerima apiBase URL dan melakukan fetch secara client-side menggunakan $.getJSON().

  3. JavaScript meng-handle filter (desa, pencarian, sort) dengan menambahkan query parameter ke API URL.

Flow Chart

Browser → GET /berita-desa
  ├─ database gabungan aktif?
  │   ├─ Ya → render desa_api.blade.php (apiBase = database gabungan API)
  │   │         → JS fetch dari API dengan filter kode_kecamatan
  │   │         → Render artikel dari JSON response
  │   └─ Tidak → render desa.blade.php (server-side RSS)
  │               → SimplePie fetch dari setiap website desa
  │               → Render artikel dari RSS items

Dependencies

https://github.com/OpenSID/API-Database-Gabungan/pull/444

Testing

Manual Testing

  • Buka /berita-desa dengan database gabungan aktif — data loaded dari API
  • Filter desa berfungsi
  • Pencarian berfungsi
  • Sort tanggal (terbaru/terlama) berfungsi
  • Pagination berfungsi
  • Buka /berita-desa dengan database gabungan tidak aktif — tetap menggunakan RSS
  • Tidak ada console error

Screenshots / Video

simplescreenrecorder-2026-07-13_10.42.40.mp4

Before (RSS Mode):

Loading lama karena fetch RSS dari banyak website desa

After (API Mode):

Loading cepat karena satu API call ke database gabungan

Breaking Changes

None — backward compatible. Jika database gabungan tidak aktif, tetap menggunakan RSS.

Migration Guide

Not required.

References


Catatan Penting: Gambar artikel dari website desa yang menggunakan Cloudflare kemungkinan tidak tampil karena diblok oleh Cloudflare (header cross-origin-resource-policy: same-origin dan cross-origin-embedder-policy: require-corp). Ini adalah limitasi dari sisi server desa, bukan dari kode ini. Gambar fallback akan ditampilkan jika gambar tidak dapat dimuat.

@pandigresik pandigresik requested a review from vickyrolanda July 13, 2026 03:53
@github-actions

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 #1649

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