mirror of
https://github.com/appwrite/appwrite
synced 2026-05-23 00:49:02 +00:00
refactor: separate validation from normalization in validateRelationship
This commit is contained in:
parent
aed9816d1e
commit
f66e0c2ff5
4 changed files with 21 additions and 13 deletions
|
|
@ -8,7 +8,6 @@ use Appwrite\Platform\Modules\Databases\Http\Databases\Action as DatabasesAction
|
|||
use Appwrite\Utopia\Database\Validator\CustomId;
|
||||
use Utopia\Database\Database;
|
||||
use Utopia\Database\Document;
|
||||
use Utopia\Database\Helpers\ID;
|
||||
use Utopia\Database\Validator\Authorization;
|
||||
|
||||
abstract class Action extends DatabasesAction
|
||||
|
|
@ -252,10 +251,9 @@ abstract class Action extends DatabasesAction
|
|||
}
|
||||
|
||||
/**
|
||||
* Validate and normalize a relationship value.
|
||||
* Returns the relation ID and normalized relation as an array.
|
||||
* Validate a relationship value and its document ID.
|
||||
*/
|
||||
protected function validateRelationship(mixed $relation): array
|
||||
protected function validateRelationship(mixed $relation): void
|
||||
{
|
||||
$relationId = null;
|
||||
|
||||
|
|
@ -263,10 +261,7 @@ abstract class Action extends DatabasesAction
|
|||
$relationId = $relation->getAttribute('$id');
|
||||
} elseif (\is_string($relation)) {
|
||||
$relationId = $relation;
|
||||
} elseif (\is_array($relation) && \array_values($relation) !== $relation) {
|
||||
$relation['$id'] = ID::unique();
|
||||
$relation = new Document($relation);
|
||||
} else {
|
||||
} elseif (!(\is_array($relation) && \array_values($relation) !== $relation)) {
|
||||
throw new Exception(Exception::RELATIONSHIP_VALUE_INVALID, 'Relationship value must be an object or document ID string, not ' . \gettype($relation));
|
||||
}
|
||||
|
||||
|
|
@ -276,8 +271,6 @@ abstract class Action extends DatabasesAction
|
|||
throw new Exception(Exception::GENERAL_BAD_REQUEST, $validator->getDescription());
|
||||
}
|
||||
}
|
||||
|
||||
return [$relationId, $relation];
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -309,7 +309,12 @@ class Create extends Action
|
|||
);
|
||||
|
||||
foreach ($relations as &$relation) {
|
||||
[$relationId, $relation] = $this->validateRelationship($relation);
|
||||
$this->validateRelationship($relation);
|
||||
|
||||
if (\is_array($relation) && \array_values($relation) !== $relation) {
|
||||
$relation['$id'] = ID::unique();
|
||||
$relation = new Document($relation);
|
||||
}
|
||||
|
||||
if ($relation instanceof Document) {
|
||||
$relation = $this->removeReadonlyAttributes($relation, $isAPIKey || $isPrivilegedUser);
|
||||
|
|
|
|||
|
|
@ -201,7 +201,12 @@ class Update extends Action
|
|||
);
|
||||
|
||||
foreach ($relations as &$relation) {
|
||||
[$relationId, $relation] = $this->validateRelationship($relation);
|
||||
$this->validateRelationship($relation);
|
||||
|
||||
if (\is_array($relation) && \array_values($relation) !== $relation) {
|
||||
$relation['$id'] = ID::unique();
|
||||
$relation = new Document($relation);
|
||||
}
|
||||
|
||||
if ($relation instanceof Document) {
|
||||
$relation = $this->removeReadonlyAttributes($relation, $isAPIKey || $isPrivilegedUser);
|
||||
|
|
|
|||
|
|
@ -211,7 +211,12 @@ class Upsert extends Action
|
|||
);
|
||||
|
||||
foreach ($relations as &$relation) {
|
||||
[$relationId, $relation] = $this->validateRelationship($relation);
|
||||
$this->validateRelationship($relation);
|
||||
|
||||
if (\is_array($relation) && \array_values($relation) !== $relation) {
|
||||
$relation['$id'] = ID::unique();
|
||||
$relation = new Document($relation);
|
||||
}
|
||||
|
||||
if ($relation instanceof Document) {
|
||||
$relation = $this->removeReadonlyAttributes($relation, $isAPIKey || $isPrivilegedUser);
|
||||
|
|
|
|||
Loading…
Reference in a new issue