diff --git a/app/Http/Controllers/Api/V0/ApiController.php b/app/Http/Controllers/Api/V0/ApiController.php new file mode 100644 index 0000000..e6c3955 --- /dev/null +++ b/app/Http/Controllers/Api/V0/ApiController.php @@ -0,0 +1,22 @@ +get('include'); + + if (! $param) { + return false; + } + + $includeValues = explode(',', Str::lower($param)); + + return in_array(Str::lower($relationship), $includeValues); + } +} diff --git a/app/Http/Controllers/Api/V0/ModController.php b/app/Http/Controllers/Api/V0/ModController.php index 2711ce1..1f69eb2 100644 --- a/app/Http/Controllers/Api/V0/ModController.php +++ b/app/Http/Controllers/Api/V0/ModController.php @@ -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. diff --git a/app/Http/Controllers/Api/V0/UsersController.php b/app/Http/Controllers/Api/V0/UsersController.php index d876348..a93f52c 100644 --- a/app/Http/Controllers/Api/V0/UsersController.php +++ b/app/Http/Controllers/Api/V0/UsersController.php @@ -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. diff --git a/app/Http/Resources/Api/V0/ModResource.php b/app/Http/Resources/Api/V0/ModResource.php index 42fd8d4..6b2d2e9 100644 --- a/app/Http/Resources/Api/V0/ModResource.php +++ b/app/Http/Resources/Api/V0/ModResource.php @@ -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) diff --git a/app/Http/Resources/Api/V0/UserResource.php b/app/Http/Resources/Api/V0/UserResource.php index f4e2e68..f4e63d1 100644 --- a/app/Http/Resources/Api/V0/UserResource.php +++ b/app/Http/Resources/Api/V0/UserResource.php @@ -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(), + ], ]; } }