FITUR TAMBAH LAYANAN DARI API - IVMEDIASMM LARAVEL
===================================================

Fungsi fitur
------------
1. Admin memilih provider yang sudah memiliki konfigurasi API Service.
2. Sistem mengambil daftar layanan provider dan membuat daftar kategori.
3. Admin memilih mata uang IDR atau USD. Untuk USD, admin mengisi kurs ke rupiah.
4. Sistem hanya menampilkan layanan dari kategori yang dipilih dan memakai pagination.
5. Tombol Tambah membuka form layanan yang sudah terisi dari data provider.
6. Admin dapat mengubah kategori lokal, nama, deskripsi, harga dasar, keuntungan,
   min, max, tipe, refill, rata-rata waktu, dan status.
7. Harga jual yang disimpan adalah harga dasar setelah kurs + keuntungan.
8. Data disimpan ke tabel smm. Kategori lokal yang sudah ada digunakan kembali; kategori baru dibuat hanya bila belum tersedia.
9. Layanan yang sudah tersimpan menampilkan tombol Detail dan Edit.
10. Hasil penyimpanan ditampilkan langsung di modal. Jika validasi atau sesi gagal,
    tombol Simpan otomatis aktif kembali dan pesan kesalahan ditampilkan.

Lokasi menu
-----------
Admin > Layanan > Tambah dari API

URL langsung
------------
/admin/layanan/service-api

Pemasangan
----------
1. Backup script dan database hosting.
2. Extract ZIP di folder utama Laravel, yaitu folder yang memiliki file artisan.
3. Pertahankan file .env milik hosting. Paket ZIP tidak membawa file .env.
4. Jalankan perintah berikut:

   php artisan optimize:clear
   composer dump-autoload -o
   php artisan migrate --force
   php artisan config:cache
   php artisan view:cache

IVMEDIASMM v6.2 menambahkan migration smm.via_api. Perintah migrate wajib dijalankan
agar mode API/manual dapat disimpan per layanan.

Catatan provider JAP
--------------------
- Endpoint: https://justanotherpanel.com/api/v2
- Method: POST
- Parameter: key = API key provider, action = services
- RESPONSE DATA SERVICE dikosongkan karena respons services berada di root JSON.
- Katalog 5.802+ layanan tidak dirender sekaligus. Data provider disimpan di cache
  selama 15 menit dan hasil kategori dipaginasi 10/25/50/100 baris.
- Tombol refresh di samping provider mengambil ulang data terbaru dari provider.
- Lama cache dapat diubah melalui .env, misalnya:
  API_SERVICE_CATALOG_CACHE_MINUTES=15

Struktur Laravel yang digunakan
-------------------------------
- Provider dan kredensial: tabel providers, kolom json
- Konfigurasi pemanggilan layanan: api_services dan api_service_params
- Layanan website: tabel smm
- Mapping kategori layanan: tabel categories

Field CI3 yang tidak dibuat sebagai kolom baru
----------------------------------------------
- api_id dipetakan ke provider Laravel dan api_services.provider_id.
- api_service_id dipetakan ke smm.service.
- api/pesan via API mengikuti smm.via_api per layanan dan providers.proses_manual sebagai pengaturan global provider.
- profit dihitung saat penyimpanan lalu digabung ke smm.price sebagai harga jual.

Dengan pemetaan tersebut, proses order Laravel yang sudah ada tetap dapat memakai
provider, service ID, endpoint order, API key, provider ID, dan provider secret.

Perbaikan submit 04 Agustus 2026
--------------------------------
- Memperbaiki tombol Simpan yang menjadi nonaktif tanpa mengirim request.
- Memperbaiki posisi kotak pesan hasil agar berada di dalam form.
- Menampilkan pesan validasi, sesi kedaluwarsa (HTTP 419), dan respons server gagal.
- Tombol Simpan otomatis aktif kembali jika penyimpanan gagal.

Pembaruan IVMEDIASMM v6.2
-------------------------
- Kategori lokal yang sudah ada digunakan kembali; sistem tidak membuat kategori
  duplikat hanya karena layanan baru memakai kategori yang sama.
- Jika kategori lokal belum tersedia, baris categories baru dibuat otomatis.
- Kotak "Pesan via API provider" aktif secara default dan sekarang dapat diubah.
- Hapus centang untuk menjadikan layanan tersebut pesanan manual.
- Pengaturan tersimpan pada smm.via_api dan dapat diubah dari Edit Layanan.
- Website existing wajib menjalankan migration atau mengimpor
  UPDATE-DATABASE-IVMEDIASMM-v6.2.sql sebelum memakai fitur ini.
