This commit is contained in:
2023-10-02 23:10:49 +03:00
commit c6cb488379
255 changed files with 18731 additions and 0 deletions
+98
View File
@@ -0,0 +1,98 @@
<?php
namespace Lucent\Record;
use Illuminate\Contracts\Session\Session;
use Lucent\Primitive\Collection;
use Lucent\Query\Query;
use Lucent\Schema\Schema;
class Manager
{
public array $records = [];
public Session $session;
public function fromSession(Session $session): Manager
{
$this->session = $session;
$this->records = $session->get("manager") ?? [];
return $this;
}
public function __construct(
private readonly Query $query
)
{
}
/**
* @param string[] $records
*/
public function addRecords(array $records): Manager
{
$this->records = $records;
return $this;
}
public function push(string $recordId): Manager
{
$records = $this->getIdsExcept($recordId);
$records[] = $recordId;
$records = array_unique($records);
$records = array_values($records);
$records = array_slice($records, -5);
$records = array_values($records);
$this->records = $records;
$this->save();
return $this;
}
private function save(): void
{
$this->session->put("manager", $this->records);
}
public function getIdsExcept(?string $id): array
{
return collect($this->records)->filter(fn($arec) => $arec !== $id)->values()->toArray();
}
/**
* @param QueryRecord[] $records
* @return QueryRecord[] $records
*/
public function order(array $records): array
{
$recordsById = collect($records)->keyBy("id")->toArray();
return collect($this->records)->reverse()->values()->reduce(function ($carry, $arecId) use ($recordsById) {
if (isset($recordsById[$arecId])) {
$carry[] = $recordsById[$arecId];
}
return $carry;
}, []);
}
/**
* @param Collection<Schema> $schemas
*/
public function getRecords(?string $ignoreId = null): array
{
$queryResult = $this->query
->filter(["id_in" => $this->getIdsExcept($ignoreId)])
->limit(7)
->run();
$graph = $queryResult->getQueryRecords();
return $this->order($graph->records->toArray());
}
}