create document flow

This commit is contained in:
2024-03-23 22:15:06 +02:00
parent c649077e37
commit 322c48b78b
15 changed files with 230 additions and 129 deletions
+24 -10
View File
@@ -8,25 +8,39 @@ use Lucent\Record\FileInfo;
use Lucent\Record\Record;
use Lucent\Record\RecordData;
use Lucent\Record\System;
use PhpOption\Option;
readonly class Revision
{
/**
* @param string $id
* @param string $recordId
* @param string $schema
* @param System $_sys
* @param RecordData $data
* @param Option<EdgeCollection> $_edges
* @param Option<FileInfo> $_file
*/
function __construct(
public string $id,
public string $recordId,
public string $schema,
public System $_sys,
public RecordData $data,
public EdgeCollection $_edges,
public ?FileInfo $_file = null,
public string $id,
public string $recordId,
public string $schema,
public System $_sys,
public RecordData $data,
public Option $_edges,
public Option $_file,
)
{
}
public static function fromRecord(Record $record, EdgeCollection $edges): Revision
/**
* @param Record $record
* @param Option<EdgeCollection> $edges
* @return Revision
*/
public static function fromRecord(Record $record, Option $edges): Revision
{
return new Revision(
id: (string)Str::uuid(),
@@ -35,7 +49,7 @@ readonly class Revision
_sys: $record->_sys,
data: $record->data,
_edges: $edges,
_file: $record->_file
_file: empty($record->_file) ? none() : some($record->_file)
);
}
+4 -13
View File
@@ -3,7 +3,6 @@
namespace Lucent\Revision;
use Illuminate\Support\Facades\DB;
use Lucent\Edge\Edge;
use Lucent\Edge\EdgeCollection;
use Lucent\Record\FileInfo;
use Lucent\Record\RecordData;
@@ -80,23 +79,15 @@ class RevisionRepo
"recordId" => $revision->recordId,
"schema" => $revision->schema,
"_sys" => json_encode($revision->_sys),
"_file" => json_encode($revision->_file),
"_file" => $revision->_file->map(fn($v) => json_encode($v))->getOrElse(null),
"data" => json_encode($revision->data),
"_edges" => $revision->_edges->toJson(),
"_edges" => $revision->_edges->getOrElse(null)->toJson(),
];
}
public function fromDB(stdClass $data): Revision
{
$file = json_decode($data->_file, true);
if (!empty($file)) {
$file = new FileInfo(...$file);
} else {
$file = null;
}
$edges = array_map(fn($e) => Edge::fromArray($e), json_decode($data->_edges ?? "[]", true));
return new Revision(
id: $data->id,
@@ -104,8 +95,8 @@ 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),
_file: $file
_edges: Option::fromValue($data->_edges)->map([EdgeCollection::class,'fromJson']),
_file: Option::fromValue($data->_file)->map([FileInfo::class,'fromJSON'])
);
}
}
+6 -1
View File
@@ -37,7 +37,12 @@ readonly class RevisionService
}
public function create(Record $record, EdgeCollection $edges): void
/**
* @param Record $record
* @param Option<EdgeCollection> $edges
* @return void
*/
public function create(Record $record, Option $edges): void
{
$schema = $this->channelService->getSchema($record->schema)->get();
if($schema->revisions <= 0){