diff --git a/app/JsonApi/Adapters/UserAdapter.php b/app/JsonApi/Adapters/UserAdapter.php index 9da07f1..498c025 100644 --- a/app/JsonApi/Adapters/UserAdapter.php +++ b/app/JsonApi/Adapters/UserAdapter.php @@ -4,6 +4,7 @@ namespace App\JsonApi\Adapters; use App\Models\User; use CloudCreativity\LaravelJsonApi\Eloquent\AbstractAdapter; +use CloudCreativity\LaravelJsonApi\Eloquent\HasMany; use CloudCreativity\LaravelJsonApi\Pagination\StandardStrategy; use Illuminate\Support\Collection; @@ -41,4 +42,12 @@ class UserAdapter extends AbstractAdapter $this->filterWithScopes($query, $filters); } + /** + * Step relationships. + */ + protected function journalEntries(): HasMany + { + return $this->hasMany(); + } + } diff --git a/app/JsonApi/Schemas/UserSchema.php b/app/JsonApi/Schemas/UserSchema.php index 383af76..8781d3b 100644 --- a/app/JsonApi/Schemas/UserSchema.php +++ b/app/JsonApi/Schemas/UserSchema.php @@ -32,4 +32,20 @@ class UserSchema extends SchemaProvider 'updatedAt' => $resource->updated_at, ]; } + + /** + * @inheritdoc + */ + public function getRelationships($resource, $isPrimary, array $includeRelationships): array + { + return [ + 'journal-entries' => [ + self::SHOW_RELATED => true, + self::SHOW_DATA => isset($includeRelationships['journal-entries']), + self::DATA => function () use ($resource) { + return $resource->ingredientAmounts; + }, + ], + ]; + } } diff --git a/app/Models/User.php b/app/Models/User.php index a384712..11a3248 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -74,6 +74,13 @@ final class User extends Authenticatable return $this->hasMany(Goal::class); } + /** + * Get the User's journal entries. + */ + public function journalEntries(): HasMany { + return $this->hasMany(JournalEntry::class); + } + /** * Get User's past, present, and future goals. * diff --git a/routes/api.php b/routes/api.php index fae9922..818a32f 100644 --- a/routes/api.php +++ b/routes/api.php @@ -41,7 +41,7 @@ JsonApi::register('v1')->routes(function ($api) { $relations->hasOne('recipe')->readOnly(); })->readOnly(); $api->resource('tags')->readOnly(); -// $api->resource('users')->relationships(function ($relations) { -// $relations->hasMany('journal-entries')->readOnly(); -// })->readOnly(); + $api->resource('users')->relationships(function ($relations) { + $relations->hasMany('journal-entries')->readOnly(); + })->readOnly(); }); diff --git a/tests/Feature/JsonApi/UserApiTest.php b/tests/Feature/JsonApi/UserApiTest.php new file mode 100644 index 0000000..50e0f3b --- /dev/null +++ b/tests/Feature/JsonApi/UserApiTest.php @@ -0,0 +1,40 @@ +createInstances(9); + $index_url = route($this->indexRouteName); + $response = $this->get($index_url); + $response->assertOk(); + $response->assertJson(['data' => true]); + $response->assertJsonCount(10, 'data'); + } + +}