# Ringkasan Perbaikan & Panduan Setup — Desa Kadumbul

## 1. Langkah Setup (WAJIB dijalankan setelah extract)

```bash
composer install
cp .env.example .env   # jika belum ada .env
php artisan key:generate
php artisan migrate:fresh --seed
php artisan storage:link
php artisan serve
```

Login admin (Sekretaris) default (dari `UserSeeder`):
- **Username:** `admin`
- **Password:** `password123`

> Karena tabel-tabel kustom (berita, pemerintahan, pengumuman, dll) belum pernah
> benar-benar di-migrate di project asal, saya sarankan `migrate:fresh` (bukan `migrate`)
> supaya semua tabel dibuat ulang sesuai skema migration yang sudah diperbaiki.
> Jika sudah ada data penting di database, backup dulu sebelum menjalankan `migrate:fresh`.

## 2. Apa saja yang diperbaiki

### Routing
`routes/web.php` sebelumnya **tidak memiliki route CRUD sama sekali** untuk panel
admin — semua controller CRUD sudah ada tapi tidak pernah dihubungkan. Sekarang
setiap modul punya resource route penuh di bawah prefix `/dashboard`, dilindungi
middleware `auth` + `role:sekretaris`:

- `dashboard.berita.*`
- `dashboard.pemerintahan.*`
- `dashboard.pengumuman.*`
- `dashboard.potensi.*`
- `dashboard.galeri.*`
- `dashboard.layanan.*`
- `dashboard.statistik.*`
- `dashboard.penduduk.*`
- `dashboard.kontak.index/show/destroy` (kotak masuk, tanpa create — pesan datang dari form publik)
- `dashboard.profil.index/update` (form tunggal, karena profil desa hanya 1 baris data)

### Middleware
`RoleMiddleware` sudah dibuat sebelumnya tapi belum didaftarkan aliasnya di
`bootstrap/app.php`. Sekarang sudah didaftarkan sebagai `role`.

### Model & Migration (banyak mismatch nama tabel/kolom sudah diselaraskan)
- `Berita` → tabel `beritas` (sebelumnya model menunjuk ke `berita`, migration `beritas` — mismatch). Tambah kolom `ringkasan`, `penulis`, `tanggal_publish`, `status`, `views`.
- `Pemerintahan` → tabel `pemerintahans` (sebelumnya model menunjuk `pemerintahan` tanpa "s"). Tambah kolom `niap`, `status`.
- `Pengumuman` → tambah kolom `slug`; standarisasi 1 kolom isi (`isi`), bukan 2 kolom yang tumpang tindih.
- `PotensiDesa` → tambah kolom `status`.
- `Galeri` → skema kolom dirombak total supaya cocok dengan model & controller (`judul`, `kategori`, `gambar`, `keterangan`, `status`).
- `Layanan` → tambah kolom `status`.
- `users` → migration baru menambah kolom `nik`, `jenis_kelamin`, `pekerjaan`, `alamat` untuk fitur Data Penduduk.
- Accessor URL gambar (`getGambarUrlAttribute`, dll) diperbaiki — sebelumnya path-nya dobel folder sehingga gambar tidak akan pernah tampil.

### Controller
Semua controller berikut ditulis ulang dengan validasi, penyimpanan file lewat
`Storage` (folder `storage/app/public/...`, jadi jalankan `storage:link`), dan
route model binding:
`BeritaController`, `PemerintahanController`, `PengumumanController`,
`PotensiController`, `GaleriController`, `LayananController`, `KontakController`,
`ProfilDesaController`, `StatistikController` (baru), `PendudukController` (baru),
`DashboardController` (sekarang jadi halaman ringkasan sungguhan, bukan halaman
kelola pengumuman yang salah taruh).

### Halaman Publik
- Form kontak (`/kontak`) sebelumnya `action="#"` (tidak pernah mengirim data) — sekarang benar-benar tersimpan ke tabel `kontak` dan muncul di kotak masuk admin.
- Halaman profil desa sebelumnya 100% teks statis (hardcode) — sekarang sejarah/visi/misi serta rekap demografi & statistik per wilayah diambil dari database dan otomatis ter-update begitu admin mengubahnya lewat dashboard.
- Galeri publik memakai nama kolom yang salah (`foto` padahal kolom aslinya `gambar`) — sudah diperbaiki.
- Berita publik: nama field `konten` yang tidak ada di model diganti `isi`, nama route disamakan dengan `routes/web.php` yang baru.

### View Admin (CRUD)
Dibuatkan `index`, `create`, `edit` (dan `show` untuk kontak) untuk **setiap
modul** di atas, semuanya pakai layout `layouts.dashboard` yang sudah ada supaya
konsisten dengan sidebar.

## 3. Yang sengaja TIDAK disentuh

Beberapa file terlihat sisa scaffolding dari project/tutorial lain dan tidak
dipakai di manapun dalam aplikasi desa ini, jadi saya biarkan apa adanya
(tidak dihapus, tapi juga tidak diberi CRUD) karena berada di luar konteks
"desa Kadumbul":
- Tabel/Model `products`, `categories`, `Courses`, `Lecturer`
- Controller `DesaController`, `HomeController`, `BlogController`, `LecturerController`
- Model duplikat: `Profil`, `Profil_Desa`, `Perangkat` (fungsinya sudah digantikan `ProfilModel` dan `Pemerintahan`)
- `AuthController.php` (root) dan `Auth/LoginController.php`, `Auth/RegisterController.php` — duplikat dari `Auth/AuthController.php` yang sudah dipakai di routing
- `app/Http/Controllers/dashboard/ProfilController.php` dan `resources/views/layouts/sidebar.blade.php` — versi lama yang sudah digantikan versi baru

Beri tahu saya kalau modul-modul ini ternyata memang perlu diaktifkan/CRUD juga.

## 4. Belum bisa saya uji langsung

Sandbox saya tidak memiliki PHP/Composer, jadi semua perbaikan di atas saya
kerjakan lewat pembacaan kode secara manual (bukan menjalankan `php artisan
serve`/`migrate`). Mohon jalankan langkah di bagian 1, lalu kabari saya kalau
ada error yang muncul — saya bisa bantu debug lebih lanjut dari pesan errornya.
