Add ValidationByName and CompanyValidationByName.
continuous-integration/drone/push Build is passing

This commit is contained in:
2023-08-17 19:22:10 +03:00
parent 135f4c0c93
commit f437d777a5
10 changed files with 226 additions and 57 deletions
@@ -0,0 +1,50 @@
<?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();
}
}