From 1007515faabb473af25bd3542347a674cb1199d7 Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Sat, 17 May 2025 14:12:25 +0700 Subject: [PATCH] feat(usermanagement): optimalkan pencarian dan tambahkan UserFactory - Ubah pencarian pada `PermissionsController` dan `UsersController`: - Gunakan metode `whereRaw` dengan `LOWER` untuk pencocokan case-insensitive pada kolom `name` dan `email`. - Tambahkan `HasFactory` pada model `User` agar mendukung pembuatan data dummy menggunakan factory. - Implementasi fungsi `newFactory()` pada model `User` untuk merujuk ke UserFactory. - Tambahkan file factory baru (`UserFactory`) untuk model `User`: - Definisikan state default seperti `name`, `email`, `password`, dan `nik` untuk keperluan pembuatan data dummy. - Gunakan password secara default terenkripsi dengan `bcrypt`. --- .../Controllers/PermissionsController.php | 2 +- app/Http/Controllers/UsersController.php | 3 +- app/Models/User.php | 14 ++++++-- database/factories/UserFactory.php | 34 +++++++++++++++++++ 4 files changed, 49 insertions(+), 4 deletions(-) create mode 100644 database/factories/UserFactory.php diff --git a/app/Http/Controllers/PermissionsController.php b/app/Http/Controllers/PermissionsController.php index b3d69c9..c55aa2f 100644 --- a/app/Http/Controllers/PermissionsController.php +++ b/app/Http/Controllers/PermissionsController.php @@ -268,7 +268,7 @@ if ($request->has('search') && !empty($request->get('search'))) { $search = $request->get('search'); $query->where(function ($q) use ($search) { - $q->where('name', 'LIKE', "%$search%"); + $q->whereRaw('LOWER(name) LIKE ?', ['%' . strtolower($search) . '%']); }); } diff --git a/app/Http/Controllers/UsersController.php b/app/Http/Controllers/UsersController.php index e070f29..e1d47ec 100644 --- a/app/Http/Controllers/UsersController.php +++ b/app/Http/Controllers/UsersController.php @@ -79,7 +79,8 @@ $search = $request->get('search'); $query->where(function ($q) use ($search) { $q - ->where('name', 'LIKE', "%$search%")->orWhere('email', 'LIKE', "%$search%"); + ->whereRaw('LOWER(name) LIKE ?', ['%' . strtolower($search) . '%']) + ->orWhereRaw('LOWER(email) LIKE ?', ['%' . strtolower($search) . '%']); }); } diff --git a/app/Models/User.php b/app/Models/User.php index 06eb4a2..cfbf0a0 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -2,6 +2,7 @@ namespace Modules\Usermanagement\Models; + use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; @@ -24,7 +25,7 @@ */ class User extends Authenticatable { - use Notifiable, Userstamps, HasRoles, softDeletes; + use HasFactory, Notifiable, Userstamps, HasRoles, softDeletes; protected $guard_name = ['web']; @@ -80,5 +81,14 @@ public function branch(){ return $this->belongsTo(Branch::class); } - } + /** + * Create a new factory instance for the model. + * + * @return \Illuminate\Database\Eloquent\Factories\Factory + */ + protected static function newFactory() + { + return \Modules\Usermanagement\Database\Factories\UserFactory::new(); + } + } diff --git a/database/factories/UserFactory.php b/database/factories/UserFactory.php new file mode 100644 index 0000000..6f24341 --- /dev/null +++ b/database/factories/UserFactory.php @@ -0,0 +1,34 @@ + + */ + public function definition(): array + { + return [ + 'name' => $this->faker->name(), + 'email' => $this->faker->unique()->safeEmail(), + 'email_verified_at' => now(), + 'password' => bcrypt('password'), // Default password for testing + 'remember_token' => Str::random(10), + 'nik' => $this->faker->unique()->numerify('##########'), + ]; + } +}