feature(auth): add columns to users table

- add extra columns in users table
- add traits for enum values as array
- refactor enums to specific namespace
This commit is contained in:
kusowl 2026-01-08 19:10:15 +05:30
parent a8ffb42947
commit ed914b531d
5 changed files with 62 additions and 3 deletions

14
app/Enums/UserStatus.php Normal file
View File

@ -0,0 +1,14 @@
<?php
namespace App\Enums;
use App\Traits\EnumAsArray;
enum UserStatus: string
{
use EnumAsArray;
case Active = 'active';
case Blocked = 'blocked';
case Pending = 'pending';
}

View File

@ -1,9 +1,13 @@
<?php
namespace App;
namespace App\Enums;
use App\Traits\EnumAsArray;
enum UserTypes: string
{
use EnumAsArray;
case Admin = 'admin';
case User = 'user';
case Broker = 'broker';

View File

@ -0,0 +1,11 @@
<?php
namespace App\Traits;
trait EnumAsArray
{
public static function values(): array
{
return array_column(self::cases(), 'value');
}
}

View File

@ -0,0 +1,30 @@
<?php
use App\Enums\UserStatus;
use App\Enums\UserTypes;
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration {
/**
* Run the migrations.
*/
public function up(): void
{
Schema::table('users', function (Blueprint $table) {
$table->enum('status', UserStatus::values());
$table->enum('role', UserTypes::values());
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('users', function (Blueprint $table) {
$table->dropColumn('status', 'role');
});
}
};

View File

@ -1,5 +1,5 @@
@php
$options = \App\UserTypes::labels();
$options = \App\Enums\UserTypes::labels();
@endphp
<x-layout>
<section class="bg-linear-135 h-screen from-[#EFF6FF] to-[#FCF3F8] flex justify-center items-center">
@ -10,7 +10,7 @@
<p class=" text-accent-600 text-sm">Join {{config('app.name')}} and start discovering great deals</p>
</div>
<form action="" class="flex flex-col space-y-5">
<x-input label="Full Name" name="name" placeholder="Jhon Doe" />
<x-input label="Full Name" name="name" placeholder="Jhon Doe"/>
<x-input label="Email" name="email" type="email" placeholder="you@example.com"/>
<x-select :options="$options" value-key="value" label-key="label" label="Account Type"/>
<x-input label="Password" name="password" type="password"/>