Skip to content
Open
Show file tree
Hide file tree
Changes from all 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
3 changes: 2 additions & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,8 @@
"require-dev": {
"phpunit/phpunit": "9.*",
"squizlabs/php_codesniffer" : "3.*",
"g4/code-coverage" : "1.*"
"g4/code-coverage" : "1.*",
"rector/rector": "^0.18.8"
},
"require": {
"php" : ">=8.2",
Expand Down
40 changes: 40 additions & 0 deletions rector.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
<?php

declare(strict_types=1);

use Rector\CodeQuality\Rector\Class_\InlineConstructorDefaultToPropertyRector;
use Rector\Config\RectorConfig;
use Rector\DeadCode\Rector\ClassMethod\RemoveUselessParamTagRector;
use Rector\Php81\Rector\Class_\MyCLabsClassToEnumRector;
use Rector\Php81\Rector\MethodCall\MyCLabsMethodCallToEnumConstRector;
use Rector\Set\ValueObject\LevelSetList;
use Rector\TypeDeclaration\Rector\ClassMethod\ReturnTypeFromReturnNewRector;
use Rector\TypeDeclaration\Rector\ClassMethod\ReturnTypeFromStrictBoolReturnExprRector;
use Rector\TypeDeclaration\Rector\ClassMethod\ReturnTypeFromStrictNativeCallRector;
use Rector\TypeDeclaration\Rector\ClassMethod\ReturnTypeFromStrictNewArrayRector;
use Rector\TypeDeclaration\Rector\ClassMethod\ReturnTypeFromStrictTypedPropertyRector;

return static function (RectorConfig $rectorConfig): void {
$rectorConfig->paths([
__DIR__ . '/src',
]);

$rectorConfig->skip([
MyCLabsMethodCallToEnumConstRector::class,
MyCLabsClassToEnumRector::class
]);

// register a single rule
$rectorConfig->rule(InlineConstructorDefaultToPropertyRector::class);
$rectorConfig->rule(RemoveUselessParamTagRector::class);
$rectorConfig->rule(ReturnTypeFromReturnNewRector::class);
$rectorConfig->rule(ReturnTypeFromStrictBoolReturnExprRector::class);
$rectorConfig->rule(ReturnTypeFromStrictNativeCallRector::class);
$rectorConfig->rule(ReturnTypeFromStrictNewArrayRector::class);
$rectorConfig->rule(ReturnTypeFromStrictTypedPropertyRector::class);

// define sets of rules
$rectorConfig->sets([
LevelSetList::UP_TO_PHP_82,
]);
};
85 changes: 32 additions & 53 deletions src/DataRepository.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,84 +2,63 @@

namespace G4\DataRepository;

use \G4\DataMapper\Common\MappingInterface;
use G4\DataMapper\Common\IdentityInterface;
use G4\DataMapper\Common\MappingInterface;
use G4\RussianDoll\Key;

class DataRepository
{
const DELIMITER = "|";
final public const DELIMITER = "|";

/**
* @var StorageContainer
*/
private $storageContainer;
private ?IdentityInterface $identity = null;

/*
* @var \G4\DataMapper\Common\IdentityInterface
*/
private $identity;
private ?string $identityMapKey = null;

private $identityMapKey;

/*
* @var \G4\RussianDoll\Key
*/
private $russianDollKey;
private ?Key $russianDollKey = null;

/**
* @var MapperCollection
*/
private $map;
private ?MapperCollection $map = null;

/**
* Repository constructor.
* @param StorageContainer $storageContainer
*/
public function __construct(StorageContainer $storageContainer)
public function __construct(private readonly StorageContainer $storageContainer)
{
$this->storageContainer = $storageContainer;
}

/**
* @param $datasetName
* @return $this
*/
public function setDatasetName($datasetName)
public function setDatasetName(string $datasetName): self
{
$this->storageContainer->setDatasetName($datasetName);
return $this;
}

public function setIdentity(\G4\DataMapper\Common\IdentityInterface $identity)
public function setIdentity(IdentityInterface $identity): self
{
$this->identity = $identity;
return $this;
}

public function setRussianDollKey(\G4\RussianDoll\Key $russianDollKey)
public function setRussianDollKey(Key $russianDollKey): self
{
$this->russianDollKey = $russianDollKey;
$this->identityMapKey = (string) $russianDollKey;
return $this;
}

public function setIdentityMapKey(...$identityMapKey)
public function setIdentityMapKey(...$identityMapKey): self
{
$this->identityMapKey = implode(self::DELIMITER, $identityMapKey);
return $this;
}

/*
* @return RepositoryResponse
*/
public function select()
public function select(): SimpleDataRepositoryResponse | DataRepositoryResponse
{
$query = new RepositoryQuery();

if ($this->getRussianDollKey() instanceof \G4\RussianDoll\Key) {
if ($this->getRussianDollKey() instanceof Key) {
$query->setRussianDollKey($this->getRussianDollKey());
}

if ($this->getIdentity() instanceof \G4\DataMapper\Common\IdentityInterface) {
if ($this->getIdentity() instanceof IdentityInterface) {
$query->setIdentity($this->getIdentity());
}

Expand All @@ -90,11 +69,11 @@ public function select()
return (new ReadRepository($this->storageContainer))->read($query);
}

public function query($customQuery)
public function query($customQuery): SimpleDataRepositoryResponse | DataRepositoryResponse
{
$query = new RepositoryQuery();
$query->setCustomQuery($customQuery);
if ($this->getRussianDollKey() instanceof \G4\RussianDoll\Key) {
if ($this->getRussianDollKey() instanceof Key) {
$query->setRussianDollKey($this->getRussianDollKey());
}

Expand All @@ -105,35 +84,35 @@ public function query($customQuery)
return (new ReadRepository($this->storageContainer))->read($query);
}

public function queryNoCache($customQuery)
public function queryNoCache($customQuery): SimpleDataRepositoryResponse | DataRepositoryResponse
{
$query = new RepositoryQuery();
$query->setCustomQuery($customQuery);
return (new ReadRepository($this->storageContainer))->readNoCache($query);
}

public function simpleQuery($customQuery)
public function simpleQuery($customQuery): SimpleDataRepositoryResponse | DataRepositoryResponse
{
$query = new RepositoryQuery();
$query->setCustomQuery($customQuery);

return (new ReadRepository($this->storageContainer))->simpleQuery($query);
}

public function command($customCommand)
public function command($customCommand): void
{
$command = $this->getCommand();
$command->setCustomCommand($customCommand);
(new WriteRepository($this->storageContainer))->write($command);
}

public function setMapping(MappingInterface ...$maps)
public function setMapping(MappingInterface ...$maps): self
{
$this->map = new MapperCollection($maps);
return $this;
}

public function insert()
public function insert(): void
{
$command = $this->getCommand();
$command->insert($this->map);
Expand All @@ -145,52 +124,52 @@ public function insertId()
try {
$insertId = $this->queryNoCache('SELECT LAST_INSERT_ID() AS LAST_INSERT_ID')->getOne();
return $insertId['LAST_INSERT_ID'];
} catch (\Exception $e) {
} catch (\Exception) {
return null;
}
}

public function update()
public function update(): void
{
$command = $this->getCommand();
$command->update($this->map, $this->getIdentity());
(new WriteRepository($this->storageContainer))->write($command);
}

public function upsert()
public function upsert(): void
{
$command = $this->getCommand();
$command->upsert($this->map);
(new WriteRepository($this->storageContainer))->write($command);
}

public function delete()
public function delete(): void
{
$command = $this->getCommand();
$command->delete($this->getIdentity());
(new WriteRepository($this->storageContainer))->write($command);
}

public function getIdentity()
public function getIdentity(): ?IdentityInterface
{
return $this->identity;
}

public function getIdentityMapKey()
public function getIdentityMapKey(): ?string
{
return $this->identityMapKey;
}

public function getRussianDollKey()
public function getRussianDollKey(): ?Key
{
return $this->russianDollKey;
}

private function getCommand()
private function getCommand(): RepositoryCommand
{
$command = new RepositoryCommand();

if ($this->getRussianDollKey() instanceof \G4\RussianDoll\Key) {
if ($this->getRussianDollKey() instanceof Key) {
$command->setRussianDollKey($this->getRussianDollKey());
}

Expand Down
15 changes: 3 additions & 12 deletions src/DataRepositoryFactory.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,7 @@
class DataRepositoryFactory
{

/**
* @var array
*/
private $storages;
private readonly array $storages;

/**
* RepositoryFactory constructor.
Expand All @@ -22,18 +19,12 @@ public function __construct(...$storages)
$this->storages = $storages;
}

/**
* @return DataRepository
*/
public function create()
public function create(): DataRepository
{
return new DataRepository($this->makeStorageContainer());
}

/**
* @return StorageContainer
*/
public function makeStorageContainer()
public function makeStorageContainer(): StorageContainer
{
return new StorageContainer($this->storages);
}
Expand Down
19 changes: 6 additions & 13 deletions src/DataRepositoryResponse.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,44 +7,37 @@

class DataRepositoryResponse
{
private $data;
private $count;
private $total;

public function __construct(array $currentItems, $count, $total)
public function __construct(private readonly array $data, private $count, private $total)
{
$this->data = $currentItems;
$this->count = $count;
$this->total = $total;
}

public function count()
public function count(): int
{
return $this->count;
}

public function getAll()
public function getAll(): array
{
if (!$this->hasData() && $this->getTotal() === 0) {
throw new MissingResponseAllDataException();
}
return $this->data;
}

public function getOne()
public function getOne(): mixed
{
if (!$this->hasData()) {
throw new MissingResponseOneDataException();
}
return current($this->data);
}

public function getTotal()
public function getTotal(): int
{
return $this->total;
}

public function hasData()
public function hasData(): bool
{
return count($this->data) !== 0;
}
Expand Down
28 changes: 14 additions & 14 deletions src/ErrorCodes.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,18 +5,18 @@
class ErrorCodes
{

const MISSING_STORAGE_INSTANCE_EXCEPTION = 30001;
const NOT_VALID_STORAGE_EXCEPTION = 30002;
const MISSING_MAPPER_INSTANCE_EXCEPTION = 30003;
const MISSING_ACTION_EXCEPTION = 30004;
const MISSING_IDENTITY_EXCEPTION = 30005;
const MISSING_RUSSIAN_DOLL_EXCEPTION = 30006;
const MISSING_IDENTITY_MAP_KEY_EXCEPTION = 30007;
const INVALID_QUERY_EXCEPTION = 30008;
const MISSING_CUSTOM_COMMAND_EXCEPTION = 30009;
const MISSING_RESPONSE_TOTAL = 30010;
const MISSING_RESPONSE_COUNT = 30011;
const MISSING_RESPONSE_ALL_DATA = 30012;
const MISSING_RESPONSE_ONE_DATA = 30013;
const MISSING_DATASET_NAME_VALUE_EXCEPTION = 33014;
final public const MISSING_STORAGE_INSTANCE_EXCEPTION = 30001;
final public const NOT_VALID_STORAGE_EXCEPTION = 30002;
final public const MISSING_MAPPER_INSTANCE_EXCEPTION = 30003;
final public const MISSING_ACTION_EXCEPTION = 30004;
final public const MISSING_IDENTITY_EXCEPTION = 30005;
final public const MISSING_RUSSIAN_DOLL_EXCEPTION = 30006;
final public const MISSING_IDENTITY_MAP_KEY_EXCEPTION = 30007;
final public const INVALID_QUERY_EXCEPTION = 30008;
final public const MISSING_CUSTOM_COMMAND_EXCEPTION = 30009;
final public const MISSING_RESPONSE_TOTAL = 30010;
final public const MISSING_RESPONSE_COUNT = 30011;
final public const MISSING_RESPONSE_ALL_DATA = 30012;
final public const MISSING_RESPONSE_ONE_DATA = 30013;
final public const MISSING_DATASET_NAME_VALUE_EXCEPTION = 33014;
}
2 changes: 1 addition & 1 deletion src/Exception/InvalidQueryException.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
class InvalidQueryException extends Exception
{

const MESSAGE = 'Invalid query';
final public const MESSAGE = 'Invalid query';

public function __construct()
{
Expand Down
Loading