# User model for authentication and user management # Handles user accounts, authentication, and authorization using Devise class User < ApplicationRecord # Include default devise modules. Others available are: # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable # # Include default devise modules for authentication # :database_authenticatable - encrypts and stores password in database # :registerable - allows users to sign up and edit their accounts # :recoverable - handles password reset functionality # :rememberable - manages token-based user remembering # :validatable - provides email and password validation # Other available modules are: # :confirmable - requires email confirmation # :lockable - locks account after failed login attempts # :timeoutable - expires sessions after inactivity # :trackable - tracks sign-in count, timestamps, and IP # :omniauthable - allows authentication via OAuth providers devise :database_authenticatable, :registerable, :recoverable, :rememberable, :validatable # Relationships has_many :events, dependent: :destroy has_many :tickets, dependent: :destroy has_many :orders, dependent: :destroy has_many :earnings, dependent: :destroy has_many :payouts, dependent: :destroy # Validations - allow reasonable name lengths validates :last_name, length: { minimum: 2, maximum: 50, allow_blank: true } validates :first_name, length: { minimum: 2, maximum: 50, allow_blank: true } validates :company_name, length: { minimum: 2, maximum: 100, allow_blank: true } # Onboarding methods def needs_onboarding? !onboarding_completed? end def complete_onboarding! update!(onboarding_completed: true) end # Authorization methods def can_manage_events? # Only professional users can manage events is_professionnal? end def promoter? # Alias for can_manage_events? to make views more semantic can_manage_events? end def name [ first_name, last_name ].compact.join(" ").strip end # Stripe Connect methods def stripe_account_id stripe_connected_account_id end def has_stripe_account? stripe_connected_account_id.present? end def can_receive_payouts? has_stripe_account? && promoter? end end