diff --git a/app/Http/Controllers/Api/Objects/ObjectsController.php b/app/Http/Controllers/Api/Objects/ObjectsController.php index 14672f0..255e126 100644 --- a/app/Http/Controllers/Api/Objects/ObjectsController.php +++ b/app/Http/Controllers/Api/Objects/ObjectsController.php @@ -6,6 +6,7 @@ use App\Http\Controllers\Controller; use App\Models\Objects\Field; use App\Models\Objects\NirObject; use App\Models\Objects\ObjectType; +use App\Services\Filters\FiltersService; use App\Transformers\Objects\ObjectTransformer; use Illuminate\Database\Eloquent\Relations\Relation; use Illuminate\Http\JsonResponse; @@ -19,7 +20,11 @@ class ObjectsController extends Controller { } public function index(Request $request): JsonResponse { + $filters = collect($request->has('filters') ? json_decode($request->get('filters'), true) : [])->filter(function($val) {return $val;}); $query = $this->model->query(); + $service = FiltersService::getService('objects'); + $service->applyFilters($query, $filters); + /* if (($val = $request->get('type')) && ($type = ObjectType::query()->where(['name' => $val])->first())) { $query->whereHas('type', function ($query) use ($val) { $query->where('name', $val)->orWhereHas('parent', function ($query) use ($val) { @@ -36,6 +41,7 @@ class ObjectsController extends Controller { elseif ($field = Field::byUuidOrName($prop)->first()) $field->applyFilter($query, $value); }); $query->orderBy('created_at', 'desc'); + */ $paginator = $query->paginate(config('app.pagination_limit')); return fractal($paginator, new ObjectTransformer())->respond(); } diff --git a/app/Http/Controllers/Api/Pages/PagesController.php b/app/Http/Controllers/Api/Pages/PagesController.php index 533998b..b21b466 100644 --- a/app/Http/Controllers/Api/Pages/PagesController.php +++ b/app/Http/Controllers/Api/Pages/PagesController.php @@ -5,6 +5,7 @@ namespace App\Http\Controllers\Api\Pages; use App\Http\Controllers\Controller; use App\Models\Pages\Page; use App\Models\Publications\Publication; +use App\Services\Filters\FiltersService; use App\Transformers\Pages\PageTransformer; use App\Transformers\Publications\PublicationTransformer; use Illuminate\Http\JsonResponse; @@ -31,7 +32,10 @@ class PagesController extends Controller { } public function index(Request $request): JsonResponse { + $filters = collect($request->has('filters') ? json_decode($request->get('filters'), true) : [])->filter(function($val) {return $val;}); $query = $this->model->query(); + $service = FiltersService::getService('pages'); + $service->applyFilters($query, $filters); $paginator = $query->paginate(config('app.pagination_limit')); return fractal($paginator, new PageTransformer())->respond(); } diff --git a/app/Http/Controllers/Api/Publications/PublicationsController.php b/app/Http/Controllers/Api/Publications/PublicationsController.php index 510f906..27afe7a 100644 --- a/app/Http/Controllers/Api/Publications/PublicationsController.php +++ b/app/Http/Controllers/Api/Publications/PublicationsController.php @@ -6,6 +6,7 @@ use App\Http\Controllers\Controller; use App\Models\Pages\Page; use App\Models\Publications\Publication; use App\Models\Publications\PublicationType; +use App\Services\Filters\FiltersService; use App\Transformers\Publications\PublicationTransformer; use App\Transformers\Registries\RegistryTransformer; use Illuminate\Http\JsonResponse; @@ -26,18 +27,10 @@ class PublicationsController extends Controller { } public function index(Request $request): JsonResponse { + $filters = collect($request->has('filters') ? json_decode($request->get('filters'), true) : [])->filter(function($val) {return $val;}); $query = $this->model->query()->orderBy('published_at', 'desc'); - $user = Auth::user(); - if (!($user->isAdmin ?? null)) { - $query->where(['is_published' => true]); - $query->where('published_at', '<=', now()); - } - - if ($page = Page::byUuid($request->get('page_id'))->first()) { - $query->where(['page_id' => $page->id]); - } elseif ($page = Page::query()->where(['sub_type' => $request->get('sub_type')])->first()) { - $query->where('page_id', $page->id); - } + $service = FiltersService::getService('publications'); + $service->applyFilters($query, $filters); $paginator = $query->paginate(config('app.pagination_limit')); return fractal($paginator, new PublicationTransformer())->respond(); } diff --git a/app/Http/Controllers/Api/Users/UsersController.php b/app/Http/Controllers/Api/Users/UsersController.php index e15c821..95cd827 100644 --- a/app/Http/Controllers/Api/Users/UsersController.php +++ b/app/Http/Controllers/Api/Users/UsersController.php @@ -5,82 +5,71 @@ namespace App\Http\Controllers\Api\Users; use App\Http\Controllers\Controller; use App\Models\User; use App\Transformers\Users\UserTransformer; +use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; -class UsersController extends Controller -{ - protected $model; +class UsersController extends Controller { + protected User $model; - public function __construct(User $model) - { + public function __construct(User $model) { $this->model = $model; + /* $this->middleware('permission:List users')->only('index'); $this->middleware('permission:List users')->only('show'); $this->middleware('permission:Create users')->only('store'); $this->middleware('permission:Update users')->only('update'); $this->middleware('permission:Delete users')->only('destroy'); + */ } - public function index(Request $request) - { - $paginator = $this->model->with('roles.permissions')->paginate($request->get('limit', config('app.pagination_limit', 20))); - if ($request->has('limit')) { - $paginator->appends('limit', $request->get('limit')); - } + public function checkEmail(Request $request): JsonResponse { + $this->validate($request, ['email' => 'required|email|unique:users,email']); + return response()->json(null); + } + + public function index(Request $request): JsonResponse { + $paginator = $this->model->with('roles.permissions')->paginate($request->get('limit', config('app.pagination_limit', 20))); + //if ($request->has('limit')) $paginator->appends('limit', $request->get('limit')); return fractal($paginator, new UserTransformer())->respond(); } - public function show($id) - { + public function show($id): JsonResponse { $user = $this->model->with('roles.permissions')->byUuid($id)->firstOrFail(); - return fractal($user, new UserTransformer())->respond(); } - public function store(Request $request) - { + public function store(Request $request): JsonResponse { $this->validate($request, [ 'name' => 'required', 'email' => 'required|email|unique:users,email', 'password' => 'required|min:8|confirmed', ]); $user = $this->model->create($request->all()); - if ($request->has('roles')) { - $user->syncRoles($request['roles']); - } - + $user->assignRole('User'); + //if ($request->has('roles')) $user->syncRoles($request['roles']); return fractal($user, new UserTransformer())->respond(201); } - public function update(Request $request, $uuid) - { + public function update(Request $request, $uuid): JsonResponse { $user = $this->model->byUuid($uuid)->firstOrFail(); $rules = [ 'name' => 'required', 'email' => 'required|email|unique:users,email,'.$user->id, ]; - if ($request->method() == 'PATCH') { - $rules = [ - 'name' => 'sometimes|required', - 'email' => 'sometimes|required|email|unique:users,email,'.$user->id, - ]; - } + if ($request->method() == 'PATCH') $rules = [ + 'name' => 'sometimes|required', + 'email' => 'sometimes|required|email|unique:users,email,'.$user->id, + ]; $this->validate($request, $rules); - // Except password as we don't want to let the users change a password from this endpoint $user->update($request->except('_token', 'password')); - if ($request->has('roles')) { - $user->syncRoles($request['roles']); - } - + //if ($request->has('roles')) $user->syncRoles($request['roles']); return fractal($user->fresh(), new UserTransformer())->respond(); } - public function destroy(Request $request, $uuid) - { + public function destroy(Request $request, $uuid): JsonResponse { $user = $this->model->byUuid($uuid)->firstOrFail(); $user->delete(); - return response()->json(null, 204); } } diff --git a/app/Models/Objects/NirObject.php b/app/Models/Objects/NirObject.php index 9c443fd..288d8be 100644 --- a/app/Models/Objects/NirObject.php +++ b/app/Models/Objects/NirObject.php @@ -6,11 +6,13 @@ use App\Models\Objects\Values\BooleanValue; use App\Models\Objects\Values\DateValue; use App\Models\Objects\Values\DocumentValue; use App\Models\Objects\Values\FloatValue; +use App\Models\Objects\Values\HtmlValue; use App\Models\Objects\Values\ImageValue; use App\Models\Objects\Values\IntegerValue; use App\Models\Objects\Values\RelationValue; use App\Models\Objects\Values\StringValue; use App\Models\Objects\Values\TextValue; +use App\Models\Pages\Page; use App\Models\Registries\Entry; use App\Models\User; use App\Support\UuidScopeTrait; @@ -46,6 +48,10 @@ class NirObject extends Model { return $this->morphedByMany(Entry::class, 'objectable'); } + public function pages(): MorphToMany { + return $this->morphedByMany(Page::class, 'objectable'); + } + public function objects(): MorphToMany { return $this->morphToMany(NirObject::class, 'objectable'); } @@ -76,6 +82,9 @@ class NirObject extends Model { public function textValues(): HasMany { return $this->hasMany(TextValue::class, 'object_id'); } + public function htmlValues(): HasMany { + return $this->hasMany(HtmlValue::class, 'object_id'); + } public function integerValues(): HasMany { return $this->hasMany(IntegerValue::class, 'object_id'); } diff --git a/app/Models/User.php b/app/Models/User.php index bed2f0b..42207a8 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -113,8 +113,8 @@ class User extends Authenticatable { public function getPrivilegesAttribute(): array { return [ 'admin' => $this->isAdmin, - 'main_company_member' => $this->isMainCompanyMember, - 'is_expert' => $this->isExpert + 'expert' => $this->isExpert, + 'main_company_member' => $this->isMainCompanyMember ]; } @@ -154,6 +154,14 @@ class User extends Authenticatable { } + public function setPassword(string $password): bool { + return $this->update(['password' => Hash::make($password)]); + } + + public function checkPassword(string $password): bool { + return Hash::check($password, $this->password); + } + public function sendPasswordResetNotification($token) { Mail::to($this->email)->send(new PasswordResetRequested($this, $token)); } diff --git a/app/Services/Filters/FiltersService.php b/app/Services/Filters/FiltersService.php index b80e27f..cc7f8e5 100644 --- a/app/Services/Filters/FiltersService.php +++ b/app/Services/Filters/FiltersService.php @@ -4,6 +4,9 @@ namespace App\Services\Filters; use App\Services\Filters\Applications\ApplicationFiltersServices; use App\Services\Filters\Companies\CompanyFiltersServices; +use App\Services\Filters\Objects\ObjectFiltersServices; +use App\Services\Filters\Pages\PageFiltersServices; +use App\Services\Filters\Publications\PublicationFiltersServices; use App\Services\Filters\Registries\RegistryFiltersServices; use Illuminate\Database\Eloquent\Builder; use Illuminate\Support\Collection; @@ -11,9 +14,12 @@ use Illuminate\Support\Facades\Date; class FiltersService { public static array $services = [ + PageFiltersServices::class, + PublicationFiltersServices::class, RegistryFiltersServices::class, CompanyFiltersServices::class, - ApplicationFiltersServices::class + ApplicationFiltersServices::class, + ObjectFiltersServices::class ]; diff --git a/app/Services/Filters/Objects/ObjectFilters.php b/app/Services/Filters/Objects/ObjectFilters.php new file mode 100644 index 0000000..44e588a --- /dev/null +++ b/app/Services/Filters/Objects/ObjectFilters.php @@ -0,0 +1,53 @@ +applyFilters($query, $filters); + return ['groups' => ['data' => $groups], 'total' => $query->count()]; + } + + + public function applyFilters(Builder $query, Collection $filters) { + $this->applyNativeFilters($query, $filters); + $this->applyObjectFilters($query, $filters); + $this->applyPermissionsFilters($query); + } + + public function applyNativeFilters(Builder $query, Collection $filters) { + $filters->each(function($value, $prop) use($query) { + $this->applyNativeFilter($query, $prop, $value); + }); + } + + public function applyNativeFilter(Builder $query, $prop, $value) { + if ($value) { + if ($prop === 'search') $this->applySearchFilter($query, $value, ['name', ['pages' => ['name']], ['stringValues' => ['value']], ['textValues' => ['value']], ['htmlValues' => ['value']]]); + } + } + + public function applyObjectFilters(Builder $query, Collection $filters) { + Field::applyFilters($query, $filters); + } + + public function applyCompanyFilter(Builder $query, $value) { + $query->whereHas('company', function($query) use($value) { + ($value === 'main') ? $query->where(['is_main' => 1]) : $query->whereIn('uuid', is_array($value) ? $value : [$value]); + }); + } + + + public function applyPermissionsFilters(Builder $query) { + } + +} diff --git a/app/Services/Filters/Objects/ObjectFiltersServices.php b/app/Services/Filters/Objects/ObjectFiltersServices.php new file mode 100644 index 0000000..b1de4e5 --- /dev/null +++ b/app/Services/Filters/Objects/ObjectFiltersServices.php @@ -0,0 +1,9 @@ + ObjectFilters::class + ]; +} diff --git a/app/Services/Filters/Pages/PageFilters.php b/app/Services/Filters/Pages/PageFilters.php new file mode 100644 index 0000000..3fcdefc --- /dev/null +++ b/app/Services/Filters/Pages/PageFilters.php @@ -0,0 +1,50 @@ + 'common', + 'title' => 'Общие параметры', + 'fields' => $this->nativeFields($filters) + ] + ]; + $query = CompanyMember::query(); + $this->applyFilters($query, $filters); + return ['groups' => ['data' => $groups], 'total' => $query->count()]; + } + + public function nativeFields(Collection $filters): array { + return [ + ]; + } + + + public function applyFilters(Builder $query, Collection $filters) { + $this->applyNativeFilters($query, $filters); + $this->applyPermissionsFilters($query); + } + + public function applyNativeFilters(Builder $query, Collection $filters) { + $filters->each(function($value, $prop) use($query) { + $this->applyNativeFilter($query, $prop, $value); + }); + } + + public function applyNativeFilter(Builder $query, $prop, $value) { + if ($value) { + if ($prop === 'search') $this->applySearchFilter($query, $value, ['name']); + } + } + + public function applyPermissionsFilters(Builder $query) { + } + +} diff --git a/app/Services/Filters/Pages/PageFiltersServices.php b/app/Services/Filters/Pages/PageFiltersServices.php new file mode 100644 index 0000000..fd930ff --- /dev/null +++ b/app/Services/Filters/Pages/PageFiltersServices.php @@ -0,0 +1,9 @@ + PageFilters::class + ]; +} diff --git a/app/Services/Filters/Publications/PublicationFilters.php b/app/Services/Filters/Publications/PublicationFilters.php new file mode 100644 index 0000000..b7d3708 --- /dev/null +++ b/app/Services/Filters/Publications/PublicationFilters.php @@ -0,0 +1,54 @@ + 'common', + 'title' => 'Общие параметры', + 'fields' => $this->nativeFields($filters) + ] + ]; + $query = CompanyMember::query(); + $this->applyFilters($query, $filters); + return ['groups' => ['data' => $groups], 'total' => $query->count()]; + } + + public function nativeFields(Collection $filters): array { + return [ + ]; + } + + + public function applyFilters(Builder $query, Collection $filters) { + $this->applyNativeFilters($query, $filters); + $this->applyPermissionsFilters($query); + } + + public function applyNativeFilters(Builder $query, Collection $filters) { + $filters->each(function($value, $prop) use($query) { + $this->applyNativeFilter($query, $prop, $value); + }); + } + + public function applyNativeFilter(Builder $query, $prop, $value) { + if ($value) { + if ($prop === 'search') $this->applySearchFilter($query, $value, ['name', 'excerpt']); + elseif ($prop === 'page') $this->applyRelationFilter($query, 'page', $value); + } + } + + public function applyPermissionsFilters(Builder $query) { + $user = Auth::user(); + if (!($user->isAdmin ?? null)) $query->where(['is_published' => true])->where('published_at', '<=', now()); + } + +} diff --git a/app/Services/Filters/Publications/PublicationFiltersServices.php b/app/Services/Filters/Publications/PublicationFiltersServices.php new file mode 100644 index 0000000..7637913 --- /dev/null +++ b/app/Services/Filters/Publications/PublicationFiltersServices.php @@ -0,0 +1,9 @@ + PublicationFilters::class + ]; +} diff --git a/app/Services/Forms/FormsService.php b/app/Services/Forms/FormsService.php index b85a00c..bf4ac9f 100644 --- a/app/Services/Forms/FormsService.php +++ b/app/Services/Forms/FormsService.php @@ -13,6 +13,7 @@ use App\Services\Forms\Users\UserFormsServices; class FormsService { public array $formTitles = ['create' => '', 'update' => '']; + public array $errors = []; public static array $services = [ PageFormsServices::class, diff --git a/app/Services/Forms/Users/UserFormsServices.php b/app/Services/Forms/Users/UserFormsServices.php index 94200b0..c754d12 100644 --- a/app/Services/Forms/Users/UserFormsServices.php +++ b/app/Services/Forms/Users/UserFormsServices.php @@ -4,6 +4,8 @@ namespace App\Services\Forms\Users; class UserFormsServices { public static array $services = [ - 'user' => UserForms::class + 'user' => UserForms::class, + 'userProfile' => UserProfileForms::class, + 'userPassword' => UserPasswordForms::class ]; } diff --git a/app/Services/Forms/Users/UserPasswordForms.php b/app/Services/Forms/Users/UserPasswordForms.php new file mode 100644 index 0000000..d478b43 --- /dev/null +++ b/app/Services/Forms/Users/UserPasswordForms.php @@ -0,0 +1,70 @@ + '', 'update' => 'Изменение пароля']; + + public function form(?string $id = null, array $data = []): array { + $model = User::byUuid($id)->first(); + $groups = [ + ['name' => 'common', 'fields' => $this->commonGroupFields($model)] + ]; + return ['title' => $this->formTitle($model), 'data' => $groups]; + } + + public function commonGroupFields(?User $model): array { + $fields = [ + [ + 'name' => 'current_password', + 'title' => 'Текущий пароль', + 'type' => FieldType::STRING, + 'appearance' => 'password', + 'required' => true + ], + [ + 'name' => 'password', + 'title' => 'Новый пароль', + 'type' => FieldType::STRING, + 'appearance' => 'password', + 'required' => true + ], + [ + 'name' => 'confirmation', + 'title' => 'Подтверждение пароля', + 'type' => FieldType::STRING, + 'appearance' => 'password', + 'required' => true + ] + ]; + return ['data' => $fields]; + } + + + + public function store(array $data): void { + } + + public function update(string $id, array $data): ?JsonResponse { + $model = User::byUuid($id)->firstOrFail(); + //Validator::make($data, []); + if (!$model->checkPassword($data['current_password'])) $this->error('current_password', 'Текущий пароль указан неверно'); + if (($data['password']) !== ($data['confirmation'])) $this->error('confirmation', 'Пароль и подтверждение пароля не совпадают'); + if (!$this->errors) { + $model->setPassword($data['password']); + return fractal($model, new UserTransformer())->respond(); + } else return response()->json($this->errors, 422); + } + + public function error($field, $message) { + $this->errors[$field][] = $message; + } + + +} diff --git a/app/Services/Forms/Users/UserProfileForms.php b/app/Services/Forms/Users/UserProfileForms.php new file mode 100644 index 0000000..a4aeece --- /dev/null +++ b/app/Services/Forms/Users/UserProfileForms.php @@ -0,0 +1,61 @@ + '', 'update' => 'Редактирование профиля']; + + public function form(?string $id = null, array $data = []): array { + $model = User::byUuid($id)->first(); + $groups = [ + ['name' => 'common', 'fields' => $this->commonGroupFields($model)] + ]; + return ['title' => $this->formTitle($model), 'data' => $groups]; + } + + public function commonGroupFields(?User $model): array { + $fields = [ + [ + 'name' => 'name', + 'title' => 'Фамилия, имя, отчество', + 'type' => FieldType::STRING, + 'required' => true, + 'value' => $model->name ?? null + ], + [ + 'name' => 'phone', + 'title' => 'Телефон', + 'type' => FieldType::STRING, + 'value' => $model->phone ?? null + ], + [ + 'name' => 'avatar', + 'title' => 'Фотография', + 'type' => FieldType::IMAGE, + 'value' => ($model->avatar ?? null) ? fractal($model->avatar, new AssetTransformer()) : null + ] + ]; + return ['data' => $fields]; + } + + + + public function store(array $data): void { + } + + public function update(string $id, array $data): ?JsonResponse { + $model = User::byUuid($id)->firstOrFail(); + $model->update($data); + $model->setAvatar($data['avatar'] ?? null); + return fractal($model->fresh(), new UserTransformer())->respond(); + } + + +} diff --git a/app/Transformers/Objects/ObjectTransformer.php b/app/Transformers/Objects/ObjectTransformer.php index d9212fc..77fe061 100644 --- a/app/Transformers/Objects/ObjectTransformer.php +++ b/app/Transformers/Objects/ObjectTransformer.php @@ -4,6 +4,7 @@ namespace App\Transformers\Objects; use App\Models\Objects\NirObject; use App\Services\PermissionsService; +use App\Transformers\Pages\PageTransformer; use App\Transformers\Users\UserTransformer; use League\Fractal\Resource\Collection; use League\Fractal\Resource\Item; @@ -16,7 +17,7 @@ class ObjectTransformer extends TransformerAbstract { ]; protected array $availableIncludes = [ - 'groups', 'type', 'owner', 'permissions' + 'groups', 'type', 'owner', 'pages', 'permissions' ]; public function transform(NirObject $model): array { @@ -42,6 +43,10 @@ class ObjectTransformer extends TransformerAbstract { return $model->owner ? $this->item($model->owner, new UserTransformer()) : null; } + public function includePages(NirObject $model): Collection { + return $this->collection($model->pages, new PageTransformer()); + } + public function includePermissions(NirObject $model): Primitive { return $this->primitive((new PermissionsService($model))->get()); } diff --git a/resources/views/mail/applications/status-changed.blade.php b/resources/views/mail/applications/status-changed.blade.php index 81b8669..3863e25 100644 --- a/resources/views/mail/applications/status-changed.blade.php +++ b/resources/views/mail/applications/status-changed.blade.php @@ -2,8 +2,11 @@ @section('content') @if($status === \App\Models\Applications\ApplicationStatus::PROCESSING) -

{{$application->title}} поступила на рассмотрение

+

{{$application->title}} поступила на рассмотрение

+

Заявитель: {{$application->applicant ?? 'не указано'}}

+

Наименование продукции: {{$application->product->name ?? 'не указано'}}

+

Назначение продукции: {{$application->product->purpose ?? 'не указано'}}

@elseif($status === \App\Models\Applications\ApplicationStatus::COMPLETED) -

{{$application->title}} выполнена.

+

{{$application->title}} выполнена.

@endif @endsection \ No newline at end of file diff --git a/resources/views/mail/user/password-reset-requested.blade.php b/resources/views/mail/user/password-reset-requested.blade.php index 559d32c..59b2830 100644 --- a/resources/views/mail/user/password-reset-requested.blade.php +++ b/resources/views/mail/user/password-reset-requested.blade.php @@ -1,7 +1,7 @@ @extends('mail.layouts.layout') @section('content') -

Вы запросили сброс пароля на интернет-потрале {{\App\Models\Advisories\Advisory::main()->caption}}

+

Вы запросили сброс пароля на сайте ФАУ ФЦС

Сбросить пароль

Ссылка на сброс пароля действительна в течение 60 минут.

Если вы не запрашивали сброс пароля, никаких дальнейших действий не требуется.

diff --git a/routes/api.php b/routes/api.php index 6170b7f..c5338d6 100644 --- a/routes/api.php +++ b/routes/api.php @@ -8,12 +8,11 @@ Route::get('assets/{uuid}', 'Api\Assets\RenderFileController@open'); Route::get('assets/{uuid}/render', 'Api\Assets\RenderFileController@show'); Route::get('assets/{uuid}/download', 'Api\Assets\RenderFileController@download'); -Route::post('register', 'Api\Auth\RegisterController@store'); +Route::post('signup', 'Api\Users\UsersController@store'); +Route::get('users/check-email', 'Api\Users\UsersController@checkEmail'); Route::post('passwords/reset', 'Api\Auth\PasswordsController@store'); Route::put('passwords/reset', 'Api\Auth\PasswordsController@update'); -Route::get('/check-email', 'Api\Auth\RegisterController@checkEmail'); - Route::get('pages', 'Api\Pages\PagesController@index'); Route::get('pages/root', 'Api\Pages\PagesController@root'); Route::get('pages/find', 'Api\Pages\PagesController@find'); @@ -23,8 +22,10 @@ Route::get('publications', 'Api\Publications\PublicationsController@index'); Route::get('publications/find', 'Api\Publications\PublicationsController@find'); Route::get('publications/{id}', 'Api\Publications\PublicationsController@show'); -Route::apiResource('object-types', 'Api\Objects\ObjectTypesController'); +Route::apiResource('object-types', 'Api\Objects\ObjectTypesController', []); +Route::put('objects/move/{id}', 'Api\Objects\ObjectsController@move'); +Route::apiResource('objects', 'Api\Objects\ObjectsController'); Route::group(['prefix' => 'registries'], function() { Route::get('/categories', 'Api\Registries\CategoriesController@index'); @@ -70,8 +71,6 @@ Route::group(['middleware' => ['auth:api']], function() { Route::post('/', 'Api\Assets\UploadFileController@store'); }); - Route::put('objects/move/{id}', 'Api\Objects\ObjectsController@move'); - Route::apiResource('objects', 'Api\Objects\ObjectsController'); Route::group(['prefix' => 'forms'], function() { Route::get('/{target}/{type?}/{id?}', 'Api\Forms\FormsController@get');