Auth, Login, Home, Venta->Listados->Precios

This commit is contained in:
Juan Pablo Vial
2023-07-24 20:55:26 -04:00
parent d9d5a15376
commit 1a7b10ce3c
130 changed files with 4302 additions and 0 deletions

View File

@ -0,0 +1,16 @@
<?php
namespace Incoviba\Common\Ideal;
use Incoviba\Common\Define;
abstract class Model implements Define\Model
{
public int $id;
public function jsonSerialize(): mixed
{
return [
'id' => $this->id
];
}
}

View File

@ -0,0 +1,126 @@
<?php
namespace Incoviba\Common\Ideal;
use Incoviba\Common\Implement\Exception\EmptyResult;
use PDO;
use Incoviba\Common\Define\Model;
use Incoviba\Common\Define;
abstract class Repository implements Define\Repository
{
public function __construct(protected Define\Connection $connection) {}
protected string $table;
public function getTable(): string
{
return $this->table;
}
public function setTable(string $table): Repository
{
$this->table = $table;
return $this;
}
public function load(array $data_row): Model
{
$model = $this->create($data_row);
$model->{$this->getKey()} = $data_row[$this->getKey()];
return $model;
}
public function remove(Model $model): void
{
$query = "DELETE FROM `{$this->getTable()}` WHERE `{$this->getKey()}` = ?";
$this->connection->execute($query, [$model->getId()]);
}
public function fetchById(int $id): Define\Model
{
$query = "SELECT * FROM `{$this->getTable()}` WHERE `{$this->getKey()}` = ?";
return $this->fetchOne($query, [$id]);
}
public function fetchAll(): array
{
$query = "SELECT * FROM `{$this->getTable()}`";
return $this->fetchMany($query);
}
protected function getKey(): string
{
return 'id';
}
protected function parseData(Define\Model $model, ?array $data, array $data_map): Define\Model
{
if ($data === null) {
return $model;
}
foreach ($data_map as $column => $settings) {
if (isset($data[$column])) {
$property = $column;
if (isset($settings['property'])) {
$property = $settings['property'];
}
$value = $data[$column];
if (isset($settings['function'])) {
$value = $settings['function']($data);
}
$model->{$property} = $value;
}
}
return $model;
}
protected function saveNew(array $columns, array $values): int
{
$columns_string = implode(', ', array_map(function($column) {return "`{$column}`";}, $columns));
$columns_questions = implode(', ', array_fill(0, count($columns), '?'));
$query = "INSERT INTO `{$this->getTable()}` ({$columns_string}) VALUES ($columns_questions)";
$this->connection->execute($query, $values);
return $this->connection->getPDO()->lastInsertId();
}
protected function update(Model $model, array $columns, array $data): Define\Model
{
$changes = [];
$values = [];
foreach ($columns as $column) {
if (isset($data[$column])) {
$changes []= $column;
$values []= $data[$column];
}
}
if (count($changes) === 0) {
return $model;
}
$columns_string = implode(', ', array_map(function($property) {return "`{$property}` = ?";}, $changes));
$query = "UPDATE `{$this->getTable()}` SET {$columns_string} WHERE `{$this->getKey()}` = ?";
$values []= $model->id;
$this->connection->execute($query, $values);
$id = $model->id;
$model = $this->create($data);
$model->id = $id;
return $model;
}
protected function fetchOne(string $query, ?array $data = null): Define\Model
{
$result = $this->connection->execute($query, $data)->fetch(PDO::FETCH_ASSOC);
if ($result === false) {
throw new EmptyResult($query);
}
return $this->load($result);
}
protected function fetchMany(string $query, ?array $data = null): array
{
$results = $this->connection->execute($query, $data)->fetchAll(PDO::FETCH_ASSOC);
if ($results === false) {
throw new EmptyResult($query);
}
return array_map([$this, 'load'], $results);
}
protected function fetchAsArray(string $query, ?array $data = null): array
{
$results = $this->connection->execute($query, $data)->fetchAll(PDO::FETCH_ASSOC);
if ($results === false) {
throw new EmptyResult($query);
}
return $results;
}
}