# KoperasiMart POS API (PHP + MariaDB + Apache2)

Base URL:
- Jika kamu **sudah pasang Alias/DocumentRoot ke folder `public/`**: `https://ai.sapda.id/koperasimart/api`
- Jika **belum bisa Alias** (sementara path publik masih `/.../api/public/...`): `https://ai.sapda.id/koperasimart/api/public`

## 1) Install
1. Copy folder `backend_php` ke server, misalnya:
   - `/var/www/ai.sapda.id/koperasimart/api`

2. Pastikan Apache enable rewrite:
   - `a2enmod rewrite && systemctl reload apache2`

3. Buat vhost/alias supaya DocumentRoot menunjuk ke folder `public/`.

   Contoh (snippet):
   ```
   Alias /koperasimart/api /var/www/ai.sapda.id/koperasimart/api/public
   <Directory /var/www/ai.sapda.id/koperasimart/api/public>
       AllowOverride All
       Require all granted
   </Directory>
   ```

4. Buat `.env` (copy dari `.env.example`) di folder `backend_php/` (sejajar `public/` dan `src/`).

5. Jalankan SQL migrasi:
   - buka phpMyAdmin -> DB `inventory` -> import `sql/install_pos_tables.sql`

## 2) Endpoint utama
- `GET /health`
- `GET /outlets`  (auth)
- `GET /items/search?q=...` (auth)
- `GET /items/by_barcode?b=...` (auth)
- `GET /items/by_kb?kb=...` (auth)

Kasir:
- `POST /pos/sale/commit-cash` (auth)
- `POST /pos/sale/create-payment` (auth)  -> Smartlink QRIS/VA/OVO (online)
- `GET /pos/sale/status?client_txn_id=...` (auth)

Callback Smartlink:
- `POST /payment/smartlink/callback`

## 3) Auth
Kirim salah satu header:
- `Authorization: Bearer <POS_API_KEY>`
atau
- `X-Api-Key: <POS_API_KEY>`

Jika `POS_API_KEY` kosong, API mode dev (tanpa auth).

## 4) Contoh request (curl)
Commit cash:
```
curl -sS https://ai.sapda.id/koperasimart/api/public/pos/sale/commit-cash \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer CHANGE_ME' \
  -d '{
    "outlet_id":1,
    "kassa":1,
    "kasir":"andi",
    "dibayar":100000,
    "items":[{"kb":"000123","qty":2},{"kb":"000999","qty":1,"price":15000}]
  }' | jq .
```

Create Smartlink (QRIS):
```
curl -sS https://ai.sapda.id/koperasimart/api/public/pos/sale/create-payment \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer CHANGE_ME' \
  -d '{
    "outlet_id":1,
    "kassa":1,
    "kasir":"andi",
    "channel":"WALLET_QRIS",
    "customer":{"name":"Budi","phone":"08123456789"},
    "items":[{"kb":"000123","qty":1}]
  }' | jq .
```

## 5) Catatan kolom harga (HB2/HPB2)
Di tabel `barang`, nilai beli bisa tersimpan di beberapa kolom (HB*, HPB*).  
POS ini memakai **HJ2** sebagai harga jual default (bisa dioverride per-item via payload `price`).
