bale / frasasti
Penanganan aduan masuk (incoming complaints) untuk Bale
Requires
- php: ^8.3
- bale/api: *
- bale/core: *
- illuminate/contracts: ^11.0||^12.0||^13.0
- paparee/rakaca: *
Requires (Dev)
- laravel/pint: ^1.14
- nunomaduro/collision: ^8.8
- orchestra/testbench: ^11.0
- pestphp/pest: ^4.0
- pestphp/pest-plugin-arch: ^4.0
- pestphp/pest-plugin-laravel: ^4.0
Suggests
None
Provides
None
Conflicts
None
Replaces
None
This package is auto-updated.
Last update: 2026-10-09 01:11:42 UTC
README
Package fitur Aduan Masuk untuk ekosistem Bale. Menyediakan form aduan publik berbasis reCAPTCHA, panel operasional untuk admin/landlord, activity log, dan API read-only.
Package ini adalah extractor mandiri dari fitur Aduan yang sebelumnya berada di
paparee/rakaca. Tabel frasasti_* berada pada koneksi landlord (default),
bukan database tenant.
Kebutuhan
| Dependency | Alasan |
|---|---|
bale/core |
Auth, permission, komponen UI, Sanitize, layout, LogsActivity |
bale/api |
Base API controller, token scope, middleware bale.api |
paparee/rakaca |
Reuse layout landlord rakaca::layouts.app |
Instalasi
composer require bale/frasasti
Publish migration & jalankan:
php artisan frasasti:publish-migration php artisan frasasti:migrate
Alternatif dengan tag publishing:
php artisan vendor:publish --tag="frasasti:migrations"
php artisan migrate
Seed kategori + permission:
php artisan frasasti:install
Publish config:
php artisan frasasti:publish-config # atau php artisan vendor:publish --tag="frasasti:config"
Command
| Command | Fungsi |
|---|---|
frasasti:install |
Seed 4 kategori aduan + permission aduan.read, aduan.update (idempotent) |
frasasti:publish-migration |
Copy migration stub .php.stub ke database/migrations tanpa menimpa file yang ada |
frasasti:migrate |
Jalankan frasasti:publish-migration lalu migrate |
frasasti:publish-config |
Publish config/frasasti.php |
frasasti:import-legacy-aduan |
Import data dari rakaca_aduans (opsi --dry-run) |
Routing
| Route | Nama | Akses |
|---|---|---|
GET /bantuan |
frasasti.aduan.index |
Publik (throttle:30,1) |
GET /frasasti/aduan-masuk |
frasasti.aduan-masuk.index |
aduan.read |
GET /frasasti/aduan-masuk/{aduan} |
frasasti.aduan-masuk.edit |
aduan.update |
Data & Privasi
- Isi aduan immutable.
nama_lengkap,nip,wa_number,aduan_category_id,deskripsi, danref_codetidak dapat diubah setelah aduan dibuat — percobaan update akan ditolak denganLogicException(lihatAduan::IMMUTABLE_ATTRIBUTES). Yang boleh berubah hanyastatus,handled_at, danhandled_by. - PII tidak masuk activity log.
Aduanmeng-overridegetActivitylogOptions()dengan whitelistAduan::LOGGED_ATTRIBUTES, menggantikanlogAll()dari trait bersama. Karenaactivity_logadalah tabel terpisah yang tidak terenkripsi, nama/NIP/nomor WA/IP tidak disalin ke sana. Yang tercatat hanyaref_code,status,aduan_category_id,deskripsi,handled_at, danhandled_by. nama_lengkap,nip, danwa_numbermemakai castencrypted— transparan di level model, nilainya selalu ter-dekripsi saat diakses.- Nomor WhatsApp tidak pernah dikirim ke
wa.mesaat membangun pesan Share ke support, demi privasi pengirim.
API
Scope: frasasti.aduan.read — data personal dikembalikan ter-dekripsi
(atas keputusan pemilik package).
| Method | Endpoint |
|---|---|
GET |
/api/v1/frasasti/aduans |
GET |
/api/v1/frasasti/aduans/{aduan} |
Query parameter (index): status (pending|processed|done), category_id,
q (cocok ref_code), per_page (default 50, max 100).
curl -H "Authorization: Bearer <token>" \ -H "Accept: application/json" \ https://example.test/api/v1/frasasti/aduans?status=pending
Testing
vendor\bin\pest packages\frasasti
License
MIT. Lihat LICENSE.md.