diff --git a/app/Http/Controllers/Api/AssetsController.php b/app/Http/Controllers/Api/AssetsController.php index ee37c3ad0..039d5b174 100644 --- a/app/Http/Controllers/Api/AssetsController.php +++ b/app/Http/Controllers/Api/AssetsController.php @@ -379,14 +379,24 @@ class AssetsController extends Controller $assets = $assets->withTrashed(); } - $assets = $assets->get(); + if (($assets = $assets->get()) && ($assets->count()) > 0) { + + // If there is exactly one result and the deleted parameter is not passed, we should pull the first (and only) + // asset from the returned collection, since transformAsset() expects an Asset object, NOT a collection + if (($assets->count() == 1) && ($request->input('deleted') != 'true')) { + return (new AssetsTransformer)->transformAsset($assets->first()); + + // If there is more than one result OR if the endpoint is requesting deleted items (even if there is only one + // match, return the normal collection transformed. + } else { + return (new AssetsTransformer)->transformAssets($assets, $assets->count()); + } - if (($assets) && ($assets->count() > 0)) { - return (new AssetsTransformer)->transformAssets($assets, $assets->count()); - } else { - return response()->json(Helper::formatStandardApiResponse('error', null, trans('admin/hardware/message.does_not_exist')), 200); } + // If there are 0 results, return the "no such asset" response + return response()->json(Helper::formatStandardApiResponse('error', null, trans('admin/hardware/message.does_not_exist')), 200); + } /** @@ -409,11 +419,24 @@ class AssetsController extends Controller $assets = $assets->get(); - if (($assets) && ($assets->count() > 0)) { - return (new AssetsTransformer)->transformAssets($assets, $assets->count()); - } else { - return response()->json(Helper::formatStandardApiResponse('error', null, trans('admin/hardware/message.does_not_exist')), 200); + if (($assets = $assets->get()) && ($assets->count()) > 0) { + + // If there is exactly one result and the deleted parameter is not passed, we should pull the first (and only) + // asset from the returned collection, since transformAsset() expects an Asset object, NOT a collection + if (($assets->count() == 1) && ($request->input('deleted') != 'true')) { + return (new AssetsTransformer)->transformAsset($assets->first()); + + // If there is more than one result OR if the endpoint is requesting deleted items (even if there is only one + // match, return the normal collection transformed. + } else { + return (new AssetsTransformer)->transformAssets($assets, $assets->count()); + } + } + + // If there are 0 results, return the "no such asset" response + return response()->json(Helper::formatStandardApiResponse('error', null, trans('admin/hardware/message.does_not_exist')), 200); + } /**