mirror of
https://github.com/ericasch6/scrum-poker-internal.git
synced 2026-10-13 19:12:10 +00:00
57 lines
2.3 KiB
PHP
57 lines
2.3 KiB
PHP
<?php
|
|
|
|
namespace App\Jobs;
|
|
|
|
use App\Models\Room;
|
|
use Illuminate\Contracts\Queue\ShouldQueue;
|
|
use Illuminate\Foundation\Queue\Queueable;
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
class CloseInactiveRooms implements ShouldQueue
|
|
{
|
|
use Queueable;
|
|
|
|
public function handle(): void
|
|
{
|
|
$closedAt = now();
|
|
$guestCutoff = $closedAt->subDays(config('rooms.guest_retention_days'));
|
|
$accountCutoff = $closedAt->subDays(config('rooms.account_retention_days'));
|
|
|
|
Room::query()
|
|
->whereNull('closed_at')
|
|
->where(function ($query) use ($guestCutoff, $accountCutoff): void {
|
|
$query
|
|
->where(function ($query) use ($guestCutoff): void {
|
|
$query->whereNull('owner_id')
|
|
->where('last_activity_at', '<=', $guestCutoff);
|
|
})
|
|
->orWhere(function ($query) use ($accountCutoff): void {
|
|
$query->whereNotNull('owner_id')
|
|
->where('last_activity_at', '<=', $accountCutoff);
|
|
});
|
|
})
|
|
->select('id')
|
|
->chunkById(100, function ($rooms) use ($closedAt, $guestCutoff, $accountCutoff): void {
|
|
Room::query()
|
|
->whereKey($rooms->pluck('id'))
|
|
->whereNull('closed_at')
|
|
->where(function ($query) use ($guestCutoff, $accountCutoff): void {
|
|
$query
|
|
->where(function ($query) use ($guestCutoff): void {
|
|
$query->whereNull('owner_id')
|
|
->where('last_activity_at', '<=', $guestCutoff);
|
|
})
|
|
->orWhere(function ($query) use ($accountCutoff): void {
|
|
$query->whereNotNull('owner_id')
|
|
->where('last_activity_at', '<=', $accountCutoff);
|
|
});
|
|
})
|
|
->update([
|
|
'closed_at' => $closedAt,
|
|
'state_version' => DB::raw('state_version + 1'),
|
|
'updated_at' => $closedAt,
|
|
]);
|
|
}, 'id');
|
|
}
|
|
}
|