File: /var/www/vhost/disk-apps/demo.sports-crowd.com/app/Jobs/Experiences/ExpirePaymentJob.php
<?php
namespace App\Jobs\Experiences;
use App\Core\Experience\Domain\ValueObjects\ExperiencePaymentStatusEnum;
use App\Models\Experience\Experience;
use App\Models\Experience\ExperiencePayment;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Support\Facades\DB;
class ExpirePaymentJob implements ShouldQueue
{
use Dispatchable;
protected $experiencePaymentId;
public function __construct($experiencePaymentId)
{
$this->experiencePaymentId = $experiencePaymentId;
}
public function handle()
{
DB::beginTransaction();
try {
$experiencePayment = ExperiencePayment::findOrFail($this->experiencePaymentId);
if ($experiencePayment->status == ExperiencePaymentStatusEnum::EXPIRED) {
return;
}
$experiencePayment->update(['status' => ExperiencePaymentStatusEnum::EXPIRED]);
Experience::where('id', $experiencePayment->experience_plan_price->plan->experience_id)->increment('available_slots', $experiencePayment->amount);
DB::commit();
} catch (\Throwable $th) {
DB::rollBack();
}
}
}