mirror of
https://github.com/Freika/dawarich.git
synced 2026-01-09 08:47:11 -05:00
73 lines
2 KiB
Ruby
73 lines
2 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
class Tracks::CreateFromPoints
|
|
include Tracks::Segmentation
|
|
include Tracks::TrackBuilder
|
|
|
|
attr_reader :user, :start_at, :end_at, :cleaning_strategy
|
|
|
|
def initialize(user, start_at: nil, end_at: nil, cleaning_strategy: :replace)
|
|
@user = user
|
|
@start_at = start_at
|
|
@end_at = end_at
|
|
@cleaning_strategy = cleaning_strategy
|
|
end
|
|
|
|
def call
|
|
generator = Tracks::Generator.new(
|
|
user,
|
|
point_loader: point_loader,
|
|
incomplete_segment_handler: incomplete_segment_handler,
|
|
track_cleaner: track_cleaner
|
|
)
|
|
|
|
generator.call
|
|
end
|
|
|
|
# Expose threshold properties for tests
|
|
def distance_threshold_meters
|
|
@distance_threshold_meters ||= user.safe_settings.meters_between_routes.to_i || 500
|
|
end
|
|
|
|
def time_threshold_minutes
|
|
@time_threshold_minutes ||= user.safe_settings.minutes_between_routes.to_i || 60
|
|
end
|
|
|
|
private
|
|
|
|
def point_loader
|
|
@point_loader ||=
|
|
Tracks::PointLoaders::BulkLoader.new(
|
|
user, start_at: start_at, end_at: end_at
|
|
)
|
|
end
|
|
|
|
def incomplete_segment_handler
|
|
@incomplete_segment_handler ||=
|
|
Tracks::IncompleteSegmentHandlers::IgnoreHandler.new(user)
|
|
end
|
|
|
|
def track_cleaner
|
|
@track_cleaner ||=
|
|
case cleaning_strategy
|
|
when :daily
|
|
Tracks::Cleaners::DailyCleaner.new(user, start_at: start_at, end_at: end_at)
|
|
when :none
|
|
Tracks::Cleaners::NoOpCleaner.new(user)
|
|
else # :replace (default)
|
|
Tracks::Cleaners::ReplaceCleaner.new(user, start_at: start_at, end_at: end_at)
|
|
end
|
|
end
|
|
|
|
# Legacy method for backward compatibility with tests
|
|
# Delegates to segmentation module logic
|
|
def should_start_new_track?(current_point, previous_point)
|
|
should_start_new_segment?(current_point, previous_point)
|
|
end
|
|
|
|
# Legacy method for backward compatibility with tests
|
|
# Delegates to segmentation module logic
|
|
def calculate_distance_kilometers(point1, point2)
|
|
calculate_distance_kilometers_between_points(point1, point2)
|
|
end
|
|
end
|