Refactor to use InformativeValidators instead of ModelValidation.
continuous-integration/drone/push Build is failing

This commit is contained in:
2023-09-08 13:51:31 +03:00
parent 5c40bc6bf3
commit cdf26ca9a9
10 changed files with 3 additions and 252 deletions
@@ -1,18 +0,0 @@
<?php
namespace App\Models\Validation;
use App\Models\Validation\ModelValidationByName;
use App\Models\Validation\Messages\CityMessagesFactory;
class CityValidationByName extends ModelValidationByName
{
public function __construct(string $name)
{
parent::__construct(
$name,
'App\Models\City',
(new CityMessagesFactory())->create(),
);
}
}
@@ -1,25 +0,0 @@
<?php
namespace App\Models\Validation\Messages;
use App\Models\Validation\ValidationStatus;
class BaseMessages
{
protected array $messages;
public function __construct($messages)
{
$this->messages = $messages;
}
public function getMessage($status): string
{
return match($status)
{
ValidationStatus::FOUND => $this->messages['found'],
ValidationStatus::NOT_FOUND => $this->messages['not_found'],
ValidationStatus::INVALID_NAME => $this->messages['invalid_name'],
};
}
}
@@ -1,20 +0,0 @@
<?php
namespace App\Models\Validation\Messages;
use App\Models\Validation\Messages\BaseMessages;
class CityMessagesFactory
{
protected array $messages = [
'found' => 'A city with the name is valid.',
'not_found' => 'A city with the name does not exist!!!',
'invalid_name' => 'The city name is empty, please, write the name!!!',
];
public function create()
{
return new BaseMessages($this->messages);
}
}
@@ -1,50 +0,0 @@
<?php
namespace App\Models\Validation;
use App\Models\Validation\ValidationByNameInterface;
use App\Models\Validation\ValidationStatus;
use App\Models\Validation\Messages\BaseMessages;
class ModelValidationByName
{
protected static BaseMessages $messages;
protected static string $className;
protected string $name;
public function __construct(string $name, string $className, BaseMessages $messages)
{
if (!in_array('App\Models\Validation\ValidationByNameInterface', class_implements($className)))
throw new \RuntimeException("$className does not implement the ValidationByNameInterface interface.");
$this->name = $name;
static::$className = $className;
static::$messages = $messages;
}
public function getStatus()
{
if(!call_user_func([static::$className, 'isNameValid'], $this->name))
return ValidationStatus::INVALID_NAME;
if(!call_user_func([static::$className, 'isExistByName'], $this->name))
return ValidationStatus::NOT_FOUND;
return ValidationStatus::FOUND;
}
public function getMessageMap()
{
$status = $this->getStatus();
return [
$status->status() => static::$messages->getMessage($status)
];
}
public function isValid()
{
return $this->getStatus()->isOk();
}
}
@@ -1,10 +0,0 @@
<?php
namespace App\Models\Validation;
interface ValidationByNameInterface {
public static function isNameValid(string $name);
public static function isExistByName(string $name);
}
@@ -1,40 +0,0 @@
<?php
namespace App\Models\Validation;
enum ValidationStatus
{
case FOUND;
case NOT_FOUND;
case INVALID_NAME;
public function value(): string
{
return match($this)
{
ValidationStatus::FOUND => 'found',
ValidationStatus::NOT_FOUND => 'not_found',
ValidationStatus::INVALID_NAME => 'invalid_name',
};
}
public function status(): string
{
return match($this)
{
ValidationStatus::FOUND => 'ok',
ValidationStatus::NOT_FOUND => 'error',
ValidationStatus::INVALID_NAME => 'error',
};
}
public function isError(): bool
{
return $this->status() == 'error';
}
public function isOk(): bool
{
return $this->status() == 'ok';
}
}