records and edgs
This commit is contained in:
@@ -1,37 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Lucent\Http\Controller\Api;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Http\Response;
|
||||
use Lucent\Edge\EdgeService;
|
||||
use Lucent\LucentException;
|
||||
use function Lucent\Response\fail;
|
||||
use function Lucent\Response\ok;
|
||||
|
||||
class EdgeController extends Controller
|
||||
{
|
||||
|
||||
public function create(Request $request): Response
|
||||
{
|
||||
try {
|
||||
$edge = EdgeService::create(
|
||||
source: $request->input("source"),
|
||||
target: $request->input("target"),
|
||||
sourceSchema: $request->input("sourceSchema"),
|
||||
targetSchema: $request->input("targetSchema"),
|
||||
field: $request->input("field"),
|
||||
rank: $request->input("rank") ?? "",
|
||||
);
|
||||
} catch (LucentException $th) {
|
||||
return fail($th);
|
||||
}
|
||||
|
||||
|
||||
return ok([
|
||||
"edge" => $edge,
|
||||
]);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,62 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Lucent\Http\Controller\Api;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use Lucent\Account\AuthService;
|
||||
use Lucent\Channel\ChannelRepo;
|
||||
use Lucent\File\FileUploadResult;
|
||||
use Lucent\Query\Query;
|
||||
use Lucent\Record\RecordService;
|
||||
use function Lucent\File\uploadFile;
|
||||
use function Lucent\Response\fail;
|
||||
use function Lucent\Response\ok;
|
||||
|
||||
class FileController extends Controller
|
||||
{
|
||||
public function __construct(
|
||||
private readonly RecordService $recordService,
|
||||
private readonly Query $query
|
||||
)
|
||||
{
|
||||
}
|
||||
|
||||
public function upload(Request $request)
|
||||
{
|
||||
$validator = Validator::make(request()->all(), [
|
||||
'files.*' => 'required|file|max:100000',
|
||||
]);
|
||||
|
||||
if ($validator->fails()) {
|
||||
return fail($validator->errors()->first());
|
||||
}
|
||||
$channel = ChannelRepo::current();
|
||||
$schema = $channel->schemas->firstWhere("name", $request->input("schema"));
|
||||
$files = request()->file('files');
|
||||
|
||||
|
||||
$uploadResults = collect($files)->map(fn($file) => uploadFile($schema, $file))->toArray();
|
||||
$insertedIds = collect($uploadResults)
|
||||
->filter(fn(FileUploadResult $res) => !$res->isDuplicate)
|
||||
->values()
|
||||
->map(function (FileUploadResult $uploadResult) use ($schema, $request) {
|
||||
|
||||
|
||||
return $this->recordService->create(
|
||||
userId: AuthService::currentUserId($request),
|
||||
schemaName: $schema->name,
|
||||
data: [],
|
||||
file: (array)$uploadResult->recordFile,
|
||||
edges: [],
|
||||
status: $request->input("status") ?? "published",
|
||||
uploadFromUrl: ""
|
||||
);
|
||||
|
||||
})->toArray();
|
||||
|
||||
|
||||
return ok($insertedIds);
|
||||
}
|
||||
}
|
||||
@@ -1,107 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Lucent\Http\Controller\Api;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
use Lucent\Channel\ChannelRepo;
|
||||
use Lucent\LucentException;
|
||||
use Lucent\Query\Query;
|
||||
use Lucent\Record\RecordService;
|
||||
use Lucent\Schema\Validator\ValidatorException;
|
||||
use Throwable;
|
||||
use function Lucent\Response\fail;
|
||||
use function Lucent\Response\ok;
|
||||
|
||||
class RecordController extends Controller
|
||||
{
|
||||
public function __construct(
|
||||
private readonly RecordService $recordService,
|
||||
private readonly Query $query
|
||||
)
|
||||
{
|
||||
}
|
||||
|
||||
public function records(Request $request)
|
||||
{
|
||||
$channel = ChannelRepo::current();
|
||||
$urlParams = $request->all();
|
||||
$sort = data_get($urlParams, "sort") ?? "-_sys.updatedAt";
|
||||
$filter = data_get($urlParams, "filter") ?? [];
|
||||
$arguments = array_merge([
|
||||
|
||||
], $filter);
|
||||
|
||||
$skip = data_get($urlParams, "skip") ?? 0;
|
||||
$limit = data_get($urlParams, "limit") ?? 15;
|
||||
$queryResult = $this->query
|
||||
->filter($arguments)
|
||||
->limit($limit)
|
||||
->skip($skip)
|
||||
->sort($sort)
|
||||
->childrenDepth($request->input("childrenDepth") ?? 1)
|
||||
->parentsDepth($request->input("parentsDepth") ?? 0)
|
||||
->runWithCount();
|
||||
|
||||
$graph = $queryResult->getQueryRecords($channel->schemas);
|
||||
$total = $queryResult->getTotal();
|
||||
|
||||
return ok([
|
||||
"graph" => $graph->toArray(),
|
||||
"sort" => $sort,
|
||||
"limit" => $limit,
|
||||
"skip" => $skip,
|
||||
"total" => $total,
|
||||
]);
|
||||
}
|
||||
|
||||
public function create(Request $request)
|
||||
{
|
||||
|
||||
try {
|
||||
|
||||
$recordId = $this->recordService->create(
|
||||
userId: $request->input("userId"),
|
||||
schemaName: $request->input("schema"),
|
||||
data: $request->input("data") ?? [],
|
||||
file: $request->input("file") ?? [],
|
||||
edges: $request->input("edges") ?? [],
|
||||
status: $request->input("status") ?? "draft",
|
||||
uploadFromUrl: $request->input("uploadFromUrl") ?? ""
|
||||
);
|
||||
|
||||
} catch (ValidatorException $th) {
|
||||
return fail($th->getValidatorErrors());
|
||||
} catch (LucentException $th) {
|
||||
return fail($th);
|
||||
}
|
||||
return ok(["id" => $recordId]);
|
||||
}
|
||||
|
||||
public function update(Request $request)
|
||||
{
|
||||
|
||||
try {
|
||||
$this->recordService->update(
|
||||
userId: $request->input("userId"),
|
||||
id: $request->route("id"),
|
||||
data: $request->input("data"),
|
||||
status: $request->input("status"),
|
||||
edges: $request->input("edges") ?? [],
|
||||
updateEdges: false,
|
||||
);
|
||||
} catch (ValidatorException $th) {
|
||||
return fail($th->getValidatorErrors());
|
||||
} catch (LucentException $th) {
|
||||
return fail($th);
|
||||
} catch (Throwable $th) {
|
||||
if ($th->getCode() == 11000) {
|
||||
return fail("ID has to be unique in the channel");
|
||||
}
|
||||
return fail($th);
|
||||
}
|
||||
|
||||
return ok();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,81 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Lucent\Http\Controller\Api;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
use Lucent\Schema\SchemaService;
|
||||
use function Lucent\Response\fail;
|
||||
use function Lucent\Response\ok;
|
||||
|
||||
class SchemaController extends Controller
|
||||
{
|
||||
public function __construct(
|
||||
private readonly SchemaService $schemaService
|
||||
)
|
||||
{
|
||||
}
|
||||
// public function find(Request $request)
|
||||
// {
|
||||
// $cid = $request->header("CHANNEL-ID");
|
||||
// $channelContext = ChannelContext::fromId($cid)->withSchemas();
|
||||
// return ok($channelContext->getSchemas());
|
||||
// }
|
||||
|
||||
// public function findOne(Request $request, string $name)
|
||||
// {
|
||||
// $cid = $request->header("CHANNEL-ID");
|
||||
// $channelContext = ChannelContext::fromId($cid)->withSchemas();
|
||||
// $schema = SchemaRepo::context($channelContext)->findByName($name);
|
||||
// return ok($schema->toArray());
|
||||
// }
|
||||
|
||||
public function create(Request $request)
|
||||
{
|
||||
try {
|
||||
$schema = $this->schemaService->create(
|
||||
name: $request->input("name"),
|
||||
label: $request->input("label"),
|
||||
type: $request->input("type"),
|
||||
isEntry: $request->input("isEntry"),
|
||||
revisionRetentionDays: $request->input("revisionRetentionDays"),
|
||||
revisionRetentionNumber: $request->input("revisionRetentionNumber"),
|
||||
trashedRetentionDays: $request->input("trashedRetentionDays"),
|
||||
fields: $request->input("fields"),
|
||||
titleTemplate: $request->input("titleTemplate") ?? "",
|
||||
visible: $request->input("visible") ?? [],
|
||||
path: $request->input("path") ?? "",
|
||||
);
|
||||
} catch (\Throwable $th) {
|
||||
return fail($th);
|
||||
}
|
||||
|
||||
return ok($schema->toArray());
|
||||
}
|
||||
|
||||
// public function update(Request $request)
|
||||
// {
|
||||
// $cid = $request->header("CHANNEL-ID");
|
||||
// try {
|
||||
// $channelContext = ChannelContext::fromId($cid);
|
||||
// SchemaRepo::context($channelContext)->update($request->all());
|
||||
// } catch (\Throwable $th) {
|
||||
// return fail($th);
|
||||
// }
|
||||
|
||||
// $schema = SchemaRepo::context($channelContext)->findByName($request->input("name"));
|
||||
// return ok($schema->toArray());
|
||||
// }
|
||||
|
||||
public function delete(Request $request)
|
||||
{
|
||||
try {
|
||||
$this->schemaService->delete($request->route("name"));
|
||||
} catch (\Throwable $th) {
|
||||
return fail($th);
|
||||
}
|
||||
|
||||
|
||||
return ok();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
<?php
|
||||
|
||||
namespace Lucent\Http\Controller;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
use Lucent\Edge\EdgeService;
|
||||
use Lucent\Query\Query;
|
||||
|
||||
class EdgeController extends Controller
|
||||
{
|
||||
public function __construct(
|
||||
public EdgeService $edgeService,
|
||||
public Query $query,
|
||||
)
|
||||
{
|
||||
}
|
||||
|
||||
public function insertMany(Request $request)
|
||||
{
|
||||
|
||||
$this->edgeService->createMany(
|
||||
source: $request->input("source"),
|
||||
sourceSchema: $request->input("sourceSchema"),
|
||||
targetSchema: $request->input("targetSchema"),
|
||||
field: $request->input("field"),
|
||||
targets: $request->input("targets"),
|
||||
);
|
||||
$graph = $this->query
|
||||
->filter(["id" => $request->input("source")])
|
||||
->limit(1)
|
||||
->skip(0)
|
||||
->childrenDepth(2)
|
||||
->childrenLimit(200)
|
||||
->parentsDepth(1)
|
||||
->parentsLimit(200)
|
||||
->run();
|
||||
|
||||
return [
|
||||
"graph" => toArray($graph),
|
||||
];
|
||||
}
|
||||
|
||||
}
|
||||
@@ -6,11 +6,12 @@ use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use Lucent\Channel\ChannelService;
|
||||
use Lucent\File\FileService;
|
||||
use Lucent\File\FileUploadResult;
|
||||
use Lucent\Query\Query;
|
||||
use Lucent\Record\InputData\RecordInputData;
|
||||
use Lucent\Record\RecordService;
|
||||
use function Lucent\File\loadDisk;
|
||||
use function Lucent\File\uploadFile;
|
||||
use Lucent\Record\Status;
|
||||
use function Lucent\Response\fail;
|
||||
use function Lucent\Response\ok;
|
||||
|
||||
@@ -21,6 +22,7 @@ class FileController extends Controller
|
||||
public function __construct(
|
||||
private readonly ChannelService $channelService,
|
||||
private readonly RecordService $recordService,
|
||||
private readonly FileService $fileService,
|
||||
private readonly Query $query
|
||||
)
|
||||
{
|
||||
@@ -28,7 +30,7 @@ class FileController extends Controller
|
||||
|
||||
public function download(Request $request)
|
||||
{
|
||||
$disk = loadDisk();
|
||||
$disk = $this->fileService->loadDisk();
|
||||
return $disk->download($request->input("path"));
|
||||
}
|
||||
|
||||
@@ -46,19 +48,18 @@ class FileController extends Controller
|
||||
$files = $request->file('files');
|
||||
|
||||
|
||||
$uploadResults = collect($files)->map(fn($file) => uploadFile($schema, $file))->toArray();
|
||||
$uploadResults = collect($files)->map(fn($file) => $this->fileService->upload($schema, $file))->toArray();
|
||||
collect($uploadResults)
|
||||
->filter(fn(FileUploadResult $res) => !$res->isDuplicate)
|
||||
->values()
|
||||
->map(function (FileUploadResult $uploadResult) use ($schema) {
|
||||
|
||||
return $this->recordService->create(
|
||||
schemaName: $schema->name,
|
||||
data: [],
|
||||
file: (array)$uploadResult->recordFile,
|
||||
edges: [],
|
||||
status: "published",
|
||||
uploadFromUrl: ""
|
||||
new RecordInputData(
|
||||
schemaName: $schema->name,
|
||||
status: Status::PUBLISHED,
|
||||
|
||||
),
|
||||
file: $uploadResult->recordFile,
|
||||
);
|
||||
|
||||
})->toArray();
|
||||
|
||||
@@ -10,10 +10,12 @@ use Lucent\Channel\ChannelService;
|
||||
use Lucent\LucentException;
|
||||
use Lucent\Query\Operator;
|
||||
use Lucent\Query\Query;
|
||||
use Lucent\Record\InputData\EdgeInputData;
|
||||
use Lucent\Record\InputData\RecordInputData;
|
||||
use Lucent\Record\Manager;
|
||||
use Lucent\Record\QueryRecord;
|
||||
use Lucent\Record\RecordService;
|
||||
use Lucent\Schema\FieldInterface;
|
||||
use Lucent\Record\Status;
|
||||
use Lucent\Schema\System;
|
||||
use Lucent\Schema\Validator\ValidatorException;
|
||||
use Lucent\Svelte\Svelte;
|
||||
@@ -250,37 +252,6 @@ class RecordController extends Controller
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
// public function editInline(Request $request)
|
||||
// {
|
||||
// $rid = $request->route("rid");
|
||||
//
|
||||
// $graph = $this->query
|
||||
// ->filter(["id" => $rid])
|
||||
// ->limit(1)
|
||||
// ->childrenDepth(2)
|
||||
// ->parentsDepth(1)
|
||||
// ->run();
|
||||
//
|
||||
// $record = $graph->records->first();
|
||||
//
|
||||
// if(!in_array($record->schema,$this->accountService->currentReadableSchemas())){
|
||||
// return $this->svelte->render(
|
||||
// layout: "channel",
|
||||
// view: "recordNotFound",
|
||||
// title: "Schema Not Found",
|
||||
// );
|
||||
// }
|
||||
//
|
||||
// return ok(
|
||||
// [
|
||||
// "graph" => toArray($graph),
|
||||
// "record" => toArray($record)
|
||||
// ]
|
||||
// );
|
||||
// }
|
||||
|
||||
|
||||
public function suggestions(Request $request)
|
||||
{
|
||||
$arguments = [
|
||||
@@ -317,22 +288,21 @@ class RecordController extends Controller
|
||||
|
||||
if ($request->input("isCreateMode")) {
|
||||
$recordId = $this->recordService->create(
|
||||
schemaName: $request->input("record.schema"),
|
||||
data: $request->input("record.data"),
|
||||
id: $recordId ?? "",
|
||||
file: $request->input("record._file") ?? [],
|
||||
edges: $request->input("edges") ?? [],
|
||||
status: $request->input("record.status"),
|
||||
uploadFromUrl: ""
|
||||
data: new RecordInputData(
|
||||
$request->input("record.schema"),
|
||||
$recordId ?? "",
|
||||
$request->input("record.data"),
|
||||
Status::from($request->input("record.status")),
|
||||
),
|
||||
edges: array_map(EdgeInputData::fromArray(...), $request->input("edges") ?? [])
|
||||
);
|
||||
} else {
|
||||
|
||||
$this->recordService->update(
|
||||
$this->recordService->updateWithEdges(
|
||||
id: $request->input("record.id"),
|
||||
data: $request->input("record.data"),
|
||||
status: $request->input("record.status"),
|
||||
edges: $request->input("edges"),
|
||||
updateEdges: true,
|
||||
status: Status::from($request->input("record.status")),
|
||||
edges: array_map(EdgeInputData::fromArray(...), $request->input("edges") ?? []),
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
+16
-19
@@ -1,25 +1,22 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Support\Facades\Route;
|
||||
use Lucent\Http\Controller\Api\EdgeController;
|
||||
use Lucent\Http\Controller\Api\FileController;
|
||||
use Lucent\Http\Controller\Api\RecordController;
|
||||
use Lucent\Http\Controller\Api\SchemaController;
|
||||
|
||||
|
||||
Route::middleware('auth.api:editor')->group(function () {
|
||||
|
||||
Route::post('/records', [RecordController::class, 'create']);
|
||||
Route::put('/records/{id}', [RecordController::class, 'update']);
|
||||
|
||||
Route::post('/edges', [EdgeController::class, 'create']);
|
||||
Route::post('/files', [FileController::class, 'upload']);
|
||||
});
|
||||
|
||||
Route::middleware('auth.api:reader')->group(function () {
|
||||
Route::get('/schemas', [SchemaController::class, 'find']);
|
||||
Route::get('/schemas/{name}', [SchemaController::class, 'findOne']);
|
||||
|
||||
Route::get('/records', [RecordController::class, 'records']);
|
||||
});
|
||||
//
|
||||
//Route::middleware('auth.api:editor')->group(function () {
|
||||
//
|
||||
// Route::post('/records', [RecordController::class, 'create']);
|
||||
// Route::put('/records/{id}', [RecordController::class, 'update']);
|
||||
//
|
||||
// Route::post('/edges', [EdgeController::class, 'create']);
|
||||
// Route::post('/files', [FileController::class, 'upload']);
|
||||
//});
|
||||
//
|
||||
//Route::middleware('auth.api:reader')->group(function () {
|
||||
// Route::get('/schemas', [SchemaController::class, 'find']);
|
||||
// Route::get('/schemas/{name}', [SchemaController::class, 'findOne']);
|
||||
//
|
||||
// Route::get('/records', [RecordController::class, 'records']);
|
||||
//});
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@ use Illuminate\Support\Facades\Route;
|
||||
use Lucent\Http\Controller\AccountController;
|
||||
use Lucent\Http\Controller\AuthController;
|
||||
use Lucent\Http\Controller\BuildController;
|
||||
use Lucent\Http\Controller\EdgeController;
|
||||
use Lucent\Http\Controller\FileController;
|
||||
use Lucent\Http\Controller\HomeController;
|
||||
use Lucent\Http\Controller\MemberController;
|
||||
@@ -60,6 +61,10 @@ Route::group([
|
||||
Route::post('/{rid}/rollback/{version}', [RecordController::class, 'rollback']);
|
||||
});
|
||||
|
||||
Route::middleware(["lucent.auth"])->prefix("/edges")->group(function () {
|
||||
Route::post('/insert-many', [EdgeController::class, 'insertMany']);
|
||||
});
|
||||
|
||||
Route::middleware(["lucent.auth"])->group(function () {
|
||||
Route::get('/records/{rid}/revisions', [RevisionController::class, 'index']);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user