RedemptionStatus::class, 'points_spent' => 'int', 'expires_at' => 'datetime', 'verified_at' => 'datetime', ]; } public function user(): BelongsTo { return $this->belongsTo(User::class); } public function reward(): BelongsTo { return $this->belongsTo(Reward::class)->withTrashed(); } public function verifier(): BelongsTo { return $this->belongsTo(User::class, 'verified_by'); } public function isExpired(): bool { if ($this->status === RedemptionStatus::EXPIRED) { return true; } if ($this->expires_at->isPast()) { if ($this->status === RedemptionStatus::WAITING_PICKUP) { $this->update(['status' => RedemptionStatus::EXPIRED]); } return true; } return false; } }