Mahdee Rajon  subception

File "UserTableSeeder.php"

Full Path: /var/www/html/back/database/seeders/UserTableSeeder.php
File size: 2.08 KB
MIME-type: text/x-php
Charset: utf-8

<?php

declare(strict_types=1);

namespace Database\Seeders;

use App\Domain\Users\UserService;
use App\Enums\RoleEnum;
use App\Models\User;
use App\Models\User as UserEloquent;
use Illuminate\Database\Seeder;
use Illuminate\Http\UploadedFile;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\{Str};
use Laravel\Sanctum\Sanctum;

final class UserTableSeeder extends Seeder
{
    public function __construct(
        private readonly UserEloquent $user
    ) {
    }

    /**
     * Run the database seeds.
     */
    public function run(): void
    {
        $file = UploadedFile::fake()->image(
            name: uniqid() . '.jpg',
            width: 100,
            height: 100
        );

        /**
         * @var UserService $service
         */
        $service = app()->make(UserService::class);

        /** @var User $admin */
        $admin = $this->user->query()->create(attributes: [
            'first_name' => 'Петров',
            'last_name' => 'Петр',
            'patronymic' => 'Петрович',
            'email' => 'replay@top-it.ru',
            'email_verified_at' => now(),
            'password' => Hash::make(value: '#admin1234#'),
            'is_active' => true,
            'remember_token' => Str::random(length: 10)
        ]);
        $admin->token();
        Sanctum::$personalAccessTokenModel::query()->where('id', 1)->first()->update([
            'token' => hash('sha256', '1234567890'),
        ]);

        $admin->addMedia(file: $file)->toMediaCollection(
            collectionName: 'avatars',
            diskName: 'avatars'
        );

        $service->assignRole($admin, RoleEnum::ADMIN, null);

        $users = $this->user->factory()->count(count: 10)->create();

        $users->each(function (UserEloquent $user): void {
            $file = UploadedFile::fake()->image(
                name: uniqid() . '.jpg',
                width: 100,
                height: 100
            );

            $user->addMedia(file: $file)->toMediaCollection(
                collectionName: 'avatars',
                diskName: 'avatars'
            );
        });
    }
}