Backend API untuk aplikasi Zaku, yaitu aplikasi tracking pemasukan dan pengeluaran. Project ini dibuat dengan Laravel dan menyediakan API untuk login, register, transaksi, dashboard cashflow, budget bulanan, dan pencatatan transaksi lewat chat.
README ini dibuat untuk dua tipe pembaca:
- Orang awam/non-IT: supaya paham project ini untuk apa dan cara menjalankannya secara minimal.
- IT/developer: supaya bisa setup, menjalankan, testing, dan integrasi API di local.
Project ini adalah backend, bukan aplikasi tampilan utama. Artinya project ini berjalan sebagai server API yang akan dipanggil oleh frontend/mobile app.
Contoh fungsi yang sudah tersedia:
- Register dan login user.
- Verifikasi email dengan kode.
- JWT Bearer token untuk akses endpoint yang butuh login.
- Transaksi: daftar transaksi, detail, hapus, statistik, kategori, tambah manual, dan tambah lewat chat.
- Dashboard ringkasan keuangan.
- Dokumentasi API otomatis lewat Scribe di
/docs.
- PHP 8.1 atau lebih baru.
- Laravel 10.
- Composer.
- MySQL untuk penggunaan local normal.
- SQLite untuk testing.
- JWT Auth dengan
tymon/jwt-auth. - Scribe untuk dokumentasi API.
- Node.js dan NPM hanya diperlukan jika ingin menjalankan asset Vite.
Minimal yang perlu terpasang di komputer:
- PHP 8.1+.
- Composer.
- MySQL/MariaDB.
- Git.
Opsional:
- Node.js 18+ dan NPM, jika ingin menjalankan
npm run dev. - Postman/Insomnia, jika ingin mencoba API lebih nyaman.
- Mailpit atau SMTP lain, jika ingin menguji email sungguhan.
Untuk Windows, cara paling mudah biasanya memakai Laragon, XAMPP, atau instalasi PHP + Composer manual. Untuk macOS/Linux, bisa memakai PHP dari package manager, Homebrew, Docker, atau environment lain yang biasa dipakai tim.
Ikuti langkah ini dari folder project:
cd backendJika posisi terminal sudah di folder ini, lanjut ke langkah berikutnya.
composer installJika folder vendor sudah ada, perintah ini tetap aman dijalankan untuk memastikan dependency lengkap.
cp .env.example .envDi Windows PowerShell:
Copy-Item .env.example .envphp artisan key:generatephp artisan jwt:secretPilih yes jika diminta overwrite JWT_SECRET.
Buat database kosong bernama:
dompet_api
Contoh lewat MySQL CLI:
CREATE DATABASE dompet_api;Lalu cek bagian database di .env:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=dompet_api
DB_USERNAME=root
DB_PASSWORD=Sesuaikan DB_USERNAME dan DB_PASSWORD dengan komputer masing-masing.
php artisan migrate --seedPerintah ini membuat tabel database dan mengisi data awal, termasuk kategori transaksi dan akun demo.
php artisan serveJika berhasil, API berjalan di:
http://127.0.0.1:8000
Dokumentasi API bisa dibuka di:
http://127.0.0.1:8000/docs
OpenAPI spec tersedia di:
http://127.0.0.1:8000/docs.openapi
Setelah menjalankan php artisan migrate --seed, akun demo tersedia:
Email: demo@zaku.test
Password: password
Gunakan akun ini untuk login dan mendapatkan JWT token.
Request:
POST http://127.0.0.1:8000/api/v1/auth/login
Accept: application/json
Content-Type: application/jsonBody:
{
"email": "demo@zaku.test",
"password": "password"
}Response login akan berisi token. Simpan token itu untuk endpoint yang butuh login.
Tambahkan header:
Authorization: Bearer TOKEN_DARI_LOGIN
Accept: application/jsonContoh ambil dashboard:
GET http://127.0.0.1:8000/api/v1/dashboard
Authorization: Bearer TOKEN_DARI_LOGIN
Accept: application/jsonBase URL local:
http://127.0.0.1:8000/api/v1
Endpoint public:
| Method | Endpoint | Fungsi |
|---|---|---|
| POST | /auth/register |
Register user baru |
| POST | /auth/login |
Login dan ambil JWT token |
| POST | /auth/verify-email |
Verifikasi email |
| POST | /auth/resend-verification |
Kirim ulang kode verifikasi |
| POST | /auth/forgot-password |
|
| GET | /stats/public |
Endpoint yang membutuhkan JWT token:
| Method | Endpoint | Fungsi |
|---|---|---|
| GET | /auth/me |
Ambil data user login |
| POST | /auth/refresh |
Refresh token |
| POST | /auth/logout |
Logout |
| POST | /auth/change-password |
Ganti password |
| GET | /user/profile |
Ambil profil dan statistik user |
| PUT | /user/profile |
Update profil |
| PUT | /user/budget |
Update budget bulanan |
| GET | /dashboard |
Ambil dashboard keuangan |
| GET | /transactions |
Ambil daftar transaksi |
| POST | /transactions |
Catat pemasukan/pengeluaran manual |
| GET | /transactions/stats |
Ambil statistik transaksi |
| GET | /transactions/categories |
Ambil ringkasan kategori |
| GET | /transactions/{id} |
Detail transaksi |
| DELETE | /transactions/{id} |
Hapus transaksi |
| POST | /transactions/chat |
Catat transaksi dari pesan chat parser local |
| POST | /ai/chat |
|
| GET | /changelogs |
Dokumentasi lengkap dengan contoh request/response ada di /docs.
Minimal untuk local:
APP_NAME="Zaku Backend API"
APP_ENV=local
APP_DEBUG=true
APP_URL=http://127.0.0.1:8000
SCRIBE_BASE_URL=http://127.0.0.1:8000
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=dompet_api
DB_USERNAME=root
DB_PASSWORD=
JWT_SECRET=isi_dari_php_artisan_jwt_secret
JWT_ALGO=HS256Untuk email local, default .env.example memakai Mailpit:
MAIL_MAILER=smtp
MAIL_HOST=mailpit
MAIL_PORT=1025Jika tidak memakai Mailpit, untuk local bisa diganti menjadi:
MAIL_MAILER=logDengan MAIL_MAILER=log, isi email akan masuk ke file log Laravel, bukan dikirim ke inbox.
Ada dua endpoint chat:
/api/v1/transactions/chat: parser local, tidak butuh API key AI./api/v1/ai/chat: mencoba AI provider jika API key tersedia, lalu fallback ke parser local.
Konfigurasi opsional:
GROQ_API_KEY=
GROQ_MODEL=llama-3.1-8b-instant
GEMINI_API_KEY=
GEMINI_MODEL=gemini-2.0-flashUntuk local minimal, bagian ini boleh dikosongkan.
AI parser juga menangani bahasa Indonesia informal: dapat/dapet/dpt = income. Keyword override post-processing memastikan akurasi terlepas dari output LLM.
php artisan testTesting memakai SQLite in-memory dari phpunit.xml, jadi tidak mengubah database MySQL local.
Untuk mengisi data changelog:
php artisan db:seed --class=ChangelogSeederPerintah ini menambahkan data awal changelog ke database. Bisa dijalankan kapan saja jika ingin memperbarui data changelog.
composer install
php artisan key:generate
php artisan jwt:secret
php artisan migrate
php artisan migrate --seed
php artisan migrate:fresh --seed
php artisan serve
php artisan route:list --path=api
php artisan test
php artisan db:seed --class=ChangelogSeederJika perlu asset frontend bawaan Laravel:
npm install
npm run devUntuk backend API saja, npm install tidak wajib.
app/
Http/Controllers/Api/ Controller API
Http/Requests/ Validasi request
Http/Resources/ Format response resource
Models/ Model database
Services/ Logic bisnis dan parser transaksi
Services/AiTransactionParserService.php AI chat parser dengan Groq/Gemini
Traits/ApiResponse.php Format response API konsisten
database/
migrations/ Struktur tabel database
seeders/ Data awal/demo
routes/
api.php Semua route API utama
config/
jwt.php Konfigurasi JWT
scribe.php Konfigurasi dokumentasi API
Sebagian besar endpoint memakai format:
{
"status": "success",
"message": "Pesan response",
"data": {}
}Jika error, response biasanya:
{
"status": "error",
"message": "Pesan error",
"errors": {}
}Pastikan PHP dan Composer sudah terpasang:
php -v
composer -VPastikan extension PHP yang umum untuk Laravel aktif, seperti mbstring, openssl, pdo_mysql, tokenizer, xml, ctype, json, dan fileinfo.
Cek MySQL sudah menyala dan konfigurasi .env benar:
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=dompet_api
DB_USERNAME=root
DB_PASSWORD=Jika mengganti .env, jalankan:
php artisan config:clearJalankan:
php artisan jwt:secret
php artisan config:clearPastikan header token benar:
Authorization: Bearer TOKEN_DARI_LOGIN
Accept: application/jsonToken harus berasal dari endpoint /api/v1/auth/login.
Cek .env:
SCRIBE_BASE_URL=http://127.0.0.1:8000Lalu bersihkan config:
php artisan config:clearUntuk production, minimal ubah:
APP_ENV=production
APP_DEBUG=false
APP_URL=https://domain-api-anda.com
SCRIBE_BASE_URL=https://domain-api-anda.comGunakan database production, SMTP production, HTTPS, dan JWT_SECRET yang kuat. Jangan commit file .env ke repository.
Beberapa dokumen project lain tersedia di repository:
PRD-Backend.md: kebutuhan dan rancangan produk backend.TASK_LIST.md: daftar task project.CHANGELOG.md: catatan perubahan.GIT_WORKFLOW.md: standar git workflow.docs/: dokumentasi internal issue, implementation, dan pull request.