Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,6 @@ TODO
## Roadmap

- Morph support
- Through relation support
- Custom directives (Filters / sorting)
- Actions / Metrics
- Automatic Gates
Expand Down
14 changes: 6 additions & 8 deletions src/Http/Requests/MutateRequest.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
use Lomkit\Rest\Relations\BelongsTo;
use Lomkit\Rest\Relations\BelongsToMany;
use Lomkit\Rest\Relations\HasMany;
use Lomkit\Rest\Relations\HasManyThrough;
use Lomkit\Rest\Rules\CustomRulable;
use Lomkit\Rest\Rules\Includable;
use Lomkit\Rest\Rules\RequiredRelation;
Expand Down Expand Up @@ -69,18 +70,15 @@ protected function relationRules(Resource $resource, string $prefix = '', $loade
) {
$prefixRelation = $prefix.'.'.$relation->relation;

if ($relation instanceof BelongsToMany || $relation instanceof HasMany) {
if ($relation instanceof BelongsToMany || $relation instanceof HasMany || $relation instanceof HasManyThrough) {
$prefixRelation .= '.*';
}

$rules = array_merge(
$rules = array_merge_recursive(
$rules,
$relation->isRequiredOnCreation(
app()->make(RestRequest::class),
$relation->resource()
) ? [
$prefix => RequiredRelation::make()->resource($resource)
] : [],
[
$prefix.'.'.$relation->relation => $relation->rules($resource)
],
$this->mutateRules($relation->resource(), $prefixRelation, array_merge($loadedRelations, [$relation->relation]))
);
}
Expand Down
25 changes: 25 additions & 0 deletions src/Relations/HasManyThrough.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
<?php

namespace Lomkit\Rest\Relations;

use Closure;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
use Lomkit\Rest\Contracts\QueryBuilder;
use Lomkit\Rest\Contracts\RelationResource;
use Lomkit\Rest\Http\Resource;

class HasManyThrough extends Relation implements RelationResource
{
public function afterMutating(Model $model, Relation $relation, array $mutationRelations)
{
throw new \RuntimeException('You can\'t mutate a \'HasManyThrough\' relation.');
}

public function rules(Resource $resource)
{
return [
'prohibited'
];
}
}
25 changes: 25 additions & 0 deletions src/Relations/HasOneThrough.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
<?php

namespace Lomkit\Rest\Relations;

use Closure;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
use Lomkit\Rest\Contracts\QueryBuilder;
use Lomkit\Rest\Contracts\RelationResource;
use Lomkit\Rest\Http\Resource;

class HasOneThrough extends Relation implements RelationResource
{
public function afterMutating(Model $model, Relation $relation, array $mutationRelations)
{
throw new \RuntimeException('You can\'t mutate a \'HasOneThrough\' relation.');
}

public function rules(Resource $resource)
{
return [
'prohibited'
];
}
}
12 changes: 12 additions & 0 deletions src/Relations/MorphMany.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<?php

namespace Lomkit\Rest\Relations;

use Closure;
use Illuminate\Database\Eloquent\Builder;
use Lomkit\Rest\Contracts\RelationResource;

class MorphMany extends MorphRelation implements RelationResource
{

}
12 changes: 12 additions & 0 deletions src/Relations/MorphOne.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<?php

namespace Lomkit\Rest\Relations;

use Closure;
use Illuminate\Database\Eloquent\Builder;
use Lomkit\Rest\Contracts\RelationResource;

class MorphOne extends MorphRelation implements RelationResource
{

}
12 changes: 12 additions & 0 deletions src/Relations/MorphOneOfMany.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<?php

namespace Lomkit\Rest\Relations;

use Closure;
use Illuminate\Database\Eloquent\Builder;
use Lomkit\Rest\Contracts\RelationResource;

class MorphOneOfMany extends MorphRelation implements RelationResource
{

}
15 changes: 0 additions & 15 deletions src/Relations/MorphRelation.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,19 +11,4 @@
class MorphRelation extends Relation
{
use Makeable;

public function __construct($relation, $types)
{
$this->relation = $relation;
$this->types = $types;
}

// @TODO: handle morphs in general
// public function filter(Builder $query, $relation, $operator, $value, $boolean = 'and', Closure $callback = null)
// {
// return $query->hasMorph($query->getModel()->getTable().'.'.Str::beforeLast($relation, '.'), $this->types, '>=', 1, $boolean, function (Builder $query) use ($value, $operator, $relation, $callback) {
// $query->where(Str::afterLast($relation, '.'), $operator, $value);
// $callback($query);
// });
// }
}
6 changes: 5 additions & 1 deletion src/Relations/MorphTo.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,9 @@

class MorphTo extends MorphRelation implements RelationResource
{

public function __construct($relation, array $types)
{
$this->relation = $relation;
$this->types = $types;
}
}
13 changes: 13 additions & 0 deletions src/Relations/Relation.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
use Lomkit\Rest\Http\Resource;
use Lomkit\Rest\Relations\Traits\Constrained;
use Lomkit\Rest\Relations\Traits\Mutates;
use Lomkit\Rest\Rules\RequiredRelation;

class Relation
{
Expand Down Expand Up @@ -60,4 +61,16 @@ public function fromResource(Resource $fromResource) {
$this->fromResource = $fromResource;
});
}

public function rules(Resource $resource) {
$rules = [];

if ($this->isRequiredOnCreation(
app()->make(RestRequest::class)
)) {
$rules[] = RequiredRelation::make()->resource($resource);
}

return $rules;
}
}
Loading