20250820 v1.0.2-b2

This commit is contained in:
2025-08-20 18:09:37 +03:00
parent cc3b1ef41b
commit 95aa7d9411
22 changed files with 594 additions and 68 deletions

168
tests/data/Converters.php Normal file
View File

@@ -0,0 +1,168 @@
<?php
namespace goodboyalex\php_db_components_pack\tests\data;
use BackedEnum;
use goodboyalex\php_components_pack\types\GUID;
/**
* Класс конвертации для моделей.
*
* @author Александр Бабаев
* @package freecms
* @version 0.1
* @since 0.1
*/
final class Converters
{
/**
* Преобразует GUID в строковое представление.
*
* @param GUID $guid GUID.
*
* @return string GUID в строковом представлении.
*/
public static function GUIDToString (GUID $guid): string
{
return $guid->ToString();
}
/**
* Преобразует строковое представление GUID в объект GUID.
*
* @param string $guid Строковое представление GUID.
*
* @return GUID Преобразует строковое представление GUID в объект GUID или GUID_EMPTY.
*/
public static function GUIDFromString (string $guid): GUID
{
return GUID::Parse($guid, true);
}
/**
* Проверяет равенство двух GUID.
*
* @param GUID $guid1 GUID 1.
* @param GUID $guid2 GUID 2.
*
* @return bool true, если GUID равны, false - иначе.
*/
public static function IsGUIDEqual (GUID $guid1, GUID $guid2): bool
{
return $guid1->IsEqualsTo($guid2);
}
/**
* Преобразует объект перечисления в значение.
*
* @param BackedEnum $enum Перечисление.
*
* @return int Значение перечисления.
*/
public static function BackedEnumToInt (BackedEnum $enum): int
{
return $enum->value;
}
/**
*
* @param int $value Значение перечисления.
*
* @return BackedEnum Перечисление.
*/
public static function BackedEnumFromInt (int $value): BackedEnum
{
return BackedEnum::tryFrom($value);
}
/**
* Сравнивает два значения перечисления.
*
* @param BackedEnum $enum1 Перечисление 1.
* @param BackedEnum $enum2 Перечисление 2.
*
* @return bool true, если значения равны, false - иначе.
*/
public static function IsBackedEnumEqual (BackedEnum $enum1, BackedEnum $enum2): bool
{
return $enum1->value === $enum2->value;
}
/**
* Преобразует логическое значение в целочисленное.
*
* @param bool $boolValue Значение.
*
* @return int Значение 0 или 1.
*/
public static function BoolToInt (bool $boolValue): int
{
return $boolValue ? 1 : 0;
}
/**
* Преобразует целочисленное значение в логическое.
*
* @param int $value Значение 0 или 1.
*
* @return bool Логическое значение.
*/
public static function BoolFromInt (int $value): bool
{
return $value > 0;
}
/**
* Сравнивает два логических значения.
*
* @param bool $bool1 Значение 1.
* @param bool $bool2 Значение 2.
*
* @return bool true, если значения равны, false - иначе.
*/
public static function IsBoolEqual (bool $bool1, bool $bool2): bool
{
return ($bool1 == true && $bool2 == true) || ($bool1 == false && $bool2 == false);
}
/**
* Преобразует массив в строку.
*
* @param array $array Массив.
*
* @return string Сериализованный массив.
*/
public static function ArrayToString (array $array): string
{
return serialize($array);
}
/**
* Преобразует строковое представление массива в массив.
*
* @param string $value Строковое представление массива.
*
* @return array Массив.
*/
public static function ArrayFromString (string $value): array
{
return unserialize($value);
}
/**
* Сравнивает два массива.
*
* @param array $array1 Массив 1.
* @param array $array2 Массив 2.
*
* @return bool true, если значения равны, false - иначе.
*/
public static function IsArrayEqual (array $array1, array $array2): bool
{
// Получаем разницу между массивами
$difference = array_diff($array1, $array2);
// Если разница пуста, значит массивы равны
return empty($difference);
}
}

157
tests/data/UserModel.php Normal file
View File

@@ -0,0 +1,157 @@
<?php
namespace goodboyalex\php_db_components_pack\tests\data;
use goodboyalex\php_components_pack\types\GUID;
use goodboyalex\php_db_components_pack\attributes\Compare;
use goodboyalex\php_db_components_pack\attributes\ConvertToDB;
use goodboyalex\php_db_components_pack\attributes\DataType;
use goodboyalex\php_db_components_pack\attributes\DefaultValue;
use goodboyalex\php_db_components_pack\attributes\FieldName;
use goodboyalex\php_db_components_pack\attributes\NotNull;
use goodboyalex\php_db_components_pack\attributes\PrimaryKey;
use goodboyalex\php_db_components_pack\enums\DBType;
use goodboyalex\php_db_components_pack\interfaces\IDBItem;
/**
* Модель информации о пользователе.
*
* Структура таблицы:
*
* -- id - string(36) - Уникальный идентификатор пользователя (индекс).
* -- login - varchar(50) - Имя пользователя.
* -- password - varchar(255) - Пароль пользователя.
* -- salt - varchar(36) - Ключ шифровки пароля.
* -- first_name - varchar(50) - Имя пользователя.
* -- middle_name - varchar(50) - Отчество пользователя.
* -- last_name - varchar(50) - Фамилия пользователя.
* -- email - varchar(100) - Электронная почта пользователя.
* -- email_verified - TinyInt - Статус подтверждения электронной почты.
* -- group - varchar(50) - Имя группы пользователя.
* -- date_created - bigint - Временной штамп даты создания пользователя.
* -- date_updated - bigint - Временной штамп даты обновления пользователя.
* -- data - LONGTEXT - NULL - Массив разных данных о пользователе.
*
* @author Александр Бабаев
* @package php_db_components_pack
* @version 1.0
* @since 1.0.2
*/
final class UserModel implements IDBItem
{
/**
* @var GUID $Id Идентификатор пользователя
*/
#[PrimaryKey, NotNull, DataType(DBType::STRING, 36), ConvertToDB(
fromType: ['\goodboyalex\php_db_components_pack\tests\data\Converters', 'GUIDToString'],
toType: [
'\goodboyalex\php_db_components_pack\tests\data\Converters', 'GUIDFromString'
]), Compare(['\goodboyalex\php_db_components_pack\tests\data\Converters', 'IsGUIDEqual']),
FieldName('id'), DefaultValue(GUID_EMPTY)]
public GUID $Id;
/**
* @var string $Login Логин пользователя (на английском языке)
*/
#[NotNull, FieldName('login'), DataType(DBType::STRING, 50), DefaultValue("")]
public string $Login = "";
/**
* @var string $Password Пароль пользователя
*/
#[NotNull, FieldName('password'), DataType(DBType::STRING, 255), DefaultValue("")]
public string $Password = '';
/**
* @var string $Salt Кодовое слово для пароля (обычно Guid)
*/
#[NotNull, FieldName('salt'), DataType(DBType::STRING, 36), DefaultValue(GUID_EMPTY)]
public string $Salt = '';
/**
* @var string $FirstName Имя пользователя
*/
#[NotNull, FieldName('first_name'), DataType(DBType::STRING, 50), DefaultValue("")]
public string $FirstName = "";
/**
* @var string $MiddleName Отчество пользователя
*/
#[NotNull, FieldName('middle_name'), DataType(DBType::STRING, 50), DefaultValue("")]
public string $MiddleName = "";
/**
* @var string $LastName Фамилия пользователя
*/
#[NotNull, FieldName('last_name'), DataType(DBType::STRING, 50), DefaultValue("")]
public string $LastName = "";
/**
* @var string $Email Электронная почта пользователя
*/
#[NotNull, FieldName('email'), DataType(DBType::STRING, 100), DefaultValue("")]
public string $Email = "";
/**
* @var bool $IsEmailVerified Статус подтверждения электронной почты
*/
#[NotNull, FieldName('email_verified'), DataType(DBType::INT), ConvertToDB(
fromType: ['\goodboyalex\php_db_components_pack\tests\data\Converters', 'BoolToInt'],
toType: ['\goodboyalex\php_db_components_pack\tests\data\Converters', 'BoolFromInt']),
Compare([
'\goodboyalex\php_db_components_pack\tests\data\Converters', 'IsBoolEqual'
]), DefaultValue(0)]
public bool $IsEmailVerified = false;
/**
* @var string $GroupName Имя группы пользователя
*/
#[NotNull, FieldName('group'), DataType(DBType::STRING, 50), DefaultValue('')]
public string $GroupName = '';
/**
* @var int $CreatedAt Штамп даты создания пользователя
*/
#[NotNull, FieldName('date_created'), DataType(DBType::INT), DefaultValue(0)]
public int $CreatedAt = 0;
/**
* @var int $ModifiedAt Штамп даты изменения пользователя
*/
#[NotNull, FieldName('date_updated'), DataType(DBType::INT), DefaultValue(0)]
public int $ModifiedAt = 0;
/**
* @var array $UserData Массив разных данных о пользователе
*/
#[NotNull, FieldName('data'), DataType(DBType::STRING, 0), ConvertToDB(
fromType: ['\goodboyalex\php_db_components_pack\tests\data\Converters', 'ArrayToString'],
toType: ['\goodboyalex\php_db_components_pack\tests\data\Converters', 'ArrayFromString']),
Compare([
'\goodboyalex\php_db_components_pack\tests\data\Converters', 'IsArrayEqual'
]), DefaultValue("[]")]
public array $UserData = [];
/**
* Конструктор.
*/
public function __construct (GUID $id = new GUID(), string $login = "", string $password = "",
string $salt = "", string $firstName = "", string $middleName = "", string $lastName = "",
string $email = "", bool $isEmailVerified = false, string $groupName = "", int $createdAt = 0,
int $updatedAt = 0, array $userData = [])
{
$this->Id = $id;
$this->Login = $login;
$this->Password = $password;
$this->Salt = $salt;
$this->FirstName = $firstName;
$this->MiddleName = $middleName;
$this->LastName = $lastName;
$this->Email = $email;
$this->IsEmailVerified = $isEmailVerified;
$this->GroupName = $groupName;
$this->CreatedAt = $createdAt;
$this->ModifiedAt = $updatedAt;
$this->UserData = $userData;
}
}