<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
/**
* @property mixed data
* @method static where(string $string, string $uid)
* @method static insert(array[] $subscriptionLogs)
*/
class SubscriptionLog extends Model
{
const TYPE_SUBSCRIBE = 'subscribe';
const TYPE_SUBSCRIBED = 'subscribed';
const TYPE_PAID = 'paid';
const TYPE_CLAIMED = 'claimed';
const TYPE_UNCLAIMED = 'unclaimed';
const TYPE_STARTED = 'started';
const TYPE_EXPIRED = 'expired';
const TYPE_RENEWED = 'renewed';
const TYPE_RENEW = 'renew';
const TYPE_RENEW_FAILED = 'renew_failed';
const TYPE_PLAN_CHANGE = 'plan_change';
const TYPE_PLAN_CHANGED = 'plan_changed';
const TYPE_PLAN_CHANG_FAILED = 'plan_change_failed';
const TYPE_CANCELLED = 'cancelled';
const TYPE_CANCELLED_NOW = 'cancelled_now';
const TYPE_ADMIN_APPROVED = 'admin_approved';
const TYPE_ADMIN_REJECTED = 'admin_rejected';
const TYPE_ADMIN_RENEW_APPROVED = 'admin_renew_approved';
const TYPE_ADMIN_PLAN_CHANGE_APPROVED = 'admin_plan_change_approved';
const TYPE_ADMIN_RENEW_REJECTED = 'admin_renew_rejected';
const TYPE_ADMIN_PLAN_CHANGE_REJECTED = 'admin_plan_change_rejected';
const TYPE_ADMIN_CANCELLED = 'admin_cancelled';
const TYPE_ADMIN_CANCELLED_NOW = 'admin_cancelled_now';
const TYPE_ADMIN_RESUMED = 'admin_resumed';
const TYPE_ADMIN_PLAN_ASSIGNED = 'admin_plan_assigned';
const TYPE_RESUMED = 'resumed';
const TYPE_ERROR = 'error';
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'type', 'data',
];
/**
* Bootstrap any application services.
*/
public static function boot()
{
parent::boot();
// Create uid when creating list.
static::creating(function ($item) {
// Create new uid
$uid = uniqid();
while (self::where('uid', $uid)->count() > 0) {
$uid = uniqid();
}
$item->uid = $uid;
});
}
/**
* subscription Associations
*
* @return BelongsTo
*
*/
public function subscription(): BelongsTo
{
return $this->belongsTo(Subscription::class);
}
/**
* transaction Associations
*
* @return BelongsTo
*
*/
public function transaction(): BelongsTo
{
return $this->belongsTo(SubscriptionTransaction::class, 'subscription_transactions');
}
/**
* get data
*
* @return mixed
*/
public function getData()
{
if (!$this->data) {
return json_decode('{}', true);
}
return json_decode($this->data, true);
}
/**
* update data
*
* @param $data
*/
public function updateData($data)
{
$data = (object) array_merge((array) $this->getData(), $data);
$this->data = json_encode($data);
$this->save();
}
}