mirror of
https://github.com/snipe/snipe-it.git
synced 2026-02-06 20:35:33 +00:00
75 lines
1.9 KiB
PHP
75 lines
1.9 KiB
PHP
<?php
|
|
|
|
namespace App\Console\Commands;
|
|
|
|
use App\Models\CheckoutRequest;
|
|
use Illuminate\Console\Command;
|
|
|
|
class CleanOldCheckoutRequests extends Command
|
|
{
|
|
private int $deletions = 0;
|
|
private int $skips = 0;
|
|
|
|
/**
|
|
* The name and signature of the console command.
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $signature = 'snipeit:clean-old-checkout-requests';
|
|
|
|
/**
|
|
* The console command description.
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $description = 'Removes checkout requests that reference deleted assets or users.';
|
|
|
|
/**
|
|
* Execute the console command.
|
|
*/
|
|
public function handle()
|
|
{
|
|
$requests = CheckoutRequest::with([
|
|
'user' => function ($query) {
|
|
$query->withTrashed();
|
|
},
|
|
'requestedItem' => function ($query) {
|
|
$query->withTrashed();
|
|
},
|
|
])->get();
|
|
|
|
$this->info("Processing {$requests->count()} checkout requests");
|
|
|
|
$this->withProgressBar($requests, function ($request) {
|
|
if ($this->shouldForceDelete($request)) {
|
|
$request->forceDelete();
|
|
$this->deletions++;
|
|
return;
|
|
}
|
|
|
|
if ($this->shouldSoftDelete($request)) {
|
|
$request->delete();
|
|
$this->deletions++;
|
|
return;
|
|
}
|
|
|
|
$this->skips++;
|
|
});
|
|
|
|
$this->info("Final deletion count: $this->deletions, and skip count: $this->skips");
|
|
|
|
return 0;
|
|
}
|
|
|
|
private function shouldForceDelete(CheckoutRequest $request)
|
|
{
|
|
// check if the requestable or user relationship is null
|
|
return !$request->requestable || !$request->user;
|
|
}
|
|
|
|
private function shouldSoftDelete(CheckoutRequest $request)
|
|
{
|
|
return $request->requestable->trashed() || $request->user->trashed();
|
|
}
|
|
}
|