mirror of
https://github.com/Freika/dawarich.git
synced 2026-01-11 17:51:39 -05:00
Remove tracks api
This commit is contained in:
parent
e64e706b0f
commit
81eb759fb8
4 changed files with 5 additions and 202 deletions
|
|
@ -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
|
||||
|
|
@ -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 {
|
|||
<input type="checkbox" id="tracks_visible" name="tracks_visible" class='w-4' style="width: 20px;" ${this.tracksVisible ? 'checked' : ''} />
|
||||
</label>
|
||||
|
||||
<button type="button" id="refresh-tracks-btn" class="btn btn-xs mt-2">Refresh Tracks</button>
|
||||
|
||||
|
||||
<label for="speed_color_scale">Speed color scale</label>
|
||||
<div class="join">
|
||||
|
|
@ -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';
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
Loading…
Reference in a new issue