# Panduan Database Migration

## Prinsip

- Source code boleh di-Git.
- Database production tidak boleh diubah manual tanpa catatan.
- Setiap perubahan struktur tabel harus dibuat sebagai file `.sql` baru di `database/migrations/`.
- File lama di `database/migrations/legacy_sql/` hanya untuk arsip dan pemulihan.

## Format Nama File

Gunakan pola:

```text
YYYY_MM_DD_deskripsi_singkat.sql
```

Contoh:

```text
2026_06_20_add_shift_limits.sql
2026_06_20_create_mou_register.sql
2026_06_20_add_logbook_verification_index.sql
```

## Alur Aman

1. Buat migration di local.
2. Jalankan di database local.
3. Commit file SQL.
4. Deploy ke staging.
5. Jalankan `php scripts/migrate.php up` di staging.
6. Test modul terkait.
7. Backup database production.
8. Deploy production.
9. Jalankan `php scripts/migrate.php up` di production.

## Legacy SQL

Folder `legacy_sql` berisi SQL lama yang sebelumnya berada di folder `sql/`. Jangan jalankan semuanya di production kecuali yakin database belum pernah menerima perubahan tersebut.

Untuk production yang sudah jalan, gunakan:

```bash
php scripts/migrate.php mark-all --legacy
```

Ini menandai legacy SQL sebagai applied tanpa mengeksekusi ulang.
