# Analisa Konversi PakJhonLab

## Temuan Utama

Archive `PakJhonLabs Official - Sistem Membership.zip` ternyata **bukan Laravel**, melainkan aplikasi **Yii 1.x / PHP klasik**.

Tanda yang terlihat:
- struktur `protected/`, `controllers/`, `models/`, `views/`
- `Yii::app()` dan `CActiveRecord`
- schema MySQL lama untuk CRUD membership
- login demo/admin yang masih hardcoded di `UserIdentity.php`

## Ringkasan Fitur Lama

Source lama berisi modul CRUD untuk:
- `member`
- `workgroup`
- `program`
- `circle`
- `external_activity`
- `kepengurusan`
- `online_presence`
- tabel relasi:
  - `circle_membership`
  - `program_membership`
  - `workgroup_membership`
  - `external_activity_membership`

## Masalah Saat Dipindah ke Cloudflare

Ada beberapa hal yang tidak bisa dipakai langsung di Cloudflare Pages:
- PHP/Yii runtime tidak tersedia
- MySQL harus diganti ke D1 yang berbasis SQLite
- relasi FK di dump lama agak longgar, misalnya `leader` tidak selalu cocok dengan data member seed
- login hardcoded perlu dipindahkan ke tabel admin/session

## Keputusan Konversi

Saya ubah modelnya menjadi:
- **Cloudflare Pages** untuk static frontend
- **Cloudflare Worker** sebagai API
- **D1 database** untuk semua data membership

### Pemetaan Schema

| Source lama | Cloudflare versi baru |
|---|---|
| MySQL `INT AUTO_INCREMENT` | SQLite `INTEGER PRIMARY KEY AUTOINCREMENT` |
| `year(4)` | `INTEGER` |
| `enum('Biasa','Muda','Kehormatan')` | `TEXT CHECK(...)` |
| `tinyint(1)` | `INTEGER CHECK(0/1)` |
| `char(8)` | `TEXT` |
| login hardcoded `demo/admin` | tabel `admin_users` + `sessions` |

## Kenapa FK Tidak Dipaksa Keras

Schema sumber lama punya relasi yang bagus secara konsep, tapi seed datanya tidak selalu rapi untuk dipasang FK ketat di SQLite.

Supaya migrasi aman dan tetap bisa dipakai, saya memilih:
- menjaga relasi di aplikasi
- memakai lookup di worker/UI
- menyimpan data D1 dengan struktur yang kompatibel

## Hasil Konversi

Paket output yang saya siapkan berisi:
- `index.html` untuk landing/dashboard publik
- `admin/index.html` untuk panel admin
- `_worker.js` untuk API CRUD + auth
- `d1-schema.sql` untuk schema dan seed data
- panduan instalasi upload langsung

## Catatan Operasional

- login default tetap dibuat sederhana: `admin/admin` dan `demo/demo`
- data seed awal diambil dari dump asli agar ada contoh isi langsung
- karena ini Pages + D1, deploy-nya tidak butuh server PHP
