Files
chatroom/app/Jobs/ExpireMarriageProposals.php

43 lines
1.2 KiB
PHP
Raw Normal View History

<?php
/**
* 文件功能扫描并处理超时的求婚记录48h无响应后失效
*
* 5 分钟执行一次,将到期的 pending 求婚设为 expired戒指标记遗失。
* 同时广播 MarriageExpired 事件通知求婚方。
*
* @author ChatRoom Laravel
*
* @version 1.0.0
*/
namespace App\Jobs;
use App\Events\MarriageExpired;
use App\Models\Marriage;
use App\Services\MarriageService;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Queue\Queueable;
class ExpireMarriageProposals implements ShouldQueue
{
use Queueable;
/**
* 执行 Job扫描超时求婚并处理。
*/
public function handle(MarriageService $service): void
{
// 查找所有已超时但仍为 pending 的求婚
Marriage::query()
->where('status', 'pending')
->where('expires_at', '<=', now())
->cursor()
->each(function (Marriage $marriage) use ($service) {
$service->expireProposal($marriage);
// 广播通知求婚方(若在线则收到)
broadcast(new MarriageExpired($marriage));
});
}
}