feat(auth): implement authentication endpoints with registration and login functionality

This commit is contained in:
2026-06-05 19:19:03 +03:30
parent 802326336a
commit 0ddd54dc66
15 changed files with 961 additions and 3 deletions

View File

@@ -24,9 +24,12 @@ class UserFactory extends Factory
*/
public function definition(): array
{
$email = fake()->unique()->safeEmail();
return [
'name' => fake()->name(),
'email' => fake()->unique()->safeEmail(),
'username' => fake()->unique()->userName(),
'email' => $email,
'mobile' => fake()->unique()->numerify('09#########'),
'email_verified_at' => now(),
'password' => static::$password ??= Hash::make('password'),

View File

@@ -0,0 +1,33 @@
<?php
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::create('personal_access_tokens', function (Blueprint $table) {
$table->id();
$table->morphs('tokenable');
$table->text('name');
$table->string('token', 64)->unique();
$table->text('abilities')->nullable();
$table->timestamp('last_used_at')->nullable();
$table->timestamp('expires_at')->nullable()->index();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('personal_access_tokens');
}
};

View File

@@ -0,0 +1,38 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Schema;
use Illuminate\Support\Str;
return new class extends Migration
{
public function up(): void
{
Schema::table('users', function (Blueprint $table) {
$table->string('username')->nullable()->unique()->after('name');
});
foreach (DB::table('users')->orderBy('id')->get() as $user) {
$base = Str::slug(Str::before($user->email, '@'), '') ?: 'user';
$username = $base;
$counter = 1;
while (DB::table('users')->where('username', $username)->where('id', '!=', $user->id)->exists()) {
$username = $base.$counter;
$counter++;
}
DB::table('users')->where('id', $user->id)->update(['username' => $username]);
}
}
public function down(): void
{
Schema::table('users', function (Blueprint $table) {
$table->dropUnique(['username']);
$table->dropColumn('username');
});
}
};