Skip to content

Commit

Permalink
Merge pull request #2 from tattersoftware/arrays
Browse files Browse the repository at this point in the history
Simplify to Arrays
  • Loading branch information
MGatner committed Aug 26, 2022
2 parents 7fd2c63 + d29d1dc commit 96132c5
Show file tree
Hide file tree
Showing 10 changed files with 150 additions and 261 deletions.
13 changes: 12 additions & 1 deletion src/Conditions/Condition.php → src/Condition.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,10 @@

declare(strict_types=1);

namespace Tatter\Repositories\Conditions;
namespace Tatter\Repositories;

use InvalidArgumentException;
use Tatter\Repositories\Repository\Entity;

final class Condition
{
Expand Down Expand Up @@ -40,6 +41,16 @@ public static function fromString(string $input): self
return new self($field, $operator, $value);
}

/**
* Returns a condition to match an Entity by the given identifier.
*
* @param class-string<Entity> $class
*/
public static function fromIdentity(string $class, int|string $id): self
{
return new self($class::IDENTIFIER, '=', $id);
}

/**
* @param array<int, scalar|null>|scalar|null $value
*/
Expand Down
37 changes: 0 additions & 37 deletions src/Conditions/Conditions.php

This file was deleted.

68 changes: 0 additions & 68 deletions src/Objects/AttributesTrait.php

This file was deleted.

32 changes: 0 additions & 32 deletions src/Objects/DTO.php

This file was deleted.

65 changes: 0 additions & 65 deletions src/Objects/Entity.php

This file was deleted.

25 changes: 0 additions & 25 deletions src/Objects/ValueObject.php

This file was deleted.

42 changes: 25 additions & 17 deletions src/Persistence/SQLDatabase.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,12 @@
use Config\Database;
use Generator;
use RuntimeException;
use Tatter\Repositories\Conditions\Conditions;
use Tatter\Repositories\Objects\DTO;
use Tatter\Repositories\Condition;

/**
* SQL Database Persistence Class
*
* A wrapper for the Query Builder to enforce
* data types at boundaries.
* A wrapper for the Query Builder.
*/
final class SQLDatabase
{
Expand All @@ -35,8 +33,10 @@ private function __construct(private BaseBuilder $builder)

/**
* Gets the first row matching the conditions.
*
* @param Condition[] $conditions
*/
public function first(Conditions $conditions): ?DTO
public function first(array $conditions): ?array
{
$result = $this->builderFromConditions($conditions)
->limit(1)
Expand All @@ -45,54 +45,62 @@ public function first(Conditions $conditions): ?DTO
throw new RuntimeException('Query Builder result failed.');
}

return $result->getFirstRow(DTO::class);
return $result->getResultArray()[0] ?? null;
}

/**
* Gets an item from persistence by its ID.
* Yields matching results from persistence.
*
* @param Condition[] $conditions
*
* @returns iterable<DTO>
* @returns iterable<array>
*/
public function get(Conditions $conditions): Generator
public function get(array $conditions): Generator
{
$result = $this->builderFromConditions($conditions)->get();
if ($result === false) {
throw new RuntimeException('Query Builder result failed.');
}

while ($dto = $result->getUnbufferedRow(DTO::class)) {
yield $dto;
while ($array = $result->getUnbufferedRow('array')) {
yield $array;
}
}

/**
* Inserts a new row into the database.
*/
public function insert(DTO $dto): void
public function insert(array $data): void
{
(clone $this->builder)->insert($dto->toArray());
(clone $this->builder)->insert($data);
}

/**
* Updates rows in the database.
*
* @param Condition[] $conditions
*/
public function update(Conditions $conditions, DTO $dto): void
public function update(array $conditions, array $data): void
{
$this->builderFromConditions($conditions)->update($dto->toArray());
$this->builderFromConditions($conditions)->update($data);
}

/**
* Deletes matching items from the database.
*
* @param Condition[] $conditions
*/
public function delete(Conditions $conditions): void
public function delete(array $conditions): void
{
$this->builderFromConditions($conditions)->delete();
}

/**
* Preps a Builder with "where" conditions.
*
* @param Condition[] $conditions
*/
private function builderFromConditions(Conditions $conditions): BaseBuilder
private function builderFromConditions(array $conditions): BaseBuilder
{
$builder = clone $this->builder;

Expand Down
Loading

0 comments on commit 96132c5

Please sign in to comment.