2025-07-22 13:43:27 -04:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
|
|
class StatsQuery
|
|
|
|
|
def initialize(user)
|
|
|
|
|
@user = user
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def points_stats
|
2025-07-22 13:52:24 -04:00
|
|
|
result = Point.connection.execute(<<~SQL.squish)
|
|
|
|
|
SELECT
|
|
|
|
|
COUNT(id) as total,
|
2025-07-22 13:43:27 -04:00
|
|
|
COUNT(reverse_geocoded_at) as geocoded,
|
2025-07-22 13:52:24 -04:00
|
|
|
COUNT(CASE WHEN geodata = '{}'::jsonb THEN 1 END) as without_data
|
|
|
|
|
FROM points
|
2025-07-22 13:43:27 -04:00
|
|
|
WHERE user_id = #{user.id}
|
|
|
|
|
SQL
|
|
|
|
|
|
|
|
|
|
row = result.first
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
total: row['total'].to_i,
|
|
|
|
|
geocoded: row['geocoded'].to_i,
|
|
|
|
|
without_data: row['without_data'].to_i
|
|
|
|
|
}
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
private
|
|
|
|
|
|
|
|
|
|
attr_reader :user
|
|
|
|
|
end
|