From 52ed94e452c428adde70933966e02b1332e4ccec Mon Sep 17 00:00:00 2001 From: Andrey Date: Wed, 20 Mar 2024 14:37:47 +0300 Subject: [PATCH] add object-type, group, and fields without group --- .../Api/Objects/ObjectTypesController.php | 9 +- app/Services/Forms/FormsService.php | 8 +- app/Services/Forms/Objects/FieldForms.php | 93 +++++++++++++++++++ .../Forms/Objects/FieldFormsServices.php | 9 ++ .../Forms/Objects/FieldsGroupForms.php | 50 ++++++++++ .../Objects/FieldsGroupFormsServices.php | 9 ++ .../Forms/Objects/ObjectTypeForms.php | 54 +++++++++++ .../Forms/Objects/ObjectTypeFormsServices.php | 9 ++ .../Objects/ObjectTypeTransformer.php | 9 +- routes/api.php | 3 + 10 files changed, 247 insertions(+), 6 deletions(-) create mode 100644 app/Services/Forms/Objects/FieldForms.php create mode 100644 app/Services/Forms/Objects/FieldFormsServices.php create mode 100644 app/Services/Forms/Objects/FieldsGroupForms.php create mode 100644 app/Services/Forms/Objects/FieldsGroupFormsServices.php create mode 100644 app/Services/Forms/Objects/ObjectTypeForms.php create mode 100644 app/Services/Forms/Objects/ObjectTypeFormsServices.php diff --git a/app/Http/Controllers/Api/Objects/ObjectTypesController.php b/app/Http/Controllers/Api/Objects/ObjectTypesController.php index a909cd0..d953117 100644 --- a/app/Http/Controllers/Api/Objects/ObjectTypesController.php +++ b/app/Http/Controllers/Api/Objects/ObjectTypesController.php @@ -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 { diff --git a/app/Services/Forms/FormsService.php b/app/Services/Forms/FormsService.php index bf4ac9f..1d7c869 100644 --- a/app/Services/Forms/FormsService.php +++ b/app/Services/Forms/FormsService.php @@ -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() { diff --git a/app/Services/Forms/Objects/FieldForms.php b/app/Services/Forms/Objects/FieldForms.php new file mode 100644 index 0000000..ded9088 --- /dev/null +++ b/app/Services/Forms/Objects/FieldForms.php @@ -0,0 +1,93 @@ + 'Создание поля', '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(); + } +} \ No newline at end of file diff --git a/app/Services/Forms/Objects/FieldFormsServices.php b/app/Services/Forms/Objects/FieldFormsServices.php new file mode 100644 index 0000000..22864c6 --- /dev/null +++ b/app/Services/Forms/Objects/FieldFormsServices.php @@ -0,0 +1,9 @@ + FieldForms::class + ]; +} diff --git a/app/Services/Forms/Objects/FieldsGroupForms.php b/app/Services/Forms/Objects/FieldsGroupForms.php new file mode 100644 index 0000000..aa7a7ac --- /dev/null +++ b/app/Services/Forms/Objects/FieldsGroupForms.php @@ -0,0 +1,50 @@ + 'Создание группы объекта', '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(); + } +} \ No newline at end of file diff --git a/app/Services/Forms/Objects/FieldsGroupFormsServices.php b/app/Services/Forms/Objects/FieldsGroupFormsServices.php new file mode 100644 index 0000000..34cd67b --- /dev/null +++ b/app/Services/Forms/Objects/FieldsGroupFormsServices.php @@ -0,0 +1,9 @@ + FieldsGroupForms::class + ]; +} diff --git a/app/Services/Forms/Objects/ObjectTypeForms.php b/app/Services/Forms/Objects/ObjectTypeForms.php new file mode 100644 index 0000000..8cc7593 --- /dev/null +++ b/app/Services/Forms/Objects/ObjectTypeForms.php @@ -0,0 +1,54 @@ + 'Создание типового объекта', '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(); + } +} diff --git a/app/Services/Forms/Objects/ObjectTypeFormsServices.php b/app/Services/Forms/Objects/ObjectTypeFormsServices.php new file mode 100644 index 0000000..8fa9b2e --- /dev/null +++ b/app/Services/Forms/Objects/ObjectTypeFormsServices.php @@ -0,0 +1,9 @@ + ObjectTypeForms::class + ]; +} diff --git a/app/Transformers/Objects/ObjectTypeTransformer.php b/app/Transformers/Objects/ObjectTypeTransformer.php index ae16d02..97d7187 100644 --- a/app/Transformers/Objects/ObjectTypeTransformer.php +++ b/app/Transformers/Objects/ObjectTypeTransformer.php @@ -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 ]; } diff --git a/routes/api.php b/routes/api.php index daa7f14..46b8ab5 100644 --- a/routes/api.php +++ b/routes/api.php @@ -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() {