fix(user): menambahkan kolom referral_code dan menyesuaikan logika yang ada

-mengubah validasi username dari alpha_dash menjad alpha_num
-membuat method untuk generate kode nya di string helper
This commit is contained in:
Yoga Pangestu 2025-10-01 14:40:11 +07:00
parent cde9091f54
commit 7fa46c0e9b
8 changed files with 27 additions and 2 deletions

View File

@ -41,3 +41,13 @@ function formatDiscount($amount, VoucherType $type, string $currency = 'Rp'): st
: currency($amount, $currency);
}
}
if (! function_exists('generateReferralCode')) {
function generateReferralCode(string $username, int $unique): string
{
$prefix = Str::substr($username, 0, 6);
$year = date('y');
return Str::upper($prefix).$year.$unique;
}
}

View File

@ -65,6 +65,12 @@ public function columns(): array
))
->html(),
Column::make('Kode Referral', 'referral_code')
->format(fn ($value) => Blade::render(
'<flux:badge color="zinc">'.$value.'</flux:badge>'
))
->html(),
Column::make('Gaji Pokok', 'employee.base_salary')
->searchable()
->sortable()

View File

@ -42,7 +42,7 @@ public function rules(): array
{
return [
'full_name' => ['required', 'string', 'max:100'],
'username' => ['required', 'alpha_dash', 'min:5', 'max:20', Rule::unique('users', 'username')->ignore($this->user)],
'username' => ['required', 'alpha_num', 'min:5', 'max:20', Rule::unique('users', 'username')->ignore($this->user)],
'email' => ['required', 'email', 'max:100', Rule::unique('users', 'email')->ignore($this->user)],
'phone_number' => ['required', 'string', new PhoneNumber],
'base_salary' => ['required', 'regex:/^[0-9.]+$/', new UnsignedInteger],
@ -101,6 +101,7 @@ public function store()
$user = User::create([
...$data,
'password' => Hash::make(config('myconfig.password_default')),
'referral_code' => generateReferralCode($data['username'], User::max('id') + 1),
'status' => $data['status'],
]);

View File

@ -3,6 +3,7 @@
namespace Database\Factories;
use App\Enums\UserStatus;
use App\Models\User;
use Illuminate\Database\Eloquent\Factories\Factory;
use Illuminate\Support\Facades\Hash;
@ -10,10 +11,13 @@ class UserFactory extends Factory
{
public function definition(): array
{
$username = $this->faker->unique()->regexify('[A-Za-z0-9]{8}');
return [
'email' => $this->faker->unique()->safeEmail(),
'username' => fake()->unique()->regexify('[A-Za-z0-9]{8}'),
'username' => $username,
'password' => Hash::make(config('myconfig.password_default')),
'referral_code' => generateReferralCode($username, User::max('id') + 1),
'status' => $this->faker->randomElement(UserStatus::cases()),
];
}

View File

@ -17,6 +17,7 @@ public function up(): void
$table->string('email', 100)->unique();
$table->string('username', 20)->unique();
$table->string('password', 97);
$table->string('referral_code', 20)->unique();
$table->enum('status', [UserStatus::values()])->default(UserStatus::ACTIVE)->comment(UserStatus::comment());
$table->timestamp('last_login_at')->nullable();
$table->timestamp('last_password_change_at')->nullable();

View File

@ -17,6 +17,7 @@ public function run(): void
'email' => 'project.pangestuyoga@gmail.com',
'username' => 'pangestu',
'password' => Hash::make(config('myconfig.password_default')),
'referral_code' => generateReferralCode('pangestu', 1),
]);
Employee::create([

View File

@ -26,6 +26,7 @@
->set('form.full_name', $data['full_name'])
->set('form.username', $data['username'])
->set('form.email', $data['email'])
->set('form.referral_code', $data['referral_code'])
->set('form.phone_number', $data['phone_number'])
->set('form.base_salary', $data['base_salary'])
->set('form.birthdate', $data['birthdate'])

View File

@ -33,6 +33,7 @@
->set('form.full_name', $data['full_name'])
->set('form.username', $data['username'])
->set('form.email', $data['email'])
->set('form.referral_code', $data['referral_code'])
->set('form.phone_number', $data['phone_number'])
->set('form.base_salary', $data['base_salary'])
->set('form.birthdate', $data['birthdate'])