User API Updates

Adds user profile links to the user API resource.
Fixes structure of relationship data and link sections.
Adds parameter to include related user data when requesting mod data.
This commit is contained in:
Refringe 2024-08-07 23:30:09 -04:00
parent c2f1eed35c
commit 0ed25fec03
Signed by: Refringe
SSH Key Fingerprint: SHA256:t865XsQpfTeqPRBMN2G6+N8wlDjkgUCZF3WGW6O9N/k
5 changed files with 46 additions and 17 deletions

View File

@ -0,0 +1,22 @@
<?php
namespace App\Http\Controllers\Api\V0;
use App\Http\Controllers\Controller;
use Illuminate\Support\Str;
class ApiController extends Controller
{
public static function shouldInclude(string $relationship): bool
{
$param = request()->get('include');
if (! $param) {
return false;
}
$includeValues = explode(',', Str::lower($param));
return in_array(Str::lower($relationship), $includeValues);
}
}

View File

@ -2,13 +2,12 @@
namespace App\Http\Controllers\Api\V0;
use App\Http\Controllers\Controller;
use App\Http\Requests\Api\V0\StoreModRequest;
use App\Http\Requests\Api\V0\UpdateModRequest;
use App\Http\Resources\Api\V0\ModResource;
use App\Models\Mod;
class ModController extends Controller
class ModController extends ApiController
{
/**
* Display a listing of the resource.

View File

@ -2,13 +2,12 @@
namespace App\Http\Controllers\Api\V0;
use App\Http\Controllers\Controller;
use App\Http\Requests\Api\V0\StoreUserRequest;
use App\Http\Requests\Api\V0\UpdateUserRequest;
use App\Http\Resources\Api\V0\UserResource;
use App\Models\User;
class UsersController extends Controller
class UsersController extends ApiController
{
/**
* Display a listing of the resource.

View File

@ -2,6 +2,7 @@
namespace App\Http\Resources\Api\V0;
use App\Http\Controllers\Api\V0\ApiController;
use App\Models\Mod;
use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\JsonResource;
@ -35,23 +36,29 @@ class ModResource extends JsonResource
'published_at' => $this->published_at,
],
'relationships' => [
'users' => [
'data' => $this->users->map(fn ($user) => [
'users' => $this->users->map(fn ($user) => [
'data' => [
'type' => 'user',
'id' => $user->id,
])->toArray(),
// TODO: Provide 'links.self' to user profile
//'links' => ['self' => '#'],
],
],
'links' => [
'self' => $user->profileUrl(),
],
])->toArray(),
'license' => [
'data' => [
'type' => 'license',
'id' => $this->license_id,
[
'data' => [
'type' => 'license',
'id' => $this->license_id,
],
],
],
],
'included' => $this->users->map(fn ($user) => new UserResource($user)),
'includes' => $this->when(
ApiController::shouldInclude('users'),
fn () => $this->users->map(fn ($user) => new UserResource($user))
),
// TODO: Provide 'included' data for attached 'license':
//new LicenseResource($this->license)

View File

@ -30,11 +30,13 @@ class UserResource extends JsonResource
],
],
],
// TODO: Provide 'included' data for attached 'user_role'
//'included' => [new UserRoleResource($this->role)],
// TODO: Provide 'links.self' to user profile:
//'links' => ['self' => '#'],
'links' => [
'self' => $this->profileUrl(),
],
];
}
}