Use specific document validator for select queries on get document
This commit is contained in:
parent
2e44434ab8
commit
7a089f8861
5 changed files with 22 additions and 23 deletions
|
@ -1,7 +1,5 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
use Appwrite\Utopia\Database\Validator\Query\Filter;
|
|
||||||
use Appwrite\Utopia\Database\Validator\Query\Select;
|
|
||||||
use Utopia\App;
|
use Utopia\App;
|
||||||
use Appwrite\Event\Delete;
|
use Appwrite\Event\Delete;
|
||||||
use Appwrite\Extend\Exception;
|
use Appwrite\Extend\Exception;
|
||||||
|
@ -47,6 +45,7 @@ use Appwrite\Event\Event;
|
||||||
use Appwrite\Utopia\Database\Validator\Queries;
|
use Appwrite\Utopia\Database\Validator\Queries;
|
||||||
use Appwrite\Utopia\Database\Validator\Queries\Collections;
|
use Appwrite\Utopia\Database\Validator\Queries\Collections;
|
||||||
use Appwrite\Utopia\Database\Validator\Queries\Databases;
|
use Appwrite\Utopia\Database\Validator\Queries\Databases;
|
||||||
|
use Appwrite\Utopia\Database\Validator\Queries\Document as DocumentValidator;
|
||||||
use Appwrite\Utopia\Database\Validator\Queries\Documents;
|
use Appwrite\Utopia\Database\Validator\Queries\Documents;
|
||||||
use Utopia\Config\Config;
|
use Utopia\Config\Config;
|
||||||
use MaxMind\Db\Reader;
|
use MaxMind\Db\Reader;
|
||||||
|
@ -2821,7 +2820,7 @@ App::get('/v1/databases/:databaseId/collections/:collectionId/documents/:documen
|
||||||
}
|
}
|
||||||
|
|
||||||
// Validate queries
|
// Validate queries
|
||||||
$queriesValidator = new Queries(new Select($collection->getAttribute('attributes')));
|
$queriesValidator = new DocumentValidator($collection->getAttribute('attributes'));
|
||||||
$validQueries = $queriesValidator->isValid($queries);
|
$validQueries = $queriesValidator->isValid($queries);
|
||||||
if (!$validQueries) {
|
if (!$validQueries) {
|
||||||
throw new Exception(Exception::GENERAL_ARGUMENT_INVALID, $queriesValidator->getDescription());
|
throw new Exception(Exception::GENERAL_ARGUMENT_INVALID, $queriesValidator->getDescription());
|
||||||
|
|
|
@ -20,6 +20,7 @@ class Base extends Queries
|
||||||
*
|
*
|
||||||
* @param string $collection
|
* @param string $collection
|
||||||
* @param string[] $allowedAttributes
|
* @param string[] $allowedAttributes
|
||||||
|
* @throws \Exception
|
||||||
*/
|
*/
|
||||||
public function __construct(string $collection, array $allowedAttributes)
|
public function __construct(string $collection, array $allowedAttributes)
|
||||||
{
|
{
|
||||||
|
|
|
@ -10,40 +10,34 @@ use Appwrite\Utopia\Database\Validator\Query\Offset;
|
||||||
use Appwrite\Utopia\Database\Validator\Query\Order;
|
use Appwrite\Utopia\Database\Validator\Query\Order;
|
||||||
use Appwrite\Utopia\Database\Validator\Query\Select;
|
use Appwrite\Utopia\Database\Validator\Query\Select;
|
||||||
use Utopia\Database\Database;
|
use Utopia\Database\Database;
|
||||||
use Utopia\Database\Document;
|
|
||||||
|
|
||||||
class Documents extends Queries
|
class Document extends Queries
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Expression constructor
|
* Expression constructor
|
||||||
*
|
*
|
||||||
* @param Document[] $attributes
|
* @param array $attributes
|
||||||
* @throws \Exception
|
* @throws \Exception
|
||||||
*/
|
*/
|
||||||
public function __construct(array $attributes)
|
public function __construct(array $attributes)
|
||||||
{
|
{
|
||||||
$attributes[] = new Document([
|
$attributes[] = new \Utopia\Database\Document([
|
||||||
'key' => '$id',
|
'key' => '$id',
|
||||||
'type' => Database::VAR_STRING,
|
'type' => Database::VAR_STRING,
|
||||||
'array' => false,
|
'array' => false,
|
||||||
]);
|
]);
|
||||||
$attributes[] = new Document([
|
$attributes[] = new \Utopia\Database\Document([
|
||||||
'key' => '$createdAt',
|
'key' => '$createdAt',
|
||||||
'type' => Database::VAR_DATETIME,
|
'type' => Database::VAR_DATETIME,
|
||||||
'array' => false,
|
'array' => false,
|
||||||
]);
|
]);
|
||||||
$attributes[] = new Document([
|
$attributes[] = new \Utopia\Database\Document([
|
||||||
'key' => '$updatedAt',
|
'key' => '$updatedAt',
|
||||||
'type' => Database::VAR_DATETIME,
|
'type' => Database::VAR_DATETIME,
|
||||||
'array' => false,
|
'array' => false,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$validators = [
|
$validators = [
|
||||||
new Limit(),
|
|
||||||
new Offset(),
|
|
||||||
new Cursor(),
|
|
||||||
new Filter($attributes),
|
|
||||||
new Order($attributes),
|
|
||||||
new Select($attributes),
|
new Select($attributes),
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
|
@ -39,12 +39,12 @@ class Documents extends Queries
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$validators = [
|
$validators = [
|
||||||
new Select(),
|
|
||||||
new Limit(),
|
new Limit(),
|
||||||
new Offset(),
|
new Offset(),
|
||||||
new Cursor(),
|
new Cursor(),
|
||||||
new Filter($attributes),
|
new Filter($attributes),
|
||||||
new Order($attributes),
|
new Order($attributes),
|
||||||
|
new Select($attributes),
|
||||||
];
|
];
|
||||||
|
|
||||||
parent::__construct(...$validators);
|
parent::__construct(...$validators);
|
||||||
|
|
|
@ -20,7 +20,7 @@ class Select extends Base
|
||||||
public function __construct(array $attributes = [])
|
public function __construct(array $attributes = [])
|
||||||
{
|
{
|
||||||
foreach ($attributes as $attribute) {
|
foreach ($attributes as $attribute) {
|
||||||
//$this->schema[$attribute->getAttribute('key')] = $attribute->getArrayCopy();
|
$this->schema[$attribute->getAttribute('key')] = $attribute->getArrayCopy();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -38,16 +38,21 @@ class Select extends Base
|
||||||
{
|
{
|
||||||
/* @var $query Query */
|
/* @var $query Query */
|
||||||
|
|
||||||
if ($query->getMethod() === Query::TYPE_SELECT) {
|
if ($query->getMethod() !== Query::TYPE_SELECT) {
|
||||||
foreach ($query->getValues() as $attr) {
|
return false;
|
||||||
var_dump($attr);
|
|
||||||
// todo: Do some validations
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
foreach ($query->getValues() as $attribute) {
|
||||||
|
if (\str_contains($attribute, '.')) {
|
||||||
|
$attribute = \explode('.', $attribute)[0];
|
||||||
|
}
|
||||||
|
if (!isset($this->schema[$attribute])) {
|
||||||
|
$this->message = 'Attribute not found in schema: ' . $attribute;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
public function getMethodType(): string
|
public function getMethodType(): string
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue