diff --git a/app/controllers/api/v1/tracks_controller.rb b/app/controllers/api/v1/tracks_controller.rb
deleted file mode 100644
index d9cd497f..00000000
--- a/app/controllers/api/v1/tracks_controller.rb
+++ /dev/null
@@ -1,23 +0,0 @@
-# frozen_string_literal: true
-
-class Api::V1::TracksController < ApiController
- def index
- start_at = params[:start_at]&.to_datetime&.to_i
- end_at = params[:end_at]&.to_datetime&.to_i || Time.zone.now.to_i
-
- tracks = current_api_user.tracks
- .where('start_at <= ? AND end_at >= ?', Time.zone.at(end_at), Time.zone.at(start_at))
- .order(start_at: :asc)
-
- track_ids = tracks.pluck(:id)
- serialized_tracks = TrackSerializer.new(current_api_user, track_ids).call
-
- render json: { tracks: serialized_tracks }
- end
-
- def create
- Tracks::CreateJob.perform_later(current_api_user.id)
-
- render json: { message: 'Track generation started' }
- end
-end
diff --git a/app/javascript/controllers/maps_controller.js b/app/javascript/controllers/maps_controller.js
index b9eb489e..4ec64f62 100644
--- a/app/javascript/controllers/maps_controller.js
+++ b/app/javascript/controllers/maps_controller.js
@@ -280,8 +280,8 @@ export default class extends BaseController {
handleTrackUpdate(data) {
// Get current time range for filtering
const urlParams = new URLSearchParams(window.location.search);
- const currentStartAt = urlParams.get('start_at') || this.getDefaultStartDate();
- const currentEndAt = urlParams.get('end_at') || this.getDefaultEndDate();
+ const currentStartAt = urlParams.get('start_at') || new Date(Date.now() - 7 * 24 * 60 * 60 * 1000).toISOString();
+ const currentEndAt = urlParams.get('end_at') || new Date().toISOString();
// Handle the track update
handleIncrementalTrackUpdate(
@@ -821,7 +821,7 @@ export default class extends BaseController {
-
+
@@ -857,10 +857,7 @@ export default class extends BaseController {
tracksVisibleCheckbox.addEventListener("change", this.toggleTracksVisibility.bind(this));
}
- const refreshTracksBtn = div.querySelector("#refresh-tracks-btn");
- if (refreshTracksBtn) {
- refreshTracksBtn.addEventListener("click", this.refreshTracks.bind(this));
- }
+
// Add event listener to the form submission
div.querySelector('#settings-form').addEventListener(
@@ -1771,39 +1768,10 @@ export default class extends BaseController {
// Track-related methods
async initializeTracksLayer() {
- // Use pre-loaded tracks data if available, otherwise fetch from API
+ // Use pre-loaded tracks data if available
if (this.tracksData && this.tracksData.length > 0) {
this.createTracksFromData(this.tracksData);
} else {
- await this.fetchTracks();
- }
- }
-
- async fetchTracks() {
- try {
- // Get start and end dates from the current map view or URL params
- const urlParams = new URLSearchParams(window.location.search);
- const startAt = urlParams.get('start_at') || this.getDefaultStartDate();
- const endAt = urlParams.get('end_at') || this.getDefaultEndDate();
-
- const response = await fetch(`/api/v1/tracks?start_at=${startAt}&end_at=${endAt}`, {
- headers: {
- 'Accept': 'application/json',
- 'Content-Type': 'application/json',
- 'Authorization': `Bearer ${this.apiKey}`
- }
- });
-
- if (response.ok) {
- const data = await response.json();
- this.createTracksFromData(data.tracks || []);
- } else {
- console.warn('Failed to fetch tracks:', response.status);
- // Create empty layer for layer control
- this.tracksLayer = L.layerGroup();
- }
- } catch (error) {
- console.warn('Tracks API not available or failed:', error);
// Create empty layer for layer control
this.tracksLayer = L.layerGroup();
}
@@ -1865,78 +1833,5 @@ export default class extends BaseController {
- getDefaultStartDate() {
- // Default to last week if no markers available
- if (!this.markers || this.markers.length === 0) {
- return new Date(Date.now() - 7 * 24 * 60 * 60 * 1000).toISOString();
- }
- // Get start date from first marker
- const firstMarker = this.markers[0];
- if (firstMarker && firstMarker[3]) {
- const startDate = new Date(firstMarker[3] * 1000);
- startDate.setHours(0, 0, 0, 0);
- return startDate.toISOString();
- }
-
- return new Date(Date.now() - 7 * 24 * 60 * 60 * 1000).toISOString();
- }
-
- getDefaultEndDate() {
- // Default to today if no markers available
- if (!this.markers || this.markers.length === 0) {
- return new Date().toISOString();
- }
-
- // Get end date from last marker
- const lastMarker = this.markers[this.markers.length - 1];
- if (lastMarker && lastMarker[3]) {
- const endDate = new Date(lastMarker[3] * 1000);
- endDate.setHours(23, 59, 59, 999);
- return endDate.toISOString();
- }
-
- return new Date().toISOString();
- }
-
- async refreshTracks() {
- const refreshBtn = document.getElementById('refresh-tracks-btn');
- if (refreshBtn) {
- refreshBtn.disabled = true;
- refreshBtn.textContent = 'Refreshing...';
- }
-
- try {
- // Trigger track creation on backend
- const response = await fetch(`/api/v1/tracks`, {
- method: 'POST',
- headers: {
- 'Accept': 'application/json',
- 'Content-Type': 'application/json',
- 'Authorization': `Bearer ${this.apiKey}`
- },
- body: JSON.stringify({
- api_key: this.apiKey
- })
- });
-
- if (response.ok) {
- const data = await response.json();
- showFlashMessage('notice', data.message || 'Tracks refreshed successfully');
-
- // Refresh tracks display
- await this.fetchTracks();
- } else {
- throw new Error('Failed to refresh tracks');
- }
- } catch (error) {
- console.error('Error refreshing tracks:', error);
- showFlashMessage('error', 'Failed to refresh tracks');
- } finally {
- if (refreshBtn) {
- refreshBtn.disabled = false;
- refreshBtn.textContent = 'Refresh Tracks';
- }
- }
- }
}
diff --git a/config/routes.rb b/config/routes.rb
index 5d507fa8..93ceb12d 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -99,7 +99,6 @@ Rails.application.routes.draw do
resources :areas, only: %i[index create update destroy]
resources :points, only: %i[index create update destroy]
- resources :tracks, only: %i[index create]
resources :visits, only: %i[index update] do
get 'possible_places', to: 'visits/possible_places#index', on: :member
collection do
diff --git a/spec/requests/api/v1/tracks_controller_spec.rb b/spec/requests/api/v1/tracks_controller_spec.rb
deleted file mode 100644
index a2a9f137..00000000
--- a/spec/requests/api/v1/tracks_controller_spec.rb
+++ /dev/null
@@ -1,68 +0,0 @@
-# frozen_string_literal: true
-
-require 'rails_helper'
-
-RSpec.describe Api::V1::TracksController, type: :request do
- let(:user) { create(:user) }
- let(:api_key) { user.api_key }
-
- describe 'GET #index' do
- let!(:track1) { create(:track, user: user, start_at: 2.days.ago, end_at: 2.days.ago + 1.hour) }
- let!(:track2) { create(:track, user: user, start_at: 1.day.ago, end_at: 1.day.ago + 1.hour) }
-
- it 'returns tracks for the user' do
- get "/api/v1/tracks", params: { api_key: api_key }
-
- expect(response).to have_http_status(:ok)
-
- json_response = JSON.parse(response.body)
- expect(json_response['tracks']).to be_an(Array)
- expect(json_response['tracks'].size).to eq(2)
-
- track_ids = json_response['tracks'].map { |t| t['id'] }
- expect(track_ids).to include(track1.id, track2.id)
- end
-
- it 'filters tracks by date range' do
- start_at = 1.day.ago.beginning_of_day.iso8601
- end_at = 1.day.ago.end_of_day.iso8601
-
- get "/api/v1/tracks", params: {
- api_key: api_key,
- start_at: start_at,
- end_at: end_at
- }
-
- expect(response).to have_http_status(:ok)
-
- json_response = JSON.parse(response.body)
- expect(json_response['tracks'].size).to eq(1)
- expect(json_response['tracks'].first['id']).to eq(track2.id)
- end
-
- it 'requires authentication' do
- get "/api/v1/tracks"
-
- expect(response).to have_http_status(:unauthorized)
- end
- end
-
- describe 'POST #create' do
- it 'triggers track generation' do
- expect {
- post "/api/v1/tracks", params: { api_key: api_key }
- }.to have_enqueued_job(Tracks::CreateJob).with(user.id)
-
- expect(response).to have_http_status(:ok)
-
- json_response = JSON.parse(response.body)
- expect(json_response['message']).to eq('Track generation started')
- end
-
- it 'requires authentication' do
- post "/api/v1/tracks"
-
- expect(response).to have_http_status(:unauthorized)
- end
- end
-end