mirror of
https://github.com/Freika/dawarich.git
synced 2026-01-12 18:21:38 -05:00
* Move points creation logic from background jobs to service objects * Remove unused point creation jobs * Update changelog
39 lines
889 B
Ruby
39 lines
889 B
Ruby
# frozen_string_literal: true
|
|
|
|
class OwnTracks::PointCreator
|
|
RETURNING_COLUMNS = 'id, timestamp, ST_X(lonlat::geometry) AS longitude, ST_Y(lonlat::geometry) AS latitude'
|
|
|
|
attr_reader :params, :user_id
|
|
|
|
def initialize(params, user_id)
|
|
@params = params
|
|
@user_id = user_id
|
|
end
|
|
|
|
def call
|
|
parsed_params = OwnTracks::Params.new(params).call
|
|
return [] if parsed_params.blank?
|
|
|
|
payload = parsed_params.merge(user_id:)
|
|
return [] if payload[:timestamp].nil? || payload[:lonlat].nil?
|
|
|
|
upsert_points([payload])
|
|
end
|
|
|
|
private
|
|
|
|
def upsert_points(locations)
|
|
created_points = []
|
|
|
|
locations.each_slice(1000) do |batch|
|
|
result = Point.upsert_all(
|
|
batch,
|
|
unique_by: %i[lonlat timestamp user_id],
|
|
returning: Arel.sql(RETURNING_COLUMNS)
|
|
)
|
|
created_points.concat(result) if result
|
|
end
|
|
|
|
created_points
|
|
end
|
|
end
|