remove orphan edges
This commit is contained in:
File diff suppressed because one or more lines are too long
Vendored
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"main.js": {
|
"main.js": {
|
||||||
"file": "assets/main.f303cf88.js",
|
"file": "assets/main.9f2d27e6.js",
|
||||||
"src": "main.js",
|
"src": "main.js",
|
||||||
"isEntry": true,
|
"isEntry": true,
|
||||||
"css": [
|
"css": [
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ export function sortByField(from, to, edges, fieldName) {
|
|||||||
if (from === to) {
|
if (from === to) {
|
||||||
return edges;
|
return edges;
|
||||||
}
|
}
|
||||||
let edgesTosort = edges?.filter((ed) => ed.field === fieldName && ed.depth === 1) ?? [];
|
let edgesTosort = edges?.filter((ed) => ed.field === fieldName && ed.depth === 1 ) ?? [];
|
||||||
let remainingEdge = edges?.filter((ed) => !(ed.field === fieldName && ed.depth === 1)) ?? [];
|
let remainingEdge = edges?.filter((ed) => !(ed.field === fieldName && ed.depth === 1)) ?? [];
|
||||||
|
|
||||||
edgesTosort = array_move(edgesTosort,from, to);
|
edgesTosort = array_move(edgesTosort,from, to);
|
||||||
|
|||||||
@@ -18,6 +18,7 @@
|
|||||||
easing: "cubic-bezier(1, 0, 0, 1)",
|
easing: "cubic-bezier(1, 0, 0, 1)",
|
||||||
onUpdate: function (/**Event*/ evt) {
|
onUpdate: function (/**Event*/ evt) {
|
||||||
// reorder(evt.oldIndex,evt.newIndex);
|
// reorder(evt.oldIndex,evt.newIndex);
|
||||||
|
console.log(evt)
|
||||||
dispatch("update", {
|
dispatch("update", {
|
||||||
source: evt.oldIndex,
|
source: evt.oldIndex,
|
||||||
target: evt.newIndex,
|
target: evt.newIndex,
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
$: references = graph.edges
|
$: references = graph.edges
|
||||||
.filter((edge) => edge.field === field.name)
|
.filter((edge) => edge.field === field.name)
|
||||||
.map((edge) => {
|
.map((edge) => {
|
||||||
return graph.records.find((increc) => increc.id == edge.target && record.id == edge.source);
|
return graph.records.find((increc) => increc.id === edge.target && record.id === edge.source);
|
||||||
}).filter((rec) => (rec?.id ? true : false)) ?? [];
|
}).filter((rec) => (rec?.id ? true : false)) ?? [];
|
||||||
|
|
||||||
let collections = channel.schemas.filter((aschema) =>
|
let collections = channel.schemas.filter((aschema) =>
|
||||||
|
|||||||
@@ -21,6 +21,7 @@
|
|||||||
.map((edge) => {
|
.map((edge) => {
|
||||||
return graph.records.find((increc) => increc.id === edge.target && record.id === edge.source);
|
return graph.records.find((increc) => increc.id === edge.target && record.id === edge.source);
|
||||||
}).filter((rec) => (rec?.id ? true : false)) ?? [];
|
}).filter((rec) => (rec?.id ? true : false)) ?? [];
|
||||||
|
|
||||||
let collections = channel.schemas.filter((aschema) =>
|
let collections = channel.schemas.filter((aschema) =>
|
||||||
field.collections.includes(aschema.name)
|
field.collections.includes(aschema.name)
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -0,0 +1,40 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Lucent\Commands;
|
||||||
|
|
||||||
|
use Illuminate\Console\Command;
|
||||||
|
use Lucent\Edge\EdgeService;
|
||||||
|
use Lucent\Query\Query;
|
||||||
|
|
||||||
|
class RemoveOrphanEdges extends Command
|
||||||
|
{
|
||||||
|
|
||||||
|
protected $signature = 'lucent:removeOrphanEdges';
|
||||||
|
|
||||||
|
protected $description = 'Searches and remove orphan edges';
|
||||||
|
|
||||||
|
|
||||||
|
public function __construct(
|
||||||
|
|
||||||
|
)
|
||||||
|
{
|
||||||
|
parent::__construct();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public function handle(EdgeService $edgeService, Query $query): void
|
||||||
|
{
|
||||||
|
$edges = $edgeService->findAll();
|
||||||
|
|
||||||
|
foreach ($edges as $edge){
|
||||||
|
$source = $query->filter(["id" => $edge->source])->run()->records;
|
||||||
|
$target = $query->filter(["id" => $edge->target])->run()->records;
|
||||||
|
if($source->isEmpty() || $target->isEmpty()){
|
||||||
|
$this->info("Edge is orphan");
|
||||||
|
$edgeService->remove($edge);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
+38
-2
@@ -3,12 +3,16 @@
|
|||||||
use Illuminate\Support\Facades\DB;
|
use Illuminate\Support\Facades\DB;
|
||||||
use Lucent\LucentException;
|
use Lucent\LucentException;
|
||||||
use PDOException;
|
use PDOException;
|
||||||
|
use stdClass;
|
||||||
|
|
||||||
class EdgeRepo
|
class EdgeRepo
|
||||||
{
|
{
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
public static function insert(Edge $edge): void
|
public function insert(Edge $edge): void
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
DB::table("edges")->insert($edge->toDB());
|
DB::table("edges")->insert($edge->toDB());
|
||||||
@@ -21,7 +25,7 @@ class EdgeRepo
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function update(string $from, EdgeCollection $edges): void
|
public function update(string $from, EdgeCollection $edges): void
|
||||||
{
|
{
|
||||||
$edgesDB = collect($edges)->map(fn($e) => $e->toDB())->toArray();
|
$edgesDB = collect($edges)->map(fn($e) => $e->toDB())->toArray();
|
||||||
DB::table("edges")->where("source", $from)->delete();
|
DB::table("edges")->where("source", $from)->delete();
|
||||||
@@ -29,4 +33,36 @@ class EdgeRepo
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public function findAll(): EdgeCollection
|
||||||
|
{
|
||||||
|
$edges = DB::table("edges")->get();
|
||||||
|
return new EdgeCollection(...$edges->map([$this, 'mapEdge'])->toArray());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function mapEdge(stdClass $edge): Edge
|
||||||
|
{
|
||||||
|
|
||||||
|
return new Edge(
|
||||||
|
source: $edge->source,
|
||||||
|
target: $edge->target,
|
||||||
|
sourceSchema: $edge->sourceSchema,
|
||||||
|
targetSchema: $edge->targetSchema,
|
||||||
|
field: $edge->field,
|
||||||
|
rank: $edge->rank,
|
||||||
|
depth: $edge->depth ?? 0
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function remove(Edge $edge): void
|
||||||
|
{
|
||||||
|
DB::table("edges")
|
||||||
|
->where("source", $edge->source)
|
||||||
|
->where("target", $edge->target)
|
||||||
|
->where("sourceSchema", $edge->sourceSchema)
|
||||||
|
->where("targetSchema", $edge->targetSchema)
|
||||||
|
->where("field", $edge->field)
|
||||||
|
->delete();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,12 +4,14 @@ use Lucent\LucentException;
|
|||||||
|
|
||||||
class EdgeService
|
class EdgeService
|
||||||
{
|
{
|
||||||
|
public function __construct(public EdgeRepo $edgeRepo)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @throws LucentException
|
* @throws LucentException
|
||||||
*/
|
*/
|
||||||
public static function create(
|
public function create(
|
||||||
string $source,
|
string $source,
|
||||||
string $target,
|
string $target,
|
||||||
string $sourceSchema,
|
string $sourceSchema,
|
||||||
@@ -29,9 +31,23 @@ class EdgeService
|
|||||||
field: $field,
|
field: $field,
|
||||||
rank: $rank,
|
rank: $rank,
|
||||||
);
|
);
|
||||||
EdgeRepo::insert($edge);
|
$this->edgeRepo->insert($edge);
|
||||||
return $edge;
|
return $edge;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function update(string $from, EdgeCollection $edges): void
|
||||||
|
{
|
||||||
|
$this->edgeRepo->update($from, $edges);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function findAll(): EdgeCollection
|
||||||
|
{
|
||||||
|
return $this->edgeRepo->findAll();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function remove(Edge $edge): void
|
||||||
|
{
|
||||||
|
$this->edgeRepo->remove($edge);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ use Lucent\Channel\ChannelService;
|
|||||||
use Lucent\Commands\CompileSchemas;
|
use Lucent\Commands\CompileSchemas;
|
||||||
use Lucent\Commands\LiveLink;
|
use Lucent\Commands\LiveLink;
|
||||||
use Lucent\Commands\RebuildThumbnails;
|
use Lucent\Commands\RebuildThumbnails;
|
||||||
|
use Lucent\Commands\RemoveOrphanEdges;
|
||||||
use Lucent\File\FileService;
|
use Lucent\File\FileService;
|
||||||
use Lucent\File\ImageService;
|
use Lucent\File\ImageService;
|
||||||
use Lucent\Query\DatabaseGraph\DatabaseGraph;
|
use Lucent\Query\DatabaseGraph\DatabaseGraph;
|
||||||
@@ -68,6 +69,7 @@ class LucentServiceProvider extends ServiceProvider
|
|||||||
CompileSchemas::class,
|
CompileSchemas::class,
|
||||||
RebuildThumbnails::class,
|
RebuildThumbnails::class,
|
||||||
LiveLink::class,
|
LiveLink::class,
|
||||||
|
RemoveOrphanEdges::class,
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ use Lucent\Account\AuthService;
|
|||||||
use Lucent\Channel\ChannelService;
|
use Lucent\Channel\ChannelService;
|
||||||
use Lucent\Edge\Edge;
|
use Lucent\Edge\Edge;
|
||||||
use Lucent\Edge\EdgeCollection;
|
use Lucent\Edge\EdgeCollection;
|
||||||
use Lucent\Edge\EdgeRepo;
|
use Lucent\Edge\EdgeService;
|
||||||
use Lucent\File\FileService;
|
use Lucent\File\FileService;
|
||||||
use Lucent\Id\Id;
|
use Lucent\Id\Id;
|
||||||
use Lucent\LucentException;
|
use Lucent\LucentException;
|
||||||
@@ -28,7 +28,8 @@ readonly class RecordService
|
|||||||
private Validator $recordValidator,
|
private Validator $recordValidator,
|
||||||
private Query $query,
|
private Query $query,
|
||||||
private InputFormatter $inputFormatter,
|
private InputFormatter $inputFormatter,
|
||||||
private RecordRepo $recordRepo
|
private RecordRepo $recordRepo,
|
||||||
|
private EdgeService $edgeService
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@@ -66,7 +67,8 @@ readonly class RecordService
|
|||||||
$uniqueEdgesCollection = EdgeCollection::fromArray($uniqueEdges);
|
$uniqueEdgesCollection = EdgeCollection::fromArray($uniqueEdges);
|
||||||
|
|
||||||
if ($uploadResult->isDuplicate) {
|
if ($uploadResult->isDuplicate) {
|
||||||
EdgeRepo::update($uploadResult->duplicateId, $uniqueEdgesCollection);
|
|
||||||
|
$this->edgeService->update($uploadResult->duplicateId, $uniqueEdgesCollection);
|
||||||
return $uploadResult->duplicateId;
|
return $uploadResult->duplicateId;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -87,8 +89,8 @@ readonly class RecordService
|
|||||||
}
|
}
|
||||||
|
|
||||||
RecordRepo::create($record);
|
RecordRepo::create($record);
|
||||||
EdgeRepo::update($record->id, $uniqueEdgesCollection);
|
$this->edgeService->update($record->id, $uniqueEdgesCollection);
|
||||||
$this->revisionService->create($record,$uniqueEdgesCollection);
|
$this->revisionService->create($record, $uniqueEdgesCollection);
|
||||||
return $record->id;
|
return $record->id;
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -150,10 +152,10 @@ readonly class RecordService
|
|||||||
|
|
||||||
RecordRepo::update($newRecord);
|
RecordRepo::update($newRecord);
|
||||||
if ($updateEdges) {
|
if ($updateEdges) {
|
||||||
EdgeRepo::update($newRecord->id, $uniqueEdgesCollection);
|
$this->edgeService->update($newRecord->id, $uniqueEdgesCollection);
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->revisionService->create($newRecord,$uniqueEdgesCollection);
|
$this->revisionService->create($newRecord, $uniqueEdgesCollection);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user