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; namespace App\Http\Controllers\Api\V0;
use App\Http\Controllers\Controller;
use App\Http\Requests\Api\V0\StoreModRequest; use App\Http\Requests\Api\V0\StoreModRequest;
use App\Http\Requests\Api\V0\UpdateModRequest; use App\Http\Requests\Api\V0\UpdateModRequest;
use App\Http\Resources\Api\V0\ModResource; use App\Http\Resources\Api\V0\ModResource;
use App\Models\Mod; use App\Models\Mod;
class ModController extends Controller class ModController extends ApiController
{ {
/** /**
* Display a listing of the resource. * Display a listing of the resource.

View File

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

View File

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

View File

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