20250128#1

This commit is contained in:
User
2025-01-28 03:31:47 +03:00
parent 2cfc92584c
commit 2afc439354
4 changed files with 235 additions and 109 deletions

View File

@@ -11,8 +11,11 @@ abstract class AbstractMysqlRepository extends AbstractRepository implements Mys
public const DEBUG = false;
public const TABLE = null;
public const ENTINY = null;
public const ENTITY = null;
private string $table;
private string $entity;
private bool $debug;
public function __construct(
public readonly MysqlStorageInterface $mysql
@@ -42,27 +45,26 @@ abstract class AbstractMysqlRepository extends AbstractRepository implements Mys
/** @inheritDoc */
public function getEntityById(int $id, $require = false) {
$this->checkConst();
if($result = $this->mysql->findById(static::TABLE, $id)) $out = $this->createFromData(static::ENTINY, $result);
if(empty($out) && $require) throw new RepositoryException("Запись не найдена");
public function getEntityById(int $id, string $table = null): mixed {
if(!isset($table)) $table = $this->getTable();
if($result = $this->mysql->findById($table, $id)) $out = $this->createFromData($this->getEntityClass(), $result);
return $out ?? null;
}
/** @inheritDoc */
public function saveEntity(EntityInterface $object) : mixed {
$this->checkConst();
public function saveEntity(EntityInterface $object, string $table = null) : mixed {
if(!isset($table)) $table = $this->getTable();
$in = $this->getProperties($object, function ($value){
return (is_string($value)) ? $this->mysql->escapeStr($value) : $value;
});
if(static::DEBUG) {$this->getSaveDebug($object, $in, static::TABLE); exit;}
if($this->getDebug()) {$this->debug($object, $in, $table); exit;}
try {
if (!empty($object->getId()) && !empty($this->mysql->findById(static::TABLE, $object->getId()))) {
$this->mysql->updateById(static::TABLE, $in, $object->getId());
if (!empty($object->getId()) && !empty($this->mysql->findById($table, $object->getId()))) {
$this->mysql->updateById($table, $in, $object->getId());
return $object->getId();
} else {
$this->mysql->insert(static::TABLE, $in);
$this->mysql->insert($table, $in);
return (is_string($object->getId())) ? $object->getId() : $this->mysql->mysql()->insert_id;
}
} catch (\Throwable $throwable) {throw new RepositoryException($throwable->getMessage());}
@@ -70,10 +72,29 @@ abstract class AbstractMysqlRepository extends AbstractRepository implements Mys
/** @inheritDoc */
public function saveGroup(array $objects): array {
public function saveData(array $data, string $table = null, string $primaryKey = 'id') : mixed {
if(!isset($table)) $table = $this->getTable();
$in = array_map(function ($value){
return (is_string($value)) ? $this->mysql->escapeStr($value) : $value;
}, $data);
if($this->getDebug()) {$this->debug($data, $in, $table); exit;}
try {
if (!empty($data[$primaryKey]) && !empty($this->mysql->findById($table, $data[$primaryKey], $primaryKey))) {
$this->mysql->updateById($table, $in, $data[$primaryKey]);
return $data[$primaryKey];
} else {
$this->mysql->insert($table, $in);
return (is_string($data[$primaryKey])) ? $data[$primaryKey] : $this->mysql->mysql()->insert_id;
}
} catch (\Throwable $throwable) {throw new RepositoryException($throwable->getMessage());}
}
/** @inheritDoc */
public function saveEntityGroup(array $objects, string $table = null): array {
try{
$this->mysql->mysql()->begin_transaction();
foreach($objects as $object) $id[] = $this->saveEntity($object);
foreach($objects as $object) $id[] = $this->saveEntity($object, $table);
$this->mysql->mysql()->commit();
return $id ?? [];
}
@@ -85,10 +106,25 @@ abstract class AbstractMysqlRepository extends AbstractRepository implements Mys
/** @inheritDoc */
public function deleteEntity(EntityInterface $object) : bool {
$this->checkConst();
public function saveDataGroup(array $objects, string $table = null, string $primaryKey = 'id'): array {
try{
$this->mysql->mysql()->begin_transaction();
foreach($objects as $object) $id[] = $this->saveData($object, $table, $primaryKey);
$this->mysql->mysql()->commit();
return $id ?? [];
}
catch (\Exception $exception){
$this->mysql->mysql()->rollback();
throw new RepositoryException($exception->getMessage());
}
}
/** @inheritDoc */
public function deleteEntity(EntityInterface $object, string $table = null) : bool {
if(!isset($table)) $table = $this->getTable();
if(!empty($object->getId())){
return $this->mysql->deleteById(static::TABLE, $object->getId());
return $this->mysql->deleteById($table, $object->getId());
}
return false;
}
@@ -100,23 +136,63 @@ abstract class AbstractMysqlRepository extends AbstractRepository implements Mys
}
/** @inheritDoc */
public function setTable(string $table) : void {
$this->table = $table;
}
/** @inheritDoc */
public function setEntity(string $entity) : void {
$this->entity = $entity;
}
/** @inheritDoc */
public function setDebug(bool $debug) : void {
$this->debug = $debug;
}
/**
* @return string
* @throws RepositoryException
*/
private function getTable() : string {
if(!empty($this->table)) return $this->table;
if(!empty(static::TABLE)) return static::TABLE;
throw new RepositoryException("Имя таблицы не задано");
}
/**
* @return string
* @throws RepositoryException
*/
private function getEntityClass() : string {
if(!empty($this->entity)) return $this->entity;
if(!empty(static::ENTITY)) return static::ENTITY;
throw new RepositoryException("Не указан объект");
}
/**
* @return bool
*/
private function getDebug(): bool {
if(!empty($this->debug)) return $this->debug;
if(!empty(static::DEBUG)) return static::DEBUG;
return false;
}
/**
* @param ...$arg
* @return void
*/
protected function getSaveDebug(...$arg) : void {
protected function debug(...$arg) : void {
if(function_exists('dd')) dd(...$arg);
if(function_exists('vdd')) vdd(...$arg);
var_dump(...$arg);
}
/**
* @throws RepositoryException
*/
protected function checkConst(): void {
if(empty(static::TABLE)) throw new RepositoryException("Имя таблицы не задано");
if(empty(static::ENTINY)) throw new RepositoryException("Не указан объект");
}
}