records and edgs

This commit is contained in:
2024-08-19 17:48:10 +03:00
parent 509d7c13f2
commit c97be8666e
46 changed files with 4790 additions and 1387 deletions
+19
View File
@@ -0,0 +1,19 @@
<?php
namespace Lucent\Revision\Listener;
use Lucent\Edge\Event\EdgesUpdated;
class CreateRevision
{
public function __construct()
{
}
public function handle(EdgesUpdated $event): void
{
}
}
+18 -12
View File
@@ -4,32 +4,38 @@ namespace Lucent\Revision;
use Illuminate\Support\Str;
use Lucent\Edge\Edge;
use Lucent\Edge\EdgeCollection;
use Lucent\Primitive\Collection;
use Lucent\Record\File;
use Lucent\Record\FileData;
use Lucent\Record\Record;
use Lucent\Record\RecordData;
use Lucent\Record\System;
use stdClass;
readonly class Revision
{
/**
* @param string $id
* @param string $recordId
* @param string $schema
* @param System $_sys
* @param RecordData $data
* @param list<Edge> $_edges
* @param FileData|null $_file
*/
function __construct(
public string $id,
public string $recordId,
public string $schema,
public System $_sys,
public RecordData $data,
public EdgeCollection $_edges,
public ?File $_file = null,
public string $id,
public string $recordId,
public string $schema,
public System $_sys,
public RecordData $data,
public array $_edges,
public ?FileData $_file = null,
)
{
}
public static function fromRecord(Record $record, EdgeCollection $edges): Revision
public static function fromRecord(Record $record, array $edges): Revision
{
return new Revision(
id: (string)Str::uuid(),
+4 -5
View File
@@ -4,9 +4,8 @@ namespace Lucent\Revision;
use Illuminate\Support\Facades\DB;
use Lucent\Edge\Edge;
use Lucent\Edge\EdgeCollection;
use Lucent\Primitive\Collection;
use Lucent\Record\File;
use Lucent\Record\FileData;
use Lucent\Record\RecordData;
use Lucent\Record\System;
use PhpOption\Option;
@@ -82,7 +81,7 @@ class RevisionRepo
"_sys" => json_encode($revision->_sys),
"_file" => json_encode($revision->_file),
"data" => json_encode($revision->data),
"_edges" => $revision->_edges->toJson(),
"_edges" => json_encode($revision->_edges),
];
}
@@ -91,7 +90,7 @@ class RevisionRepo
$file = json_decode($data->_file, true);
if (!empty($file)) {
$file = new File(...$file);
$file = new FileData(...$file);
} else {
$file = null;
}
@@ -104,7 +103,7 @@ class RevisionRepo
schema: $data->schema,
_sys: System::fromArray(json_decode($data->_sys, true)),
data: new RecordData(json_decode($data->data, true)),
_edges: new EdgeCollection(...$edges),
_edges: $edges,
_file: $file
);
}
+9 -5
View File
@@ -4,7 +4,6 @@ namespace Lucent\Revision;
use Lucent\Channel\ChannelService;
use Lucent\Edge\Edge;
use Lucent\Edge\EdgeCollection;
use Lucent\Primitive\Collection;
use Lucent\Record\Record;
use PhpOption\Option;
@@ -14,7 +13,7 @@ readonly class RevisionService
public function __construct(
private ChannelService $channelService,
private RevisionRepo $revisionRepo,
private RevisionRepo $revisionRepo,
)
{
}
@@ -38,15 +37,20 @@ readonly class RevisionService
}
public function create(Record $record, EdgeCollection $edges): void
/**
* @param Record $record
* @param list<Edge> $edges
* @return void
*/
public function create(Record $record, array $edges): void
{
$schema = $this->channelService->getSchema($record->schema)->get();
if($schema->revisions <= 0){
if ($schema->revisions <= 0) {
return;
}
$revision = Revision::fromRecord($record, $edges);
$this->revisionRepo->create($revision);
$this->revisionRepo->cleanupRecord($record->id,$schema->revisions);
$this->revisionRepo->cleanupRecord($record->id, $schema->revisions);
}