mirror of
https://github.com/astuto/astuto.git
synced 2025-12-14 18:57:51 +01:00
52 lines
1.1 KiB
Ruby
52 lines
1.1 KiB
Ruby
class TenantBilling < ApplicationRecord
|
|
include TenantOwnable
|
|
extend FriendlyId
|
|
|
|
friendly_id :generate_random_slug, use: :slugged
|
|
|
|
belongs_to :tenant
|
|
|
|
before_create :set_trial_ends_at
|
|
before_create :set_subscription_ends_at
|
|
|
|
enum status: [
|
|
:trial,
|
|
:active,
|
|
:canceled,
|
|
:perpetual
|
|
]
|
|
|
|
def has_active_subscription?
|
|
perpetual? || (active? && subscription_ends_at+1.day > Time.current) || (canceled? && subscription_ends_at > Time.current) || (trial? && trial_ends_at > Time.current)
|
|
end
|
|
|
|
def generate_auth_token
|
|
self.auth_token = SecureRandom.urlsafe_base64
|
|
self.save!
|
|
auth_token
|
|
end
|
|
|
|
def invalidate_auth_token
|
|
self.auth_token = nil
|
|
self.save!
|
|
end
|
|
|
|
private
|
|
|
|
def set_trial_ends_at
|
|
self.trial_ends_at = Time.current + Rails.application.trial_period_days
|
|
end
|
|
|
|
def set_subscription_ends_at
|
|
self.subscription_ends_at = Time.current
|
|
end
|
|
|
|
def generate_random_slug
|
|
loop do
|
|
self.slug = SecureRandom.hex(16)
|
|
break unless self.class.exists?(slug: slug)
|
|
end
|
|
slug
|
|
end
|
|
end
|