diff --git a/app/Models/Registries/Registry.php b/app/Models/Registries/Registry.php new file mode 100644 index 0000000..3a3f9c4 --- /dev/null +++ b/app/Models/Registries/Registry.php @@ -0,0 +1,42 @@ +belongsTo(Page::class); + } + + + + public function getParsedTypeAttribute(): array { + return ['name' => $this->type, 'title' => RegistryType::TITLES[$this->type] ?? null]; + } + + +} diff --git a/app/Models/Registries/RegistryEntry.php b/app/Models/Registries/RegistryEntry.php new file mode 100644 index 0000000..4c41b94 --- /dev/null +++ b/app/Models/Registries/RegistryEntry.php @@ -0,0 +1,35 @@ +belongsTo(Registry::class); + } + + + +} diff --git a/app/Models/Registries/RegistryType.php b/app/Models/Registries/RegistryType.php new file mode 100644 index 0000000..213e78f --- /dev/null +++ b/app/Models/Registries/RegistryType.php @@ -0,0 +1,11 @@ + 'Реестр документов' + ]; +} \ No newline at end of file diff --git a/app/Transformers/Publications/PublicationTransformer.php b/app/Transformers/Publications/PublicationTransformer.php index 16c0819..d1f6abe 100644 --- a/app/Transformers/Publications/PublicationTransformer.php +++ b/app/Transformers/Publications/PublicationTransformer.php @@ -2,7 +2,6 @@ namespace App\Transformers\Publications; -use App\Models\Pages\Page; use App\Models\Publications\Publication; use App\Services\PermissionsService; use App\Transformers\Assets\AssetTransformer; diff --git a/app/Transformers/Registries/RegistryTransformer.php b/app/Transformers/Registries/RegistryTransformer.php new file mode 100644 index 0000000..da19ee4 --- /dev/null +++ b/app/Transformers/Registries/RegistryTransformer.php @@ -0,0 +1,46 @@ + $model->uuid, + 'type' => $model->parsedType, + 'name' => $model->name, + 'created_at' => $model->created_at ? $model->created_at->toIso8601String() : null, + 'updated_at' => $model->updated_at ? $model->updated_at->toIso8601String() : null + ]; + } + + public function includePage(Registry $model): ?Item { + return $model->page ? $this->item($model->page, new PageTransformer()) : null; + } + + public function includeEntries(Registry $model): Collection { + return $this->collection($model->objects, new ObjectTransformer()); + } + + public function includePermissions(Registry $model): Primitive { + return $this->primitive((new PermissionsService($model))->get()); + } + + +} diff --git a/database/migrations/2023_06_14_143616_create_registries_table.php b/database/migrations/2023_06_14_143616_create_registries_table.php new file mode 100644 index 0000000..bfa864f --- /dev/null +++ b/database/migrations/2023_06_14_143616_create_registries_table.php @@ -0,0 +1,36 @@ +id(); + $table->char('uuid', 36)->index()->unique(); + $table->integer('page_id')->index()->default(0); + $table->string('type')->index()->nullable(); + $table->string('name')->index()->nullable(); + $table->timestamps(); + $table->softDeletes(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('registries'); + } +} diff --git a/database/seeders/Objects/ObjectTypesTableSeeder.php b/database/seeders/Objects/ObjectTypesTableSeeder.php index 96086de..887f895 100644 --- a/database/seeders/Objects/ObjectTypesTableSeeder.php +++ b/database/seeders/Objects/ObjectTypesTableSeeder.php @@ -10,6 +10,7 @@ class ObjectTypesTableSeeder extends Seeder { 'page-sidebar' => [ 'title' => 'Сторонний блок контентной страницы' ], + 'page-section' => [ 'title' => 'Секция контентной страницы', 'children' => [ @@ -32,6 +33,15 @@ class ObjectTypesTableSeeder extends Seeder { 'title' => 'Видео' ] ] + ], + + 'registry-entry' => [ + 'title' => 'Запись в реестре', + 'children' => [ + 'registry-entry-document' => [ + 'title' => 'Документ' + ] + ] ] ]; diff --git a/database/seeders/Pages/PagesTableSeeder.php b/database/seeders/Pages/PagesTableSeeder.php index 9a7bdf1..63a581b 100644 --- a/database/seeders/Pages/PagesTableSeeder.php +++ b/database/seeders/Pages/PagesTableSeeder.php @@ -85,7 +85,11 @@ class PagesTableSeeder extends Seeder 'Ответы на часто задаваемые вопросы' => [], ] ], - 'КСИ' => [], + 'КСИ' => [ + 'children' => [ + + ] + ], 'Добровольная сертификация' => [ 'children' => [ 'О системе' => [],