aboutsummaryrefslogtreecommitdiff
path: root/db
diff options
context:
space:
mode:
authorMartin Kagamino Lehoux <martin@lehoux.net>2026-08-27 19:03:34 +0200
committerMartin Kagamino Lehoux <martin@lehoux.net>2026-08-27 19:03:34 +0200
commitd7b93325d4f70eeab369fa8a3c4cce9f0c4e0081 (patch)
tree76a913248fa04325e8e85f34df0cd03654e1ca76 /db
parent558f755f5746a4ee819de87579951b7533688e5d (diff)
Add dual GPX/FIT exporter and backfill for rides
Phase 1 writes both .gpx and .fit on Strava import, adds fit_path column, renames storage.gpx_dir to storage.rides_dir, and backfills missing FIT files from existing GPX without breaking CLI progress. FIT files are gitignored.
Diffstat (limited to 'db')
-rw-r--r--db/migrations/20260828000000_add_fit_path.sql29
-rw-r--r--db/schema.sql5
2 files changed, 32 insertions, 2 deletions
diff --git a/db/migrations/20260828000000_add_fit_path.sql b/db/migrations/20260828000000_add_fit_path.sql
new file mode 100644
index 0000000..7f34ab8
--- /dev/null
+++ b/db/migrations/20260828000000_add_fit_path.sql
@@ -0,0 +1,29 @@
+-- migrate:up
+ALTER TABLE rides ADD COLUMN fit_path TEXT NOT NULL DEFAULT '';
+
+-- migrate:down
+CREATE TABLE rides_new (
+ id integer primary key,
+ external_id text unique not null,
+ gpx_path text not null,
+ name text not null,
+ type text not null,
+ start_date text not null,
+ distance_m real not null,
+ external_moving_time_s integer not null,
+ elapsed_time_s integer not null,
+ total_elevation_gain_m real not null,
+ average_speed_mps real not null,
+ created_at text not null default (strftime('%Y-%m-%dT%H:%M:%SZ', 'now')),
+ updated_at text not null default (strftime('%Y-%m-%dT%H:%M:%SZ', 'now')),
+ cotacol_score real,
+ cotacol_algo_version text,
+ moving_time_s integer,
+ moving_time_algo_version text,
+ bike_type TEXT NOT NULL DEFAULT '' CHECK (bike_type IN ('', 'road', 'mtb')),
+ ride_type TEXT NOT NULL DEFAULT '' CHECK (ride_type IN ('', 'training', 'indoor', 'race', 'transport'))
+);
+INSERT INTO rides_new (id, external_id, gpx_path, name, type, start_date, distance_m, external_moving_time_s, elapsed_time_s, total_elevation_gain_m, average_speed_mps, created_at, updated_at, cotacol_score, cotacol_algo_version, moving_time_s, moving_time_algo_version, bike_type, ride_type)
+SELECT id, external_id, gpx_path, name, type, start_date, distance_m, external_moving_time_s, elapsed_time_s, total_elevation_gain_m, average_speed_mps, created_at, updated_at, cotacol_score, cotacol_algo_version, moving_time_s, moving_time_algo_version, bike_type, ride_type FROM rides;
+DROP TABLE rides;
+ALTER TABLE rides_new RENAME TO rides;
diff --git a/db/schema.sql b/db/schema.sql
index 8ae55f7..a22e98f 100644
--- a/db/schema.sql
+++ b/db/schema.sql
@@ -13,7 +13,7 @@ CREATE TABLE rides (
average_speed_mps real not null,
created_at text not null default (strftime('%Y-%m-%dT%H:%M:%SZ', 'now')),
updated_at text not null default (strftime('%Y-%m-%dT%H:%M:%SZ', 'now'))
-, cotacol_score real, cotacol_algo_version text, moving_time_s integer, moving_time_algo_version text, bike_type TEXT NOT NULL DEFAULT '' CHECK (bike_type IN ('', 'road', 'mtb')), ride_type TEXT NOT NULL DEFAULT '' CHECK (ride_type IN ('', 'training', 'indoor', 'race', 'transport')));
+, cotacol_score real, cotacol_algo_version text, moving_time_s integer, moving_time_algo_version text, bike_type TEXT NOT NULL DEFAULT '' CHECK (bike_type IN ('', 'road', 'mtb')), ride_type TEXT NOT NULL DEFAULT '' CHECK (ride_type IN ('', 'training', 'indoor', 'race', 'transport')), fit_path TEXT NOT NULL DEFAULT '');
CREATE TABLE official_climbs (
id integer primary key,
name text not null,
@@ -42,4 +42,5 @@ INSERT INTO "schema_migrations" (version) VALUES
('20260820184307'),
('20260821000000'),
('20260823000000'),
- ('20260827000000');
+ ('20260827000000'),
+ ('20260828000000');