dawarich/app/models/user.rb

59 lines
1.2 KiB
Ruby
Raw Normal View History

2024-04-26 12:59:58 -04:00
# frozen_string_literal: true
class User < ApplicationRecord
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable
2024-03-15 18:27:31 -04:00
has_many :imports, dependent: :destroy
has_many :points, through: :imports
2024-04-26 12:59:58 -04:00
has_many :stats, dependent: :destroy
2024-03-23 16:16:11 -04:00
after_create :create_api_key
2024-03-23 16:46:18 -04:00
def export_data
2024-04-26 12:59:58 -04:00
::ExportSerializer.new(points, email).call
end
def countries_visited
stats.pluck(:toponyms).flatten.map { _1['country'] }.uniq.compact
end
def cities_visited
stats
.where.not(toponyms: nil)
.pluck(:toponyms)
.flatten
.reject { |toponym| toponym['cities'].blank? }
.pluck('cities')
.flatten
.pluck('city')
.uniq
.compact
2024-03-23 16:46:18 -04:00
end
2024-03-23 16:16:11 -04:00
def total_km
2024-04-26 12:59:58 -04:00
stats.sum(:distance)
2024-03-23 16:16:11 -04:00
end
def total_countries
2024-04-26 12:59:58 -04:00
countries_visited.size
2024-03-23 16:16:11 -04:00
end
def total_cities
2024-04-26 12:59:58 -04:00
cities_visited.size
2024-03-23 16:16:11 -04:00
end
2024-03-24 13:55:35 -04:00
def total_reverse_geocoded
points.where.not(country: nil, city: nil).count
end
private
def create_api_key
self.api_key = SecureRandom.hex(16)
save
end
end