delete done

This commit is contained in:
spencerrlongg 2024-10-30 15:19:34 -05:00
parent 698434dcf8
commit c0ea1fbe78
7 changed files with 92 additions and 55 deletions

View file

@ -2,11 +2,37 @@
namespace App\Actions\Assets;
use App\Events\CheckoutableCheckedIn;
use App\Models\Asset;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Storage;
class DestroyAssetAction
{
public static function run()
public static function run(Asset $asset)
{
if ($asset->assignedTo) {
$target = $asset->assignedTo;
$checkin_at = date('Y-m-d H:i:s');
$originalValues = $asset->getRawOriginal();
event(new CheckoutableCheckedIn($asset, $target, auth()->user(), 'Checkin on delete', $checkin_at, $originalValues));
DB::table('assets')
->where('id', $asset->id)
->update(['assigned_to' => null]);
}
if ($asset->image) {
try {
Storage::disk('public')->delete('assets'.'/'.$asset->image);
} catch (\Exception $e) {
Log::debug($e);
}
}
$asset->delete();
}
}

View file

@ -2,6 +2,7 @@
namespace App\Exceptions;
use Illuminate\Database\Eloquent\ModelNotFoundException;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
use App\Helpers\Helper;
use Illuminate\Validation\ValidationException;
@ -73,6 +74,14 @@ class Handler extends ExceptionHandler
return response()->json(Helper::formatStandardApiResponse('error', null, 'Invalid JSON'), 422);
}
//if ($e instanceof ModelNotFoundException) {
// $class = get_class($e);
// match($class) {
//
// };
// return redirect()->route()->with('error', trans('general.model_not_found', ['model' => $e]));
//}
// Handle SCIM exceptions
if ($e instanceof SCIMException) {
try {

View file

@ -2,6 +2,7 @@
namespace App\Http\Controllers\Api;
use App\Actions\Assets\DestroyAssetAction;
use App\Actions\Assets\StoreAssetAction;
use App\Events\CheckoutableCheckedIn;
use App\Exceptions\CheckoutNotAllowed;
@ -735,30 +736,18 @@ class AssetsController extends Controller
* @param int $assetId
* @since [v4.0]
*/
public function destroy($id) : JsonResponse
public function destroy(Asset $asset): JsonResponse
{
$this->authorize('delete', Asset::class);
if ($asset = Asset::find($id)) {
//this is probably wrong
//$this->authorize('delete', Asset::class);
$this->authorize('delete', $asset);
if ($asset->assignedTo) {
$target = $asset->assignedTo;
$checkin_at = date('Y-m-d H:i:s');
$originalValues = $asset->getRawOriginal();
event(new CheckoutableCheckedIn($asset, $target, auth()->user(), 'Checkin on delete', $checkin_at, $originalValues));
DB::table('assets')
->where('id', $asset->id)
->update(['assigned_to' => null]);
}
$asset->delete();
try {
DestroyAssetAction::run($asset);
return response()->json(Helper::formatStandardApiResponse('success', null, trans('admin/hardware/message.delete.success')));
} catch (\Exception $e) {
report($e);
return response()->json(Helper::formatStandardApiResponse('error', null, 'something went wrong: '));
}
return response()->json(Helper::formatStandardApiResponse('error', null, trans('admin/hardware/message.does_not_exist')), 200);
}

View file

@ -2,15 +2,18 @@
namespace App\Http\Controllers\Assets;
use App\Actions\Assets\DestroyAssetAction;
use App\Actions\Assets\StoreAssetAction;
use App\Events\CheckoutableCheckedIn;
use App\Exceptions\CheckoutNotAllowed;
use App\Helpers\Helper;
use App\Http\Controllers\Controller;
use App\Http\Requests\Assets\DestroyAssetRequest;
use App\Http\Requests\ImageUploadRequest;
use App\Http\Requests\Assets\StoreAssetRequest;
use App\Models\Actionlog;
use App\Http\Requests\UploadFileRequest;
use Illuminate\Database\Eloquent\ModelNotFoundException;
use Illuminate\Support\Facades\Log;
use App\Models\Asset;
use App\Models\AssetModel;
@ -360,39 +363,16 @@ class AssetsController extends Controller
* @param int $assetId
* @since [v1.0]
*/
public function destroy(Request $request, $assetId) : RedirectResponse
public function destroy(Asset $asset): RedirectResponse
{
// Check if the asset exists
if (is_null($asset = Asset::find($assetId))) {
// Redirect to the asset management page with error
return redirect()->route('hardware.index')->with('error', trans('admin/hardware/message.does_not_exist'));
}
$this->authorize('delete', $asset);
if ($asset->assignedTo) {
$target = $asset->assignedTo;
$checkin_at = date('Y-m-d H:i:s');
$originalValues = $asset->getRawOriginal();
event(new CheckoutableCheckedIn($asset, $target, auth()->user(), 'Checkin on delete', $checkin_at, $originalValues));
DB::table('assets')
->where('id', $asset->id)
->update(['assigned_to' => null]);
}
if ($asset->image) {
try {
Storage::disk('public')->delete('assets'.'/'.$asset->image);
} catch (\Exception $e) {
Log::debug($e);
}
}
$asset->delete();
DestroyAssetAction::run($asset);
return redirect()->route('hardware.index')->with('success', trans('admin/hardware/message.delete.success'));
} catch (\Exception $e) {
report($e);
return redirect()->back()->withInput()->withErrors($e->getMessage());
}
}
/**

View file

@ -0,0 +1,29 @@
<?php
namespace App\Http\Requests\Assets;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Gate;
class DestroyAssetRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*/
public function authorize(): bool
{
return Gate::allows('delete', $this->asset);
}
/**
* Get the validation rules that apply to the request.
*
* @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string>
*/
public function rules(): array
{
return [
//
];
}
}

View file

@ -573,15 +573,16 @@ Route::group(['prefix' => 'v1', 'middleware' => ['api', 'throttle:api']], functi
Route::put('/hardware/{asset}', [Api\AssetsController::class, 'update'])->name('api.assets.put-update');
Route::delete('/hardware/{asset}', [Api\AssetsController::class, 'destroy'])->name('api.assets.destroy');
Route::resource('hardware',
Api\AssetsController::class,
['names' => [
'index' => 'api.assets.index',
'show' => 'api.assets.show',
'store' => 'api.assets.store',
'destroy' => 'api.assets.destroy',
],
'except' => ['create', 'edit', 'update'],
'except' => ['create', 'edit', 'update', 'destroy'],
'parameters' => ['asset' => 'asset_id'],
]
); // end assets API routes

View file

@ -163,6 +163,8 @@ Route::group(
});
Route::delete('/hardware/{asset}', [AssetsController::class, 'destroy'])->name('hardware.destroy');
Route::resource('hardware',
AssetsController::class,
[
@ -172,6 +174,7 @@ Route::resource('hardware',
'show' => 'view',
],
],
'except' => ['destroy'],
]);
Route::get('ht/{any?}',