Skip to content

Commit 2b0c31e

Browse files
committed
Add store contract
1 parent 1241a83 commit 2b0c31e

File tree

10 files changed

+126
-63
lines changed

10 files changed

+126
-63
lines changed

src/Contracts/Http/Server.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@
1717

1818
namespace LaravelJsonApi\Contracts\Http;
1919

20+
use LaravelJsonApi\Contracts\Encoder\Encoder;
2021
use LaravelJsonApi\Contracts\Resources\Container as ResourceContainer;
2122
use LaravelJsonApi\Contracts\Schema\Container as SchemaContainer;
22-
use LaravelJsonApi\Contracts\Encoder\Encoder;
23-
use LaravelJsonApi\Core\Store\Store;
23+
use LaravelJsonApi\Contracts\Store\Store;
2424

2525
interface Server
2626
{

src/Contracts/Store/Store.php

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
<?php
2+
/**
3+
* Copyright 2020 Cloud Creativity Limited
4+
*
5+
* Licensed under the Apache License, Version 2.0 (the "License");
6+
* you may not use this file except in compliance with the License.
7+
* You may obtain a copy of the License at
8+
*
9+
* http://www.apache.org/licenses/LICENSE-2.0
10+
*
11+
* Unless required by applicable law or agreed to in writing, software
12+
* distributed under the License is distributed on an "AS IS" BASIS,
13+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
* See the License for the specific language governing permissions and
15+
* limitations under the License.
16+
*/
17+
18+
namespace LaravelJsonApi\Contracts\Store;
19+
20+
use Illuminate\Database\Eloquent\Model;
21+
22+
interface Store
23+
{
24+
/**
25+
* Get a model by JSON API resource type and id.
26+
*
27+
* @param string $resourceType
28+
* @param string $resourceId
29+
* @return Model|mixed|null
30+
*/
31+
public function find(string $resourceType, string $resourceId);
32+
33+
/**
34+
* Does a model exist for the supplied resource type and id?
35+
*
36+
* @param string $resourceType
37+
* @param string $resourceId
38+
* @return bool
39+
*/
40+
public function exists(string $resourceType, string $resourceId): bool;
41+
42+
/**
43+
* Query all resources by JSON API resource type.
44+
*
45+
* @param string $resourceType
46+
* @return QueryAllBuilder
47+
*/
48+
public function queryAll(string $resourceType): QueryAllBuilder;
49+
50+
/**
51+
* Query one resource by JSON API resource type.
52+
*
53+
* @param string $resourceType
54+
* @param Model|string $modelOrResourceId
55+
* @return QueryOneBuilder
56+
*/
57+
public function queryOne(string $resourceType, $modelOrResourceId): QueryOneBuilder;
58+
59+
/**
60+
* Create a new resource.
61+
*
62+
* @param string $resourceType
63+
* @return ResourceBuilder
64+
*/
65+
public function create(string $resourceType): ResourceBuilder;
66+
67+
/**
68+
* Update an existing resource.
69+
*
70+
* @param string $resourceType
71+
* @param Model|mixed|string $modelOrResourceId
72+
* @return ResourceBuilder
73+
*/
74+
public function update(string $resourceType, $modelOrResourceId): ResourceBuilder;
75+
76+
/**
77+
* @param string $resourceType
78+
* @param $modelOrResourceId
79+
* @return void
80+
*/
81+
public function delete(string $resourceType, $modelOrResourceId): void;
82+
83+
/**
84+
* Access a resource repository by its JSON API resource type.
85+
*
86+
* @param string $resourceType
87+
* @return Repository
88+
*/
89+
public function resources(string $resourceType): Repository;
90+
}

src/Core/Store/Store.php

Lines changed: 10 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919

2020
namespace LaravelJsonApi\Core\Store;
2121

22-
use Illuminate\Database\Eloquent\Model;
2322
use LaravelJsonApi\Contracts\Schema\Container;
2423
use LaravelJsonApi\Contracts\Store\CreatesResources;
2524
use LaravelJsonApi\Contracts\Store\DeletesResources;
@@ -29,11 +28,12 @@
2928
use LaravelJsonApi\Contracts\Store\QueryOneBuilder;
3029
use LaravelJsonApi\Contracts\Store\Repository;
3130
use LaravelJsonApi\Contracts\Store\ResourceBuilder;
31+
use LaravelJsonApi\Contracts\Store\Store as StoreContract;
3232
use LaravelJsonApi\Contracts\Store\UpdatesResources;
3333
use LaravelJsonApi\Core\Support\Str;
3434
use LogicException;
3535

36-
class Store
36+
class Store implements StoreContract
3737
{
3838

3939
/**
@@ -64,11 +64,7 @@ public function __call(string $name, $arguments)
6464
}
6565

6666
/**
67-
* Get a model by JSON API resource type and id.
68-
*
69-
* @param string $resourceType
70-
* @param string $resourceId
71-
* @return Model|mixed|null
67+
* @inheritDoc
7268
*/
7369
public function find(string $resourceType, string $resourceId)
7470
{
@@ -78,11 +74,7 @@ public function find(string $resourceType, string $resourceId)
7874
}
7975

8076
/**
81-
* Does a model exist for the supplied resource type and id?
82-
*
83-
* @param string $resourceType
84-
* @param string $resourceId
85-
* @return bool
77+
* @inheritDoc
8678
*/
8779
public function exists(string $resourceType, string $resourceId): bool
8880
{
@@ -92,10 +84,7 @@ public function exists(string $resourceType, string $resourceId): bool
9284
}
9385

9486
/**
95-
* Query all resources by JSON API resource type.
96-
*
97-
* @param string $resourceType
98-
* @return QueryAllBuilder
87+
* @inheritDoc
9988
*/
10089
public function queryAll(string $resourceType): QueryAllBuilder
10190
{
@@ -109,11 +98,7 @@ public function queryAll(string $resourceType): QueryAllBuilder
10998
}
11099

111100
/**
112-
* Query one resource by JSON API resource type.
113-
*
114-
* @param string $resourceType
115-
* @param Model|string $modelOrResourceId
116-
* @return QueryOneBuilder
101+
* @inheritDoc
117102
*/
118103
public function queryOne(string $resourceType, $modelOrResourceId): QueryOneBuilder
119104
{
@@ -127,10 +112,7 @@ public function queryOne(string $resourceType, $modelOrResourceId): QueryOneBuil
127112
}
128113

129114
/**
130-
* Create a new resource.
131-
*
132-
* @param string $resourceType
133-
* @return ResourceBuilder
115+
* @inheritDoc
134116
*/
135117
public function create(string $resourceType): ResourceBuilder
136118
{
@@ -144,11 +126,7 @@ public function create(string $resourceType): ResourceBuilder
144126
}
145127

146128
/**
147-
* Update an existing resource.
148-
*
149-
* @param string $resourceType
150-
* @param Model|mixed|string $modelOrResourceId
151-
* @return ResourceBuilder
129+
* @inheritDoc
152130
*/
153131
public function update(string $resourceType, $modelOrResourceId): ResourceBuilder
154132
{
@@ -162,9 +140,7 @@ public function update(string $resourceType, $modelOrResourceId): ResourceBuilde
162140
}
163141

164142
/**
165-
* @param string $resourceType
166-
* @param $modelOrResourceId
167-
* @return void
143+
* @inheritDoc
168144
*/
169145
public function delete(string $resourceType, $modelOrResourceId): void
170146
{
@@ -179,10 +155,7 @@ public function delete(string $resourceType, $modelOrResourceId): void
179155
}
180156

181157
/**
182-
* Access a resource repository by its JSON API resource type.
183-
*
184-
* @param string $resourceType
185-
* @return Repository
158+
* @inheritDoc
186159
*/
187160
public function resources(string $resourceType): Repository
188161
{

src/Http/Controllers/Actions/Destroy.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@
2020
namespace LaravelJsonApi\Http\Controllers\Actions;
2121

2222
use Illuminate\Http\Response;
23-
use LaravelJsonApi\Core\Store\Store as ResourceStore;
24-
use LaravelJsonApi\Routing\Route;
23+
use LaravelJsonApi\Contracts\Routing\Route;
24+
use LaravelJsonApi\Contracts\Store\Store as StoreContract;
2525

2626
trait Destroy
2727
{
@@ -30,10 +30,10 @@ trait Destroy
3030
* Destroy a resource.
3131
*
3232
* @param Route $route
33-
* @param ResourceStore $store
33+
* @param StoreContract $store
3434
* @return Response
3535
*/
36-
public function destroy(Route $route, ResourceStore $store): Response
36+
public function destroy(Route $route, StoreContract $store): Response
3737
{
3838
$store->delete(
3939
$route->resourceType(),

src/Http/Controllers/Actions/FetchMany.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,10 @@
2020
namespace LaravelJsonApi\Http\Controllers\Actions;
2121

2222
use Illuminate\Contracts\Support\Responsable;
23+
use LaravelJsonApi\Contracts\Routing\Route;
24+
use LaravelJsonApi\Contracts\Store\Store as StoreContract;
2325
use LaravelJsonApi\Core\Resources\DataResponse;
24-
use LaravelJsonApi\Core\Store\Store as ResourceStore;
2526
use LaravelJsonApi\Http\Requests\ResourceQuery;
26-
use LaravelJsonApi\Routing\Route;
2727

2828
trait FetchMany
2929
{
@@ -32,10 +32,10 @@ trait FetchMany
3232
* Fetch zero to many JSON API resources.
3333
*
3434
* @param Route $route
35-
* @param ResourceStore $store
35+
* @param StoreContract $store
3636
* @return Responsable
3737
*/
38-
public function index(Route $route, ResourceStore $store): Responsable
38+
public function index(Route $route, StoreContract $store): Responsable
3939
{
4040
$request = ResourceQuery::queryMany(
4141
$resourceType = $route->resourceType()

src/Http/Controllers/Actions/FetchOne.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,10 @@
2020
namespace LaravelJsonApi\Http\Controllers\Actions;
2121

2222
use Illuminate\Contracts\Support\Responsable;
23+
use LaravelJsonApi\Contracts\Routing\Route;
24+
use LaravelJsonApi\Contracts\Store\Store as StoreContract;
2325
use LaravelJsonApi\Core\Resources\DataResponse;
24-
use LaravelJsonApi\Core\Store\Store as ResourceStore;
2526
use LaravelJsonApi\Http\Requests\ResourceQuery;
26-
use LaravelJsonApi\Routing\Route;
2727

2828
trait FetchOne
2929
{
@@ -32,10 +32,10 @@ trait FetchOne
3232
* Fetch one JSON API resource.
3333
*
3434
* @param Route $route
35-
* @param ResourceStore $store
35+
* @param StoreContract $store
3636
* @return Responsable
3737
*/
38-
public function read(Route $route, ResourceStore $store): Responsable
38+
public function read(Route $route, StoreContract $store): Responsable
3939
{
4040
$request = ResourceQuery::queryOne(
4141
$resourceType = $route->resourceType()

src/Http/Controllers/Actions/Store.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,11 @@
2020
namespace LaravelJsonApi\Http\Controllers\Actions;
2121

2222
use Illuminate\Contracts\Support\Responsable;
23+
use LaravelJsonApi\Contracts\Routing\Route;
24+
use LaravelJsonApi\Contracts\Store\Store as StoreContract;
2325
use LaravelJsonApi\Core\Resources\DataResponse;
24-
use LaravelJsonApi\Core\Store\Store as ResourceStore;
2526
use LaravelJsonApi\Http\Requests\ResourceQuery;
2627
use LaravelJsonApi\Http\Requests\ResourceRequest;
27-
use LaravelJsonApi\Routing\Route;
2828

2929
trait Store
3030
{
@@ -33,10 +33,10 @@ trait Store
3333
* Create a new resource.
3434
*
3535
* @param Route $route
36-
* @param ResourceStore $store
36+
* @param StoreContract $store
3737
* @return Responsable
3838
*/
39-
public function store(Route $route, ResourceStore $store): Responsable
39+
public function store(Route $route, StoreContract $store): Responsable
4040
{
4141
$request = ResourceRequest::forResource(
4242
$resourceType = $route->resourceType()

src/Http/Controllers/Actions/Update.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,11 @@
2020
namespace LaravelJsonApi\Http\Controllers\Actions;
2121

2222
use Illuminate\Contracts\Support\Responsable;
23+
use LaravelJsonApi\Contracts\Routing\Route;
24+
use LaravelJsonApi\Contracts\Store\Store as StoreContract;
2325
use LaravelJsonApi\Core\Resources\DataResponse;
24-
use LaravelJsonApi\Core\Store\Store as ResourceStore;
2526
use LaravelJsonApi\Http\Requests\ResourceQuery;
2627
use LaravelJsonApi\Http\Requests\ResourceRequest;
27-
use LaravelJsonApi\Routing\Route;
2828

2929
trait Update
3030
{
@@ -33,10 +33,10 @@ trait Update
3333
* Update an existing resource.
3434
*
3535
* @param Route $route
36-
* @param ResourceStore $store
36+
* @param StoreContract $store
3737
* @return Responsable
3838
*/
39-
public function update(Route $route, ResourceStore $store): Responsable
39+
public function update(Route $route, StoreContract $store): Responsable
4040
{
4141
$request = ResourceRequest::forResource(
4242
$resourceType = $route->resourceType()

src/Http/Server.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
use LaravelJsonApi\Contracts\Schema\Container as SchemaContainerContract;
2828
use LaravelJsonApi\Contracts\Encoder\Encoder;
2929
use LaravelJsonApi\Contracts\Encoder\Factory as EncoderFactory;
30+
use LaravelJsonApi\Contracts\Store\Store as StoreContract;
3031
use LaravelJsonApi\Core\Resources\Container as ResourceContainer;
3132
use LaravelJsonApi\Core\Resources\Factory as ResourceFactory;
3233
use LaravelJsonApi\Core\Schema\Container as SchemaContainer;
@@ -118,7 +119,7 @@ public function resources(): ResourceContainerContract
118119
/**
119120
* @inheritDoc
120121
*/
121-
public function store(): Store
122+
public function store(): StoreContract
122123
{
123124
return new Store($this->schemas());
124125
}

src/ServiceProvider.php

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,8 @@
2323
use Illuminate\Routing\Router;
2424
use Illuminate\Support\ServiceProvider as BaseServiceProvider;
2525
use LaravelJsonApi\Contracts;
26-
use LaravelJsonApi\Encoder\Neomerx\Factory as EncoderFactory;
2726
use LaravelJsonApi\Core\JsonApiService;
28-
use LaravelJsonApi\Core\Store\Store;
27+
use LaravelJsonApi\Encoder\Neomerx\Factory as EncoderFactory;
2928
use LaravelJsonApi\Http\Middleware\BootJsonApi;
3029
use LaravelJsonApi\Http\Server;
3130
use LaravelJsonApi\Http\ServerRepository;
@@ -79,7 +78,7 @@ private function bindHttp(): void
7978
$this->app->bind(Contracts\Http\Repository::class, ServerRepository::class);
8079
$this->app->bind(Contracts\Http\Server::class, Server::class);
8180

82-
$this->app->bind(Store::class, static function (Application $app) {
81+
$this->app->bind(Contracts\Store\Store::class, static function (Application $app) {
8382
return $app->make(Contracts\Http\Server::class)->store();
8483
});
8584

0 commit comments

Comments
 (0)