feat: Use laravel-data example instead of Resources

main
Flycro 2023-11-11 14:57:25 +01:00
parent eac670642a
commit 2c5934c4ed
3 changed files with 50 additions and 2 deletions

12
app/Data/RoleData.php Normal file
View File

@ -0,0 +1,12 @@
<?php
namespace App\Data;
use Spatie\LaravelData\Data;
class RoleData extends Data
{
public function __construct(
public string $name,
) {}
}

36
app/Data/UserData.php Normal file
View File

@ -0,0 +1,36 @@
<?php
namespace App\Data;
use App\Models\User;
use Spatie\LaravelData\Attributes\DataCollectionOf;
use Spatie\LaravelData\Data;
use Spatie\LaravelData\DataCollection;
use Spatie\LaravelData\Lazy;
use Spatie\LaravelData\Optional;
class UserData extends Data
{
public function __construct(
public int $id,
public string $name,
public string $email,
#[DataCollectionOf(RoleData::class)]
public Lazy|DataCollection $roles,
public string $created_at,
public string $updated_at,
) {}
public static function fromModel(User $user): self
{
return new self(
$user->id,
$user->name,
$user->email,
Lazy::whenLoaded('roles',$user, fn() => RoleData::collection($user->roles)),
$user->created_at,
$user->updated_at,
);
}
}

View File

@ -1,5 +1,6 @@
<?php <?php
use App\Data\UserData;
use App\Http\Resources\UserResource; use App\Http\Resources\UserResource;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route; use Illuminate\Support\Facades\Route;
@ -16,6 +17,5 @@ use Illuminate\Support\Facades\Route;
*/ */
Route::middleware(['auth:sanctum'])->get('/user', function (Request $request) { Route::middleware(['auth:sanctum'])->get('/user', function (Request $request) {
return UserData::from($request->user()->load('roles'));
return new UserResource($request->user()->load('roles', 'permissions'));
}); });