module Teams::Base

def admin_users

def admin_users
  admins.map(&:user).compact
end

def admins

def admins
  memberships.current_and_invited.admins
end

def formatted_email_address

def formatted_email_address
  primary_contact.email
end

def invalidate_caches

def invalidate_caches
  users.map(&:invalidate_ability_cache)
end

def platform_agent_access_tokens

def platform_agent_access_tokens
  Platform::AccessToken.joins(:application).where(resource_owner_id: users.where.not(platform_agent_of_id: nil), application: {team: nil})
end

def primary_contact

def primary_contact
  admin_users.min { |user| user.created_at }
end

def team

def team
  # some generic features appeal to the `team` method for security or scoping purposes, but sometimes those same
  # generic functions need to function for a team model as well, so we do this.
  self
end