- Dokumentasi: Sistem Informasi Peminjaman Mobil Bertanda Tangan Digital dengan Framework Laravel 10
- 1. Pendahuluan
- 2. Persiapan
- 3. Arsitektur Sistem
- 4. Fitur-fitur
- 5. Model Data
- 6. Pengujian
- 7. Konfigurasi Tambahan
- 8. Penanganan Kesalahan
- 9. Pemeliharaan dan Perawatan
- 10. Kontribusi
- 11. Lisensi
- 12. Referensi
Sistem informasi berbasis web yang digunakan dalam membantu proses pengajuan peminjaman unit mobil pada SMP SMA Global Islamic Boarding School (GIBS) yang menerapkan teknologi tanda tangan digital berbasis gambar (Digital Signature) pada proses legalisir pengajuan peminjaman unit mobil
Sistem informasi ini mengambi studi kasus pada Kantor Tata Usaha / Administrasi dan General Service (GS) SMP SMA Global Islamic Boarding School (GIBS)
Pembuatan dokumentasi ini bertujuan untuk membantu proses hand over atau peralihan user maupun developer menjadi lebih mudah dan cepat serta dengan harapan user maupun developer dapat memahami semua alur dan logika yang digunakan pada sistem informasi ini, sehingga tidak menutup keadanya pengembangan lebih lanjut dari sistem informasi ini
Lingkup sistem informasi peminjaman mobil bertanda tangan digital menggunakan framework Laravel 10 mencakup beberapa aspek berikut:
- Peminjaman Mobil: Sistem ini mepengguna untuk melakukan peminjaman mobil. Pengguna dapat melihat daftar mobil yang tersedia, memilih mobil yang ingin dipinjam, dan mengajukan permohonan peminjaman.
- Manajemen Peminjaman: Sistem ini mencakup fitur-fitur manajemen peminjaman, seperti persetujuan peminjaman, penjadwalan pengambilan dan pengembalian mobil.
- Tanda Tangan Digital: Sistem ini mepengguna untuk melakukan tanda tangan digital sebagai tanda persetujuan dan konfirmasi atas peminjaman mobil. Tanda tangan digital yang dibuat oleh pengguna akan disimpan dan dihubungkan dengan peminjaman yang terkait
Sistem informasi ini menggunakan framework Laravel versi 10, menggunakan PHP versi 8, dan menggunakan MySQL sebagai database management sytem (DBMS)
Ikuti langkah - langkah berikut dalam menjalankan sistem ini secara lokal di komputer
Cloning repository ini menggunakan GIT
git clone https://github.com/or-abdillh/si-peminjaman-mobil
cd si-peminjaman-mobil
Instalasi module PHP dan Laravel
composer install
Instalasi module Node JS
npm install
Persiapan environment
cp .env.example .env
php artisan key:generate
php artisan storage:link
php artisan optimize
Menjalankan Migrasi dan Seeder
php artisan migrate --seed
Menjalankan server
php artisan serve
Konfigurasi database dapat ditemukan pada .env
yang memiliki konfigurasi default sebagai berikut:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=peminjaman_mobil
DB_USERNAME=root
DB_PASSWORD=
Lakukan perubahan pada konfigurasi jika terdapat perbedaan pada konfirgurasi bawaan dari sistem operasi atau DBMS yang digunakan
Jalankan perintah berikut untuk membuat sub direktori baru pada storage
yang digunakan dalam menyimpan hasil upload dokumen, profile picture, dan signature dari user
mkdir storage/app/public/attachments && mkdir storage/app/public/pictures && mkdir storage/app/public/signatures
Jika kesulitan dalam menggunakan command line, pembuatan sub direktori baru bisa dilakukan dengan menggunakan bantuan file explorer dengan membuat folder baru attachments
, pictures
, dan signatures
pada storage/app/public
Sistem ini dibangun menggunakan Arsitektur MVC yaitu sebuah pendekatan dalam pengembangan perangkat lunak yang memisahkan logika bisnis, tampilan, dan interaksi pengguna menjadi tiga komponen terpisah. Arsitektur ini bertujuan untuk meningkatkan pemeliharaan kode, memisahkan perhatian terhadap berbagai aspek sistem, dan mepengembangan yang lebih terstruktur.
Model merupakan komponen yang bertanggung jawab untuk mengelola data dan logika bisnis dalam aplikasi. Model mewakili struktur data dan berisi operasi-operasi yang berkaitan dengan manipulasi data, validasi, dan aturan bisnis. Model tidak bergantung pada tampilan atau interaksi pengguna, dan dapat digunakan kembali dalam berbagai bagian aplikasi.
View merupakan komponen yang mengatur tampilan antarmuka pengguna (UI) dan menampilkan informasi kepada pengguna. View bertanggung jawab untuk mengubah data dari Model menjadi tampilan yang dapat ditampilkan pengguna. View tidak mengandung logika bisnis, tetapi hanya fokus pada cara menampilkan data yang diberikan.
Controller merupakan komponen yang bertanggung jawab untuk menerima input dari pengguna, memproses permintaan, dan berinteraksi dengan Model dan View. Controller menerima input dari pengguna melalui View, mengubah Model berdasarkan input tersebut, dan memperbarui tampilan yang ditampilkan oleh View. Controller juga mengatur alur logika bisnis dalam aplikasi.
Sistem informasi ini dibangun menggunakan framework Laravel sehingga memiliki struktur direktori default atau bawaan dari Laravel, berikut struktur direktori utama dalam di sistem:
si-peminjaman-mobil
|--- app
| |--- Http
| | |--- Controllers
| | | |--- Admin
| | | |--- Deputy
| | | |--- Manager
| | | |--- User
| |--- Models
| |--- public
| |--- resources
| | |--- views
| | | |--- pages
| | | | |--- admin
| | | | |--- deputy
| | | | |--- manager
| | | | |--- profile
| | | | |--- signature
| | | | |--- user
| | | |--- dashboard.blade.php
| |--- routes
| |--- storage
| | |--- app
| | | |--- public
| | | | |--- attachments
| | | | |--- pictures
| | | | |--- signatures
|-- .env
Model merupakan representasi dari tabel pada database, pada sistem informasi ini file file model dapat ditemukan pada app/Models
si-peminjaman-mobil
| |-- app
| | |-- Models
| | | |-- Activity.php
| | | |-- Car.php
| | | |-- Feedback.php
| | | |-- Letter.php
| | | |-- Participant.php
| | | |-- Signature.php
| | | |-- User.php
| | | |-- UserManager.php
| | | |-- Validation.php
View merupakan komponen yang bertanggung jawab dalam menampilkan output dari hasil pengolahan data oleh controller kepada user.
Sistem informasi ini menerapkan beberapa role / tipe pengguna yang telah dibahas disini, sehingga struktur direktori untuk View pada sistem ini akan menyesuaikan dengan role / tipe penggunanya
Berikut struktur direktori komponen utama View di dalam sistem ini:
si-peminjaman-mobil
| |-- resources
| | |-- views
| | | |-- auth
| | | | |-- login.blade.php
| | | | |-- register.blade.php
| | | |-- layouts
| | | | |-- soft-ui
| | | | | |-- auth
| | | | | | |-- login.blade.php
| | | | | | |-- register.blade.php
| | | | | |-- app.blade.php
| | | |-- pages
| | | | |-- admin
| | | | |-- deputy
| | | | |-- manager
| | | | |-- profile
| | | | |-- signature
| | | | |-- user
| | | |-- dashboard.blade.php
View dalam struktur direktori tersebut ditempatkan di dalam direktori resources/views
. Direktori views menyimpan file-file tampilan antarmuka pengguna yang akan ditampilkan kepada pengguna. Berikut adalah beberapa sub-direktori yang ada di dalam views:
auth
: Direktori ini berisi tampilan terkait dengan otentikasi pengguna seperti login dan registrasi. Dalam direktori auth, terdapat filelogin.blade.php
danregister.blade.php
yang bertanggung jawab untuk menampilkan formulir login dan registrasi.layouts
: Direktori ini berisi tampilan layout yang digunakan secara umum dalam aplikasi. Di dalamlayouts
, ada direktorisoft-ui
yang kemudian memiliki sub-direktoriauth
. Dalam sub-direktoriauth
, terdapat filelogin.blade.php
danregister.blade.php
yang digunakan untuk tampilan otentikasi dengan layout khusus.pages
: Direktori ini berisi tampilan halaman-halaman tertentu dalam aplikasi. Terdapat beberapa sub-direktori sepertiadmin
,deputy
,manager
,profile
,signature
, danuser
yang berisi tampilan halaman terkait dengan peran pengguna atau fitur tertentu dalam sistem.dashboard.blade.php
: File ini berisi tampilan halaman dashboard yang merupakan halaman utama aplikasi setelah pengguna berhasil masuk.
Controller dalam aplikasi ini berada di dalam direktori app/Http/Controllers dan bertanggung jawab untuk menangani logika bisnis dan merespons permintaan pengguna. Struktur direktori Controller memisahkan berbagai peran dan fitur dalam aplikasi.
Sistem informasi ini menerapkan beberapa role / tipe pengguna yang telah dibahas disini, sehingga struktur direktori untuk Controller pada sistem ini akan menyesuaikan dengan role / tipe penggunanya
Berikut adalah penjelasan untuk setiap Controller dalam struktur tersebut:
si-peminjaman-mobil
| |-- app
| | |-- Http
| | | |-- Controllers
| | | | |-- Admin
| | | | | |-- ArchieveController.php
| | | | | |-- CarController.php
| | | | | |-- DashboardController.php
| | | | | |-- FeedbackController.php
| | | | | |-- LetterController.php
| | | | | |-- UserController.php
| | | | | |-- ValidationController.php
| | | | |-- Auth
| | | | | |-- LoginController.php
| | | | | |-- RegisterController.php
| | | | |-- Deputy
| | | | | |-- DashboardController.php
| | | | | |-- ValidationController.php
| | | | |-- Manager
| | | | | |-- DashboardController.php
| | | | | |-- EmployeeController.php
| | | | | |-- ValidationController.php
| | | | |-- User
| | | | | |-- DashboardController.php
| | | | | |-- LetterController.php
| | | | |-- ProfileController.php
| | | | |-- SignatureController.php
ArchieveController.php
: Controller ini bertanggung jawab untuk mengelola arsip surat pada peran admin. berisi tindakan (action) untuk menampilkan daftar arsip surat, mengelola kategori surat, dan lainnya.CarController.php
: Controller ini menangani logika bisnis terkait dengan pengelolaan mobil pada peran admin. berisi tindakan untuk menampilkan daftar mobil, menambahkan mobil baru, mengedit atau menghapus data mobil, dan sebagainya.DashboardController.php
: Controller ini mengatur logika bisnis yang terkait dengan tampilan dashboard untuk peran admin. berisi tindakan untuk menampilkan informasi statistik, data penting, atau laporan terkait dengan manajemen peminjaman mobil.FeedbackController.php
: Controller ini bertanggung jawab untuk mengelola umpan balik terkait dengan peminjaman mobil pada peran admin. berisi tindakan untuk menampilkan daftar umpan balik, memproses umpan balik, dan mengirim tanggapan kepada pengguna.LetterController.php
: Controller ini menangani logika bisnis terkait dengan pengelolaan surat pada peran admin. berisi tindakan untuk menampilkan daftar surat, menambahkan surat baru, mengedit atau menghapus data surat, dan sebagainya.UserController.php
: Controller ini mengatur logika bisnis yang terkait dengan pengelolaan pengguna pada peran admin. berisi tindakan untuk menampilkan daftar pengguna, mengedit atau menghapus data pengguna, dan sebagainya.ValidationController.php
: Controller ini bertanggung jawab untuk mengelola validasi peminjaman mobil pada peran admin. berisi tindakan untuk menampilkan daftar peminjaman yang perlu divalidasi, dan memberikan legalisir tanda tangan.
LoginController.php
: Controller ini bertanggung jawab untuk mengelola proses otentikasi dan login pengguna. berisi tindakan untuk menampilkan halaman login, memvalidasi informasi login, dan mengautentikasi pengguna.RegisterController.php
: Controller ini menangani proses pendaftaran pengguna baru. berisi tindakan untuk menampilkan halaman registrasi, memvalidasi informasi pendaftaran, dan menyimpan data pengguna baru ke dalam sistem.
DashboardController.php
: Controller ini mengatur logika bisnis yang terkait dengan tampilan dashboard untuk peran deputy. berisi tindakan untuk menampilkan informasi statistik, data penting, atau laporan terkait dengan tugas dan tanggung jawab deputy.ValidationController.php
: Controller ini bertanggung jawab untuk mengelola validasi peminjaman mobil pada peran deputy. berisi tindakan untuk menampilkan daftar peminjaman yang perlu divalidasi oleh deputy, menyetujui atau menolak peminjaman, dan sebagainya.
DashboardController.php
: Controller ini mengatur logika bisnis yang terkait dengan tampilan dashboard untuk peran manager. berisi tindakan untuk menampilkan informasi statistik, data penting, atau laporan terkait dengan tugas dan tanggung jawab manager.EmployeeController.php
: Controller ini bertanggung jawab untuk mengelola data karyawan pada peran manager. berisi tindakan untuk menampilkan daftar karyawan, menambahkan karyawan baru, mengedit atau menghapus data karyawan, dan sebagainya.ValidationController.php
: Controller ini bertanggung jawab untuk mengelola validasi peminjaman mobil pada peran manager. berisi tindakan untuk menampilkan daftar peminjaman yang perlu divalidasi oleh manager berupa pemberian tanda tangan.
DashboardController.php
: Controller ini mengatur logika bisnis yang terkait dengan tampilan dashboard untuk peran pengguna. berisi tindakan untuk menampilkan informasi pribadi, riwayat peminjaman, atau akses ke fitur-fitur lainnya yang relevan dengan peran pengguna.LetterController.php
: Controller ini bertanggung jawab untuk mengelola peminjaman surat pada peran pengguna. berisi tindakan untuk menampilkan daftar surat yang dapat dipinjam, membuat peminjaman surat, melihat status peminjaman, dan sebagainya.
ProfileController.php
: Controller ini menangani logika bisnis terkait dengan pengelolaan profil pengguna pada peran pengguna. berisi tindakan untuk menampilkan profil pengguna, mengedit atau memperbarui data pengguna, dan sebagainya.
SignatureController.php
: Controller ini bertanggung jawab untuk mengelola tanda tangan digital pengguna pada peran pengguna. berisi tindakan untuk menampilkan halaman tanda tangan, menyimpan tanda tangan yang diunggah, dan sebagainya.
Routing adalah proses menentukan bagaimana aplikasi web merespons permintaan HTTP yang masuk dari pengguna. Routing menghubungkan URL dengan tindakan (action) yang sesuai dalam Controller untuk menangani permintaan tersebut.
Dalam aplikasi ini, mekanisme routing diimplementasikan menggunakan framework Laravel. Framework ini menyediakan sintaks dan fitur yang kuat untuk mengatur routing dengan mudah dan efisien.
Routing yang digunakan pada aplikasi ini bisa ditemui pada file routes/web.php
Route adalah aturan yang menghubungkan URL dengan tindakan dalam Controller yang akan dijalankan. Setiap route memiliki URL dan metode HTTP tertentu yang akan memicu tindakan yang sesuai dalam Controller.
Secara umum, definisi route terdiri dari URL, metode HTTP, dan tindakan yang akan dilakukan. Berikut adalah contoh definisi route pada sistem:
Route::post('/profile/picture', [ProfileController::class, 'changeProfilePicture'])->name('profile.picture.change');
Grup route digunakan untuk mengelompokkan route yang memiliki karakteristik atau atribut yang sama. Ini mekita untuk menerapkan middleware, namespace, prefix, dan lainnya secara terpusat. Berikut adalah contoh penggunaan grup route didalam sistem:
Route::group(['middleware' => ['auth', 'role:deputy']], function () {
Route::get('/deputy', [DeputyDashboardController::class, 'index'])->name('deputy.dashboard.index');
Route::resource('/deputy/validation', DeputyValidationController::class)->names('deputy.validation');
});
Pada contoh kode di atas, kita menggunakan Route::group
untuk membuat grup route dengan middleware yang ditentukan. Middleware digunakan untuk menerapkan filter atau tindakan sebelum atau setelah menjalankan tindakan dalam Controller
. Dalam contoh ini, kita menggunakan middleware auth
dan role:deputy
untuk memastikan pengguna yang mengakses route tersebut sudah terotentikasi dan memiliki peran sebagai deputy
.
Pada kode berikut, sistem menggunakan Route::resource
untuk mendefinisikan route yang mengikuti pola CRUD (Create, Read, Update, Delete) untuk beberapa komponen seperti car
, user
, letter
, feedback
, dan validation
. Resourceful routing secara otomatis menghasilkan rute dan tindakan dalam Controller yang sesuai dengan pola CRUD yang ditentukan.
Route::resource('/admin/car', AdminCarController::class)->names('admin.car');
Route::resource('/admin/user', AdminUserController::class)->names('admin.user');
Route::resource('/admin/letter', AdminLetterController::class)->names('admin.letter');
Route::resource('/admin/letter/feedback', AdminFeedbackController::class)->names('admin.letter.feedback');
Route::resource('/admin/validation', AdminValidationController::class)->names('admin.validation');
Pada kode diatas juga menunjukkan contoh penggunaan tindakan dalam Controller yang akan dipanggil saat route tertentu diakses. Misalnya, AdminDashboardController
memiliki method index
yang akan dijalankan saat URL /admin
diakses. Hal yang sama berlaku untuk AdminCarController
, AdminUserController
, AdminLetterController
, AdminFeedbackController
, AdminValidationController
, dan AdminArchiveController
yang masing-masing memiliki method yang sesuai untuk setiap operasi CRUD yang didefinisikan.
Pada sistem ini menggunakan library Laravel Spatie Permission untuk membuat dan mengelola tipe pengguna yang ada didalam sistem ini. Adapun untuk tipe pengguna yang berlaku didalam aplikasi ini adalah
- Admin
- User / Pemohon
- Manager / Atasan Pemohon
- Deputy / Kepala Sekolah
Fitur ini memungkinkan Anda untuk mengelola peran pengguna dan hak akses mereka menggunakan Spatie Permission. Anda dapat membuat, mengedit, dan menghapus peran pengguna, serta menetapkan hak akses spesifik untuk setiap peran. Fitur ini memungkinkan Anda untuk mengatur dan mengendalikan tingkat akses pengguna dalam aplikasi Anda.
Berikut adalah alur kerja dari penggunaan Spatie Permission ke dalam sistem
Menggunakan Composer untuk melakukan instalasi library ke dalam sistem
composer require spatie/laravel-permission
Menambahkan service provider baru ke dalam config/app.php
'providers' => [
// ...
Spatie\Permission\PermissionServiceProvider::class,
];
Menjalankan perintah untuk melakukan publish
php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider"
Melakukan penambahan trait pada model User di app/Models/User.php
use HasRoles;
Menjalankan Migrasi bawaan dari Spatie Permission
php artisan migrate
Secara otomatis akan terjadi penambahan beberapa tabel baru pada database yang digunakan Spatie Permission dalam menjalankan fiturnya. Berikut adalah beberapa tabel baru yang akan di create
secara otomatis oleh Spatie
model_has_permission
,model_has_roles
permissions
roles
roles_has_permissions
Dengan menggunakan Spatie Permission kita dapat membuat bebeapa role
atau tipe pengguna sesuai dengan kebutuhan sistem. Untuk membuat role pengguna kita dapat menggunakan fitur Seeder
pada Laravel.
Berikut seeder
yang digunakan oleh sistem dalam membuat role pengguna pada file database/seeders/RoleSeeder.php
<?php
namespace Database\Seeders;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use Spatie\Permission\Models\Role;
class RoleSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
//
$roles = ['user', 'manager', 'deputy', 'admin'];
foreach($roles as $role) {
Role::create(["name" => $role]);
}
}
}
Pada kode diatas kita menggunakan model Role
dengan melakukan import model dari Spatie\Permission\Models\Role
, dimana model ini merupakan model bawaan dari Spatie yang digunakan dalam menyimpan berbagai tipe pengguna ke dalam tabel roles
Variable $roles
menyimpan array
yang berisikan nama - nama dari tipe pengguna yang ingin digunakan di dalam sistem. Variabel ini akan di loop
menggunakan method foreach
yang secara satu per satu akan melakukan create
role baru ke dalam model Role
melalui syntax dibawah ini, dimana $role
merepresentasikan tiap - tiap isi array pada variabel $roles
Role::create(["name" => $role]);
Untuk memasukkan tipe role tersebut ke dalam tabel roles
maka jalankan perintah berikut pada Command Prompt
php artisan db:seed --class=RoleSeeder
1). Membuat akun khusus untuk admin. Kode berikut berada pada database/seeders/AdminSeeder.php
<?php
namespace Database\Seeders;
use App\Models\User;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
class AdminSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
//
$admin = User::create([
"name" => "Administrator Tata Usaha",
"password" => bcrypt('12345678'),
"email" => "admin@gmail.com",
"position" => "Adminstrator TU"
]);
$admin->assignRole('admin');
}
}
Pada kode diatas sistem akan membuat akun atau user baru dengan name
Administrator Tata Usaha, password
12345678, email
admin@gmail.com, dan position
Administrator TU.
Pada kode diatas juga ditunjukkan bagaimana menerapkan role
pengguna kepada user tertentu menggunakan kode assignRole('nama-role')
, dimana pada kasus ini sistem akan menerapkan role
pengguna admin pada akun atau user tersebut
2). Mendaftarkan akun baru melalui halaman register
. Contoh kode berikut dapat ditemui pada app/Http/Controllers/Auth/RegisterController.php
protected function create(array $data)
{
$user = User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => Hash::make($data['password'])
]);
$user->assignRole('user');
return $user;
}
Berdasarkan kode diatas, setiap user yang melakukan pendaftaran akun baru melalui halaman register
akan secara otomatis diterapkan role
pengguna sebagai user
melalui kode $user->assignRole('user')
3). Mengetahui tipe role pengguna dari user tertentu. Kode berikut dapat ditemui pada resources/views/includes/breadcrumb.blade.php
<nav aria-label="breadcrumb">
<ol class="breadcrumb bg-transparent mb-0 pb-0 pt-1 px-0 me-sm-6 me-5">
<li class="breadcrumb-item text-sm"><a class="opacity-5 text-dark" href="javascript:;">{{ auth()->user()->roles->first()->name }}</a></li>
...
</ol>
</nav>
Pada kode diatas digunakan untuk menampilkan informasi mengenai tipe pengguna user yang saat ini sedang login di sistem, kemudian menampilkannya ke dalam view
.
Kode yang digunakan adalah
auth()->user()->roles->first()->name;
- Deskripsi fitur
- Alur kerja
- Route terkait
- Contoh kode penggunaan
- Deskripsi fitur
- Alur kerja
- Route terkait
- Contoh kode penggunaan
- Deskripsi fitur
- Alur kerja
- Route terkait
- Contoh kode penggunaan
- Deskripsi fitur
- Alur kerja
- Route terkait
- Contoh kode penggunaan
- Deskripsi struktur database
- Penjelasan setiap tabel dan kolom
- Relasi antar tabel
- Contoh kode migrasi
- Rencana pengujian
- Penjelasan skenario pengujian
- Contoh kode pengujian
- Konfigurasi penyimpanan tanda tangan digital
- Konfigurasi pengiriman email
- Pengaturan lainnya yang diperlukan
- Daftar kesalahan yang umum terjadi
- Solusi dan tindakan perbaikan
- Tugas pemeliharaan rutin
- Pembaruan dan peningkatan sistem
- Monitoring dan optimisasi performa
- Panduan kontribusi
- Prosedur pengiriman pull request
- Jenis lisensi yang digunakan
- Informasi hak cipta
- Referensi dan sumber daya tambahan
- Dokumentasi resmi Laravel 10
Last Edited 14/07/2023