Files
astuto/app/models/user.rb
Riccardo Graziosi bea146e612 Add billing (#329)
2024-05-03 18:11:07 +02:00

99 lines
2.2 KiB
Ruby

class User < ApplicationRecord
include TenantOwnable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :confirmable
validates_confirmation_of :password
has_many :posts, dependent: :destroy
has_many :likes, dependent: :destroy
has_many :comments, dependent: :destroy
enum role: [:user, :moderator, :admin, :owner]
enum status: [:active, :blocked, :deleted]
after_initialize :set_default_role, if: :new_record?
after_initialize :set_default_status, if: :new_record?
validates :full_name, presence: true, length: { in: 2..32 }
validates :email,
presence: true,
uniqueness: { scope: :tenant_id, case_sensitive: false },
format: { with: URI::MailTo::EMAIL_REGEXP }
validates :password, allow_blank: true, length: { in: 6..128 }
validates :password, presence: true, on: :create
def set_default_role
self.role ||= :user
end
def set_default_status
self.status ||= :active
end
def active_for_authentication?
super && active?
end
def inactive_message
active? ? super : I18n.t('errors.user_blocked_or_deleted')
end
# Override Devise::Confirmable#after_confirmation
# Used to change tenant status from pending to active on owner email confirmation
def after_confirmation
tenant = self.tenant
if tenant.status == "pending" and tenant.users.count == 1
tenant.status = "active"
tenant.save
CreateStripeCustomer.new().run
TenantMailer.trial_start(tenant: tenant).deliver_later
end
end
def skip_confirmation
skip_confirmation!
skip_confirmation_notification!
skip_reconfirmation!
end
def gravatar_url
gravatar_id = Digest::MD5::hexdigest(email.downcase)
"https://secure.gravatar.com/avatar/#{gravatar_id}"
end
def owner?
role == 'owner'
end
def admin?
owner? || role == 'admin'
end
def moderator?
admin? || role == 'moderator'
end
def active?
status == 'active'
end
def blocked?
status == 'blocked'
end
def generate_oauth_token
self.oauth_token = SecureRandom.urlsafe_base64
self.save!
oauth_token
end
def invalidate_oauth_token
self.oauth_token = nil
self.save!
end
end