Memperkenalkan devASPid Laravel ID Generator

Membuat nomor invoice, nomor transaksi, purchase order, atau dokumen bisnis lainnya terdengar sederhana. Namun ketika aplikasi mulai berkembang dan melayani banyak pengguna secara bersamaan, proses menghasilkan nomor dokumen ternyata menjadi salah satu bagian yang cukup menantang.

Banyak aplikasi masih menggunakan pendekatan seperti mencari nomor terbesar pada tabel invoice kemudian menambahkannya satu angka. Cara ini memang mudah diterapkan, tetapi memiliki beberapa kelemahan.

Semakin besar jumlah data, proses pencarian menjadi semakin berat. Selain itu terdapat risiko race condition ketika dua permintaan datang pada waktu yang hampir bersamaan dan keduanya membaca nomor terakhir yang sama sebelum data baru disimpan.

Untuk mengatasi masalah tersebut kami membuat Laravel ID Generator, sebuah package open source yang dirancang untuk menghasilkan nomor dokumen secara cepat, aman, dan mudah dikonfigurasi.

Cara Modern Membuat Nomor Invoice dan Dokumen Bisnis di Laravel

Membuat nomor invoice, nomor transaksi, purchase order, atau dokumen bisnis lainnya terdengar sederhana. Namun ketika aplikasi mulai berkembang dan melayani banyak pengguna secara bersamaan, proses menghasilkan nomor dokumen ternyata menjadi salah satu bagian yang cukup menantang.

Banyak aplikasi masih menggunakan pendekatan seperti mencari nomor terbesar pada tabel invoice kemudian menambahkannya satu angka. Cara ini memang mudah diterapkan, tetapi memiliki beberapa kelemahan.

Semakin besar jumlah data, proses pencarian menjadi semakin berat. Selain itu terdapat risiko race condition ketika dua permintaan datang pada waktu yang hampir bersamaan dan keduanya membaca nomor terakhir yang sama sebelum data baru disimpan.

Untuk mengatasi masalah tersebut kami membuat Laravel ID Generator, sebuah package open source yang dirancang untuk menghasilkan nomor dokumen secara cepat, aman, dan mudah dikonfigurasi.

Mengapa kami membuat package ini

Saat mengembangkan berbagai aplikasi seperti Point of Sale, Online Shop, Procurement, hingga sistem manajemen Qurban, kami menemukan kebutuhan yang sama berulang kali.

Setiap aplikasi membutuhkan nomor dokumen yang unik.

Invoice.

Nomor transaksi.

Purchase Order.

Nomor Procurement.

Nomor Referensi.

Alih alih menulis logika yang sama di setiap proyek, kami memutuskan membuat sebuah package yang dapat digunakan kembali pada berbagai aplikasi Laravel.

Pendekatan yang berbeda

Laravel ID Generator tidak melakukan pencarian ke tabel transaksi untuk mengetahui nomor terakhir.

Sebaliknya package ini menyimpan satu baris data kecil pada tabel id_sequences yang hanya berisi status counter setiap generator.

Konfigurasi seperti prefix, suffix, padding, dan aturan reset tetap berada di dalam file konfigurasi Laravel sehingga dapat dikelola melalui version control.

Pendekatan ini memberikan beberapa keuntungan.

  • Performa tetap stabil meskipun tabel transaksi telah berisi jutaan data.
  • Aman digunakan pada banyak request secara bersamaan.
  • Tidak memerlukan scheduler untuk melakukan reset bulanan maupun tahunan.
  • Konfigurasi lebih mudah dipelihara.

Mendukung berbagai jenis reset

Package ini mendukung beberapa jenis scope.

  • Global
  • Tahunan
  • Bulanan
  • Harian

Reset dilakukan secara otomatis ketika generator mendeteksi perubahan periode. Tidak ada proses background maupun scheduler yang harus dijalankan.

Aman terhadap concurrent request

Salah satu fokus utama package ini adalah menghindari duplikasi nomor dokumen.

Setiap proses generate dijalankan di dalam database transaction dan melakukan row locking pada sequence yang sedang digunakan.

Dengan pendekatan tersebut beberapa pengguna dapat membuat invoice pada waktu yang bersamaan tanpa menghasilkan nomor yang sama.

Instalasi

composer require devaspid/laravel-id-generator

Setelah package terpasang cukup publish konfigurasi dan migration kemudian jalankan migration.

php artisan vendor:publish --tag=id-generator-config

php artisan vendor:publish --tag=id-generator-migrations

php artisan migrate

php artisan id-generator:sync

Contoh penggunaan

$invoice->number = IdGenerator::generate('invoice');

Konfigurasi generator cukup dilakukan pada file konfigurasi.

'invoice' => [
    'prefix' => 'INV-{Y}{m}-',
    'padding' => 6,
    'scope' => 'monthly',
]

Generator yang sama juga dapat digunakan untuk Transaction, Procurement, Purchase Order, maupun jenis dokumen bisnis lainnya.

Selengkapnya

devaspid/laravel-id-generator

Open Source untuk Komunitas

Laravel ID Generator merupakan salah satu kontribusi open source pertama dari Dev ASP ID.

Kami berharap package ini dapat membantu developer Laravel dalam membangun aplikasi bisnis yang lebih cepat, lebih aman, dan lebih mudah dipelihara.

Kami juga sangat terbuka terhadap issue, diskusi, maupun pull request dari komunitas.

Selamat mencoba.

Avatar photo
devASPid Team

Tim software developer & IT enthusiast di balik devASPid, yang selalu belajar, berbagi, dan berinovasi dalam dunia teknologi.