dawarich/app/services/tracks/create_from_points.rb

65 lines
1.7 KiB
Ruby
Raw Normal View History

# frozen_string_literal: true
class Tracks::CreateFromPoints
2025-07-07 12:59:42 -04:00
include Tracks::Segmentation
include Tracks::TrackBuilder
2025-07-07 15:48:07 -04:00
attr_reader :user, :start_at, :end_at
2025-07-04 13:49:56 -04:00
def initialize(user, start_at: nil, end_at: nil)
@user = user
2025-07-04 13:49:56 -04:00
@start_at = start_at
@end_at = end_at
end
def call
2025-07-07 15:48:07 -04:00
generator = Tracks::Generator.new(
user,
point_loader: point_loader,
incomplete_segment_handler: incomplete_segment_handler,
track_cleaner: track_cleaner
)
2025-07-07 15:48:07 -04:00
generator.call
end
2025-07-07 15:48:07 -04:00
# Expose threshold properties for tests
def distance_threshold_meters
@distance_threshold_meters ||= user.safe_settings.meters_between_routes.to_i || 500
end
2025-07-07 15:48:07 -04:00
def time_threshold_minutes
@time_threshold_minutes ||= user.safe_settings.minutes_between_routes.to_i || 60
end
private
2025-07-07 15:48:07 -04:00
def point_loader
@point_loader ||=
Tracks::PointLoaders::BulkLoader.new(
user, start_at: start_at, end_at: end_at
)
end
2025-07-04 13:49:56 -04:00
2025-07-07 15:48:07 -04:00
def incomplete_segment_handler
@incomplete_segment_handler ||=
Tracks::IncompleteSegmentHandlers::IgnoreHandler.new(user)
end
2025-07-04 13:49:56 -04:00
2025-07-07 15:48:07 -04:00
def track_cleaner
@track_cleaner ||= Tracks::TrackCleaners::ReplaceCleaner.new(user, start_at: start_at, end_at: end_at)
end
2025-07-04 13:49:56 -04:00
2025-07-07 15:48:07 -04:00
# 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)
2025-07-04 13:49:56 -04:00
end
2025-07-07 15:48:07 -04:00
# 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