add object-type, group, and fields without group

master
Andrey 2024-03-20 14:37:47 +03:00
parent f09f04fd05
commit 52ed94e452
10 changed files with 247 additions and 6 deletions

View File

@ -19,13 +19,16 @@ class ObjectTypesController extends Controller {
$parent = ($val = $request->get('parent')) ? $this->model->byUuidOrName($val)->first() : null;
$query = $parent ? $parent->children() : $this->model->query()->where(['parent_id' => 0]);
$query->orderBy('id');
if ($request->get('with_trashed')) $this->model->query()->withTrashed();
$paginator = $query->paginate(config('app.pagination_limit'));
return fractal($paginator, new ObjectTypeTransformer())->respond();
}
public function show($id): JsonResponse {
$model = $this->model->byUuidOrName($id)->firstOrFail();
return fractal($model, new ObjectTypeTransformer())->respond();
public function show(Request $request, $id): JsonResponse {
$query = $this->model->byUuid($id);
if ($request->get('with_trashed')) $query->withTrashed();
$model = $query->firstOrFail();
return fractal($model, new ObjectTypeTransformer($request->get('with_trashed', false)))->respond();
}
public function store(Request $request): JsonResponse {

View File

@ -6,6 +6,9 @@ use App\Services\Forms\Advisories\AdvisoryFormsServices;
use App\Services\Forms\Applications\ApplicationFormsServices;
use App\Services\Forms\Companies\CompanyFormsServices;
use App\Services\Forms\Feedback\FeedbackFormsServices;
use App\Services\Forms\Objects\FieldFormsServices;
use App\Services\Forms\Objects\FieldsGroupFormsServices;
use App\Services\Forms\Objects\ObjectTypeFormsServices;
use App\Services\Forms\Pages\PageFormsServices;
use App\Services\Forms\Publications\PublicationFormsServices;
use App\Services\Forms\Registries\RegistryFormsServices;
@ -23,7 +26,10 @@ class FormsService {
FeedbackFormsServices::class,
AdvisoryFormsServices::class,
CompanyFormsServices::class,
ApplicationFormsServices::class
ApplicationFormsServices::class,
ObjectTypeFormsServices::class,
FieldsGroupFormsServices::class,
FieldFormsServices::class
];
public function __construct() {

View File

@ -0,0 +1,93 @@
<?php
namespace App\Services\Forms\Objects;
use App\Events\FeedbackSender;
use App\Models\Dictionaries\DictionaryItem;
use App\Models\Objects\Field;
use App\Models\Objects\FieldType;
use App\Models\Objects\ObjectType;
use App\Services\Forms\FormsService;
use App\Transformers\Dictionaries\DictionaryItemTransformer;
use App\Transformers\Objects\FieldTransformer;
use App\Transformers\Objects\ObjectTypeTransformer;
class FieldForms extends FormsService
{
public array $formTitles = ['create' => 'Создание поля', 'update' => 'Редактирование поля'];
public function form(?string $id = null, array $data = []): array {
$model = Field::byUuid($id)->first();
$groups = [
['name' => 'common', 'fields' => $this->commonGroupFields($model)]
];
return ['title' => $this->formTitle($model), 'data' => $groups];
}
public function commonGroupFields(?Field $model): array {
$fields = [
[
'name' => 'name',
'title' => 'Наименование',
'type' => FieldType::STRING,
'required' => true,
'value' => $model->name ?? null
],
[
'name' => 'title',
'title' => 'Заголовок',
'type' => FieldType::STRING,
'required' => true,
'value' => $model->title ?? null
],
[
'name' => 'type',
'title' => 'Тип данных',
'type' => FieldType::RELATION,
'required' => true,
'options' => $this->getRelationItems(FieldType::TITLES),
'value' => $this->getRelationValue(FieldType::TITLES, $model->type ?? null)
],
[
'name' => 'required',
'title' => 'Обязательное',
'type' => FieldType::BOOLEAN,
'value' => $model->reqired ?? false
],
[
'name' => 'multiple',
'title' => 'Множественое',
'type' => FieldType::BOOLEAN,
'value' => $model->multiple ?? false
],
[
'name' => 'filterable',
'title' => 'Фильтр',
'type' => FieldType::BOOLEAN,
'value' => $model->filterable ?? false
],
[
'name' => 'params',
'title' => 'Параметры',
'type' => FieldType::STRING,
'value' => $model->hidden ?? null
],
];
return ['data' => $fields];
}
public function store(array $data) {
$object_type = ObjectType::byUuid($data['object_type'] ?? null)->first();
$data['object_type_id'] = $object_type->id ?? null;
$model = Field::create($data);
return fractal($model, new FieldTransformer())->respond();
}
public function update(string $id, array $data) {
$model = ObjectType::byUuid($id)->firstOrFail();
$model->update($data);
return fractal($model->fresh(), new ObjectTypeTransformer())->respond();
}
}

View File

@ -0,0 +1,9 @@
<?php
namespace App\Services\Forms\Objects;
class FieldFormsServices {
public static array $services = [
'field' => FieldForms::class
];
}

View File

@ -0,0 +1,50 @@
<?php
namespace App\Services\Forms\Objects;
use App\Events\FeedbackSender;
use App\Models\Objects\FieldsGroup;
use App\Models\Objects\FieldType;
use App\Models\Objects\ObjectType;
use App\Services\Forms\FormsService;
use App\Transformers\Objects\FieldsGroupTransformer;
use App\Transformers\Objects\ObjectTypeTransformer;
class FieldsGroupForms extends FormsService
{
public array $formTitles = ['create' => 'Создание группы объекта', 'update' => 'Редактирование группы объекта'];
public function form(?string $id = null, array $data = []): array {
$model = FieldsGroup::byUuid($id)->first();
$groups = [
['name' => 'common', 'fields' => $this->commonGroupFields($model)]
];
return ['title' => $this->formTitle($model), 'data' => $groups];
}
public function commonGroupFields(?FieldsGroup $model): array {
$fields = [
[
'name' => 'name',
'title' => 'Наименование',
'type' => FieldType::STRING,
'required' => true,
'value' => $model->name ?? null
]
];
return ['data' => $fields];
}
public function store(array $data) {
$object_type = ObjectType::byUuid($data['object_type'] ?? null)->first();
$data['object_type_id'] = $object_type->id ?? null;
$model = FieldsGroup::create($data);
return fractal($model, new FieldsGroupTransformer())->respond();
}
public function update(string $id, array $data) {
$model = ObjectType::byUuid($id)->firstOrFail();
$model->update($data);
return fractal($model->fresh(), new ObjectTypeTransformer())->respond();
}
}

View File

@ -0,0 +1,9 @@
<?php
namespace App\Services\Forms\Objects;
class FieldsGroupFormsServices {
public static array $services = [
'fieldsGroup' => FieldsGroupForms::class
];
}

View File

@ -0,0 +1,54 @@
<?php
namespace App\Services\Forms\Objects;
use App\Events\FeedbackSender;
use App\Models\Objects\FieldType;
use App\Models\Objects\ObjectType;
use App\Services\Forms\FormsService;
use App\Transformers\Objects\ObjectTypeTransformer;
class ObjectTypeForms extends FormsService {
public array $formTitles = ['create' => 'Создание типового объекта', 'update' => 'Редактирование типового объекта'];
public function form(?string $id = null, array $data = []): array {
$model = ObjectType::byUuid($id)->first();
$groups = [
['name' => 'common', 'fields' => $this->commonGroupFields($model)]
];
return ['title' => $this->formTitle($model), 'data' => $groups];
}
public function commonGroupFields(?ObjectType $model): array {
$fields = [
[
'name' => 'name',
'title' => 'Наименование',
'type' => FieldType::STRING,
'required' => true,
'value' => $model->name ?? null
],
[
'name' => 'title',
'title' => 'Заголовок',
'type' => FieldType::STRING,
'required' => true,
'value' => $model->title ?? null
]
];
return ['data' => $fields];
}
public function store(array $data) {
$parent = ObjectType::byUuid($data['parent'] ?? null)->first();
$data['parent_id'] = $parent->id ?? 0;
$model = ObjectType::create($data);
return fractal($model, new ObjectTypeTransformer())->respond();
}
public function update(string $id, array $data) {
$model = ObjectType::byUuid($id)->firstOrFail();
$model->update($data);
return fractal($model->fresh(), new ObjectTypeTransformer())->respond();
}
}

View File

@ -0,0 +1,9 @@
<?php
namespace App\Services\Forms\Objects;
class ObjectTypeFormsServices {
public static array $services = [
'objectType' => ObjectTypeForms::class
];
}

View File

@ -8,19 +8,24 @@ use League\Fractal\Resource\Item;
use League\Fractal\TransformerAbstract;
class ObjectTypeTransformer extends TransformerAbstract {
public function __construct(?bool $withTrashed = false) {
$this->withTrashed = $withTrashed;
}
protected array $defaultIncludes = [
];
protected array $availableIncludes = [
'parent', 'children', 'groups', 'objects'
'groups', 'parent', 'children', 'objects'
];
public function transform(ObjectType $model): array {
return [
'id' => $model->uuid,
'name' => $model->name,
'title' => $model->title
'title' => $model->title,
'deleted_at' => $model->deleted_at
];
}

View File

@ -46,6 +46,9 @@ Route::group(['prefix' => 'publications'], function() {
Route::group(['prefix' => 'object-types'], function() {
Route::get('/', 'Api\Objects\ObjectTypesController@index');
Route::get('/{id}', 'Api\Objects\ObjectTypesController@show');
Route::group(['middleware' => ['auth:api']], function() {
Route::delete('/{id}', 'Api\Objects\ObjectTypesController@destroy');
});
});
Route::group(['prefix' => 'objects'], function() {