diff --git a/examples/deleteQuery.php b/examples/deleteQuery.php new file mode 100644 index 0000000..6657272 --- /dev/null +++ b/examples/deleteQuery.php @@ -0,0 +1,21 @@ +RelativePath(relativePath: ""); + + return $queryBuilder->Build(); +} + +$result = Example0()->RunQuery($db); +var_dump($result); diff --git a/examples/grantQuery.php b/examples/grantQuery.php index 4b0c7d8..267b8f8 100644 --- a/examples/grantQuery.php +++ b/examples/grantQuery.php @@ -25,7 +25,10 @@ function Example0(): GrantQuery function Example1(): GrantQuery { $queryBuilder = QueryBuilder::Grant() - ->GrantAll() + ->Permissions(permissionTypes: [ + DeegraphPermissionType::WRITE, + DeegraphPermissionType::READ, + ]) ->On(target: "*") ->IsDelegatable(); diff --git a/examples/test.php b/examples/test.php new file mode 100644 index 0000000..1e51fe7 --- /dev/null +++ b/examples/test.php @@ -0,0 +1,41 @@ +Schema(schema: "https://schemas.auxiliumsoftware.co.uk/v1/collection.json") + ->At(relativePath: "{970334ed-1f4f-465a-94d7-923a99698786}/todo"); +$insertQuery = QueryBuilder::Put() + ->URI(uri: DataURL::BuildBase64(unencodedString: "nya~")) + ->At(relativePath: "{970334ed-1f4f-465a-94d7-923a99698786}/example"); +$insertQuery = QueryBuilder::Insert() + ->RelativePath(relativePath: "{970334ed-1f4f-465a-94d7-923a99698786}/example"); +echo $insertQuery; +echo "\n"; +$result = $db->RunQuery($insertQuery); +var_dump($result); +*/ + +$selectQueryBuilder = QueryBuilder::Select() + ->RelativePath(relativePath: ".") + ->From(target: "**"); + +$selectQuery = $selectQueryBuilder->Build(); + +$result = $selectQuery->RunQuery($db); + +foreach($result->FlattenRows() as $row) +{ + echo "$row\n"; +} + diff --git a/src/Attributes/QueryBuilderQuery.php b/src/Attributes/QueryBuilderQuery.php index 616a3b8..4e69818 100644 --- a/src/Attributes/QueryBuilderQuery.php +++ b/src/Attributes/QueryBuilderQuery.php @@ -16,32 +16,4 @@ use ReflectionClass; { parent::__construct(new Name("QueryBuilderQuery", []), [], []); } - - public function ValidateValues( - InsertQueryBuilder|PutQueryBuilder|SelectQueryBuilder $target - ): void - { - $nameBase = "Darksparrow\\DeegraphPHP\\Attributes"; - $reflection = new ReflectionClass($target); - $properties = $reflection->getProperties(); - - foreach($properties as $property) - { - $attributes = $property->getAttributes(); - $propertyName = $property->getName(); - $propertyValue = $property->getValue($target); - - if(sizeof($attributes) == 0) continue; - - foreach($attributes as $attribute) - { - if($attribute->getName() == "$nameBase\\QueryBuilderRequiredField") - { - if($propertyValue == "") - throw new Exception(); - } - - } - } - } } diff --git a/src/DataStructures/DataURL.php b/src/DataStructures/DataURL.php new file mode 100644 index 0000000..68b2870 --- /dev/null +++ b/src/DataStructures/DataURL.php @@ -0,0 +1,35 @@ +Data = $data; + $this->MIMEType = $mimeType; + } + + public static function FromDataURL(string $dataURL): DataURL + { + + } + + public static function BuildBase64(string $unencodedString): DataURL + { + return new DataURL(mimeType: "text/plain", data: "base64," . base64_encode(string: $unencodedString)); + } + + public function __toString(): string + { + $builder = "data:"; + $builder .= $this->MIMEType; + $builder .= ","; + $builder .= urlencode(string: $this->Data); + + return $builder; + } +} diff --git a/src/QueryBuilder/QueryBuilders/DeleteQueryBuilder.php b/src/QueryBuilder/QueryBuilders/DeleteQueryBuilder.php index 7c1fe9f..60d5884 100644 --- a/src/QueryBuilder/QueryBuilders/DeleteQueryBuilder.php +++ b/src/QueryBuilder/QueryBuilders/DeleteQueryBuilder.php @@ -10,10 +10,13 @@ use Darksparrow\DeegraphInteractions\Exceptions\QueryBuilderRequiredFieldIsNotSe use Darksparrow\DeegraphInteractions\Interfaces\QueryBuilderInterface; use Darksparrow\DeegraphInteractions\QueryInstance\DeleteQuery; use Darksparrow\DeegraphInteractions\QueryInstance\GrantQuery; +use Darksparrow\DeegraphInteractions\Traits\QueryBuilderTrait; #[QueryBuilderQuery] final class DeleteQueryBuilder implements QueryBuilderInterface { + use QueryBuilderTrait; + #[QueryBuilderRequiredField] protected string $RelativePath; @@ -23,6 +26,8 @@ final class DeleteQueryBuilder implements QueryBuilderInterface */ public function Build(): DeleteQuery { + self::ValidateValues($this); + $builder = "DELETE "; if($this->RelativePath != "") $builder .= $this->RelativePath; diff --git a/src/QueryBuilder/QueryBuilders/GrantQueryBuilder.php b/src/QueryBuilder/QueryBuilders/GrantQueryBuilder.php index 86dbf4e..58dcb4f 100644 --- a/src/QueryBuilder/QueryBuilders/GrantQueryBuilder.php +++ b/src/QueryBuilder/QueryBuilders/GrantQueryBuilder.php @@ -9,10 +9,13 @@ use Darksparrow\DeegraphInteractions\Enumerators\DeegraphPermissionType; use Darksparrow\DeegraphInteractions\Exceptions\QueryBuilderRequiredFieldIsNotSetException; use Darksparrow\DeegraphInteractions\Interfaces\QueryBuilderInterface; use Darksparrow\DeegraphInteractions\QueryInstance\GrantQuery; +use Darksparrow\DeegraphInteractions\Traits\QueryBuilderTrait; #[QueryBuilderQuery] final class GrantQueryBuilder implements QueryBuilderInterface { + use QueryBuilderTrait; + #[QueryBuilderRequiredField] protected array $PermissionTypes; @@ -26,8 +29,10 @@ final class GrantQueryBuilder implements QueryBuilderInterface */ public function Build(): GrantQuery { + self::ValidateValues($this); + $builder = "GRANT "; - + if(sizeof($this->PermissionTypes)) $builder .= implode(separator: ",", array: $this->PermissionTypes); if($this->GrantOn != "") $builder .= " ON $this->GrantOn"; if($this->GrantWhere != "") $builder .= " WHERE $this->GrantWhere"; diff --git a/src/QueryBuilder/QueryBuilders/InsertQueryBuilder.php b/src/QueryBuilder/QueryBuilders/InsertQueryBuilder.php index d88ba8c..2abcd9d 100755 --- a/src/QueryBuilder/QueryBuilders/InsertQueryBuilder.php +++ b/src/QueryBuilder/QueryBuilders/InsertQueryBuilder.php @@ -29,8 +29,7 @@ final class InsertQueryBuilder implements QueryBuilderInterface public function Build(): InsertQuery { - $instance = new QueryBuilderQuery(); - $instance->ValidateValues($this); + self::ValidateValues($this); $builder = "INSERT INTO $this->RelativePath"; diff --git a/src/QueryBuilder/QueryBuilders/PutQueryBuilder.php b/src/QueryBuilder/QueryBuilders/PutQueryBuilder.php index 47a6509..557d24f 100755 --- a/src/QueryBuilder/QueryBuilders/PutQueryBuilder.php +++ b/src/QueryBuilder/QueryBuilders/PutQueryBuilder.php @@ -24,6 +24,8 @@ final class PutQueryBuilder implements QueryBuilderInterface */ public function Build(): PutQuery { + self::ValidateValues($this); + $builder = "PUT $this->PutWhat"; if($this->PutData != "") $builder .= " \"$this->PutData\" "; diff --git a/src/QueryBuilder/QueryBuilders/SelectQueryBuilder.php b/src/QueryBuilder/QueryBuilders/SelectQueryBuilder.php index 238080c..6afa94f 100755 --- a/src/QueryBuilder/QueryBuilders/SelectQueryBuilder.php +++ b/src/QueryBuilder/QueryBuilders/SelectQueryBuilder.php @@ -33,6 +33,8 @@ final class SelectQueryBuilder implements QueryBuilderInterface public function Build(): SelectQuery { + self::ValidateValues($this); + $builder = "SELECT "; if(sizeof($this->RelativePaths)) $builder .= " " . implode(separator: ", ", array: $this->RelativePaths); if($this->From != "") $builder .= " FROM " . $this->From; diff --git a/src/QueryInstance/DeleteQuery.php b/src/QueryInstance/DeleteQuery.php index dea6863..e2ebfbb 100644 --- a/src/QueryInstance/DeleteQuery.php +++ b/src/QueryInstance/DeleteQuery.php @@ -13,8 +13,8 @@ final class DeleteQuery extends QueryInstanceSuperclass implements QueryInstance public function RunQuery(DeegraphServer $deegraphServer): DeleteQueryResponse { $response = $deegraphServer->RunRawRequest( - endpoint: "/api/v1/@query", - method: "POST", + endpoint: "/api/v1/@delete", + method: "DELETE", body: $this->QueryString, ); return new DeleteQueryResponse(response: $response); diff --git a/src/Traits/QueryBuilderTrait.php b/src/Traits/QueryBuilderTrait.php index 4e9d344..0e8ea7b 100755 --- a/src/Traits/QueryBuilderTrait.php +++ b/src/Traits/QueryBuilderTrait.php @@ -4,6 +4,13 @@ namespace Darksparrow\DeegraphInteractions\Traits; use Darksparrow\DeegraphInteractions\Exceptions\QueryBuilderConflictingFieldAlreadyExistsException; use Darksparrow\DeegraphInteractions\Exceptions\QueryBuilderInvalidInputException; +use Darksparrow\DeegraphInteractions\QueryBuilder\QueryBuilders\DeleteQueryBuilder; +use Darksparrow\DeegraphInteractions\QueryBuilder\QueryBuilders\GrantQueryBuilder; +use Darksparrow\DeegraphInteractions\QueryBuilder\QueryBuilders\InsertQueryBuilder; +use Darksparrow\DeegraphInteractions\QueryBuilder\QueryBuilders\PutQueryBuilder; +use Darksparrow\DeegraphInteractions\QueryBuilder\QueryBuilders\SelectQueryBuilder; +use Exception; +use ReflectionClass; trait QueryBuilderTrait { @@ -26,4 +33,31 @@ trait QueryBuilderTrait throw new QueryBuilderInvalidInputException(); return $target; } + + public function ValidateValues( + DeleteQueryBuilder|GrantQueryBuilder|InsertQueryBuilder|PutQueryBuilder|SelectQueryBuilder $target + ): void + { + $nameBase = "Darksparrow\\DeegraphPHP\\Attributes"; + $reflection = new ReflectionClass($target); + $properties = $reflection->getProperties(); + + foreach($properties as $property) + { + $attributes = $property->getAttributes(); + $propertyName = $property->getName(); + $propertyValue = $property->getValue($target); + + if(sizeof($attributes) == 0) continue; + + foreach($attributes as $attribute) + { + if($attribute->getName() == "$nameBase\\QueryBuilderRequiredField") + { + if($propertyValue == "") + throw new Exception(); + } + } + } + } }