# Coding Standards

## PHP

- gunakan PHP 8.2+;
- gunakan strict typing bila memungkinkan;
- gunakan namespace;
- gunakan PSR-4;
- satu class per file;
- method pendek dan fokus;
- hindari global state;
- gunakan type hint;
- gunakan exception untuk kegagalan yang valid.

## Naming

- class: `PascalCase`;
- method dan variabel: `camelCase`;
- konstanta: `UPPER_SNAKE_CASE`;
- tabel database: `snake_case`;
- route: lowercase dan kebab-case.

## Controller

Controller hanya:

- menerima request;
- memanggil service;
- memilih response atau view.

Controller tidak boleh berisi query kompleks.

## Service

Service menangani:

- alur bisnis;
- perubahan status;
- transaksi;
- notifikasi;
- audit.

## Database

- gunakan PDO;
- gunakan prepared statement;
- jangan gabungkan input pengguna ke SQL;
- gunakan transaksi untuk perubahan multi-tabel;
- tambahkan indeks sesuai kebutuhan.

## View

- escape semua output;
- jangan menjalankan query;
- jangan menaruh logika bisnis;
- gunakan komponen dan layout konsisten.

## Keamanan

- `.env` tidak masuk Git;
- password menggunakan hashing modern;
- gunakan CSRF pada form perubahan data;
- validasi backend wajib;
- verifikasi MIME dan ukuran upload;
- periksa hak akses di setiap endpoint;
- jangan hanya menyembunyikan tombol.

## Dokumentasi

Setiap fase harus memperbarui:

```text
docs/06-STATUS-PROJECT.md
```
