Files
astuto/app/models/tenant_billing.rb

52 lines
1.1 KiB
Ruby
Raw Normal View History

2024-05-03 18:11:07 +02:00
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