1
Ringkasan Proyek
TwintyLabs/laravel-userstamps adalah paket Laravel yang mencatat user pembuat, pengubah, dan penghapus pada model Eloquent. Deskripsi resminya menyebut dukungan untuk relasi userstamp standar sekaligus polymorphic (morph) composer.json:2-31. Seluruh kode paket berada di namespace TwintyLabs\Userstamps dan dipetakan PSR-4 ke direktori src/ composer.json:43-472.
Paket menyentuh tiga lapisan sekaligus: macro Blueprint yang menambah kolom saat migration, trait HasUserstamps yang membuka relasi ke model user, dan UserstampsObserver yang mengisi kolom pada siklus event model. Perakitan ketiganya terjadi di UserstampsServiceProvider: config didaftarkan lewat hasConfigFile('userstamps'), sedangkan macro didaftarkan pada bootingPackage src/UserstampsServiceProvider.php:11-243.
Kemampuan utama
Tabel berikut merangkum apa saja yang disediakan paket dan di mana implementasinya berada.
| Kemampuan | Titik masuk | Hasil |
|---|---|---|
Menambah kolom userstamp saat Schema::create | macro userstamps | created_by_id dan updated_by_id, ditambah created_by_type serta updated_by_type bila is_using_morph aktif src/Database/Schema/Macros/UserstampsMacro.php:50-704 |
| Menambah kolom penghapus | macro softUserstamps | deleted_by_id, ditambah deleted_by_type bila morph aktif src/Database/Schema/Macros/UserstampsMacro.php:72-855 |
| Memilih tipe kolom ID | addUserIdColumn | foreignId, foreignUuid, foreignUlid untuk non-morph; unsignedBigInteger, uuid, ulid untuk morph src/Database/Schema/Macros/UserstampsMacro.php:24-406 |
| Relasi ke user | createdBy, updatedBy, deletedBy | BelongsTo atau MorphTo, dibungkus withTrashed() bila with_trashed bernilai true src/Concerns/HasUserstamps.php:19-327 src/Concerns/HasUserstamps.php:49-628 |
| Pengisian kolom otomatis | UserstampsObserver | hook creating, updating, deleting, restoring src/Observers/UserstampsObserver.php:9-289 |
Peta komponen dan alur pemakaian
Diagram berikut memetakan komponen paket serta jalur data dari berkas config sampai relasi yang dibaca aplikasi.
graph TD
CFG["config/userstamps.php"] --> PROV["UserstampsServiceProvider"]
PROV --> MACRO["UserstampsMacro"]
MACRO --> COLS["created_by_id / updated_by_id / deleted_by_id"]
COLS --> TABLE[("Tabel model")]
PROV --> TRAIT["HasUserstamps"]
TRAIT --> OBS["UserstampsObserver"]
OBS -- "mengisi kolom saat save" --> TABLE
OBS -- "auth()->user()" --> USER[("Tabel users")]
TABLE -- "withTrashed() opsional" --> REL["createdBy() / updatedBy() / deletedBy()"]
TRAIT --> REL
style CFG fill:#f59e0b,color:#000
style PROV fill:#f59e0b,color:#000
style TABLE fill:#336791,color:#fff
style USER fill:#336791,color:#fff
style REL fill:#8b5cf6,color:#fff
style OBS fill:#2d7d46,color:#fff
%% fig: Komponen paket dan jalur data userstamp
%% desc: Config dipakai service provider untuk mendaftarkan macro schema dan trait model, lalu observer mengisi kolom dan relasi membacanya kembali.Trait HasUserstamps mendaftarkan UserstampsObserver sendiri lewat hook booted, sehingga model pemakai tidak perlu memasang observer secara manual src/Concerns/HasUserstamps.php:12-1710.
Alur pemakaian singkat
Urutan pemakaian mengikuti README resmi:
- Tambahkan
$table->userstamps()dan$table->softUserstamps()di dalam closureSchema::createREADME.md:117-12711. - Untuk tabel yang sudah ada, pakai macro yang sama di
Schema::table, lalu lepas kembali dengandropUserstamps()dandropSoftUserstamps()di methoddownREADME.md:142-14812. - Pasang trait pada model dengan
use HasUserstamps;README.md:153-15913. - Baca hasilnya lewat
$model->createdBy,$model->updatedBy, dan$model->deletedByREADME.md:163-16714.
Nilai yang disimpan bergantung pada user yang sedang login. getUserPrimaryValueAndClass mengembalikan id dan type bernilai null bila auth()->check() bernilai false, dan memakai kolom lain ketika users_table_id_column_name bukan id src/Observers/UserstampsObserver.php:91-10715.
Perilaku pada siklus event model
Observer mengisi kolom hanya jika kolom tersebut masih bersih. Pada creating, created_by_id dan updated_by_id diisi bila keduanya lolos isClean src/Observers/UserstampsObserver.php:9-289. Pada updating hanya updated_by_id yang diperbarui src/Observers/UserstampsObserver.php:30-4016.
Penghapusan dan pemulihan hanya berlaku untuk model yang memakai SoftDeletes, dan usingSoftDeletes() menjawabnya lewat class_uses_recursive src/Concerns/HasUserstamps.php:64-6717. Saat deleting, deleted_by_id diisi bersama updated_by_id, lalu model disimpan tanpa memicu event lagi src/Observers/UserstampsObserver.php:42-5918. Saat restoring, deleted_by_id dikosongkan dan updated_by_id diisi dengan user yang memulihkan src/Observers/UserstampsObserver.php:61-7819. Penulisan di luar siklus event itu memakai saveWithoutEventDispatching, yang melepas lalu memasang kembali event dispatcher src/Observers/UserstampsObserver.php:80-8920.
⚠️
is_using_morphharus ditetapkan sebelum migration dijalankan, karena nilai ini menentukan apakah kolom_typeikut dibuat config/userstamps.php:13-1821. Nama kolomcreated_by,updated_by, dandeleted_bymenjadi dasar penamaan kolom yang dihasilkan config/userstamps.php:84-11022.
Langkah berikutnya
- Detail kelas dan tanggung jawab tiap lapisan dibahas di Arsitektur Paket.
- Perintah
composer requiredanvendor:publishada di Instalasi dan Publikasi Config. - Daftar lengkap kunci config ada di Referensi Opsi Konfigurasi.
- Contoh pemasangan pada model ada di Penggunaan pada Model Eloquent.