File "UserShowResource.php"

Full Path: /var/www/html/back/app/Http/UserShowResource.php
File size: 1.42 KB
MIME-type: text/x-php
Charset: utf-8

<?php

namespace App\Http\Resources\User;

use App\Enums\RoleEnum;
use App\Enums\RolePermissionsEnum;
use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\JsonResource;

class UserShowResource extends JsonResource
{
    public function toArray(Request $request): array
    {
        return [
            'id' => $this->id,
            'first_name' => $this->first_name,
            'last_name' => $this->last_name,
            'email' => $this->email,
            'start_page' => $this->start_page,
            'is_blocked' => $this->is_blocked,
            'image' => !empty($this->getFirstMediaUrl('avatars')) ? $this->getFirstMediaUrl('avatars') : null,
            'models' => $this->roles->map(function ($role) {
                $roleEnum = RoleEnum::tryFrom($role->role);
                $enumPermissions = null;

                if ($role->permissions) {
                    $permissionsValue = is_array($role->permissions)
                        ? implode(',', $role->permissions)
                        : $role->permissions;

                    $enumPermissions = RolePermissionsEnum::fromCommaSeparated($permissionsValue);
                }

                return [
                    'name' => $role->model->name ?? null,
                    'role' => $roleEnum ? RoleEnum::options()[$roleEnum->value] : null,
                    'permissions' => $enumPermissions ?? null,
                ];
            }),
        ];
    }
}