diff --git a/app/Http/Controllers/Api/AssetModelsController.php b/app/Http/Controllers/Api/AssetModelsController.php index 821340fc86..497fda1b72 100644 --- a/app/Http/Controllers/Api/AssetModelsController.php +++ b/app/Http/Controllers/Api/AssetModelsController.php @@ -292,6 +292,30 @@ class AssetModelsController extends Controller return response()->json(Helper::formatStandardApiResponse('success', null, trans('admin/models/message.delete.success'))); } + /** + * Restore a soft-deleted asset model. + */ + public function restore($id): JsonResponse + { + $this->authorize('delete', AssetModel::class); + + if ($assetmodel = AssetModel::withTrashed()->find($id)) { + + if ($assetmodel->deleted_at == '') { + return response()->json(Helper::formatStandardApiResponse('error', null, trans('general.not_deleted', ['item_type' => trans('general.asset_model')])), 200); + } + + // The `restore` action_log entry is written by AssetModelObserver::restoring + if ($assetmodel->restore()) { + return response()->json(Helper::formatStandardApiResponse('success', null, trans('admin/models/message.restore.success')), 200); + } + + return response()->json(Helper::formatStandardApiResponse('error', null, trans('general.could_not_restore', ['item_type' => trans('general.asset_model'), 'error' => $assetmodel->getErrors()->first()])), 200); + } + + return response()->json(Helper::formatStandardApiResponse('error', null, trans('admin/models/message.does_not_exist')), 200); + } + /** * Gets a paginated collection for the select2 menus * diff --git a/routes/api.php b/routes/api.php index ac63f7b138..0eb4640cb6 100644 --- a/routes/api.php +++ b/routes/api.php @@ -927,6 +927,13 @@ Route::group(['prefix' => 'v1', 'middleware' => ['api', 'api-throttle:api']], fu 'assets', ] )->name('api.models.assets'); + + Route::post('{id}/restore', + [ + Api\AssetModelsController::class, + 'restore', + ] + )->name('api.models.restore'); }); Route::resource('models',