This is a test - please ignore this repository!
Find a file
Tim Zöller f4be439002 Add GPX file support for activity imports
This commit adds comprehensive GPX file support alongside existing FIT file support, enabling users to import activities from Strava, Komoot, and other GPS apps.

## Key Features

### Core Components
- **GpxParser**: Full GPX 1.1 parsing with Garmin TrackPointExtension support
- **GpxFileValidator**: Validation for GPX file format and structure
- **ActivityFileService**: Unified service with automatic format detection (FIT/GPX)
- **ParsedActivityData**: Common data structure for both FIT and GPX files

### GPX Parsing Capabilities
- GPS track point extraction (latitude, longitude, elevation, timestamp)
- Garmin extension data (heart rate, cadence, temperature)
- Activity type detection from GPX metadata
- Distance calculation using Haversine formula
- Elevation gain/loss calculation
- Speed calculation from consecutive GPS points
- Speed smoothing to remove GPS artifacts
- Timezone detection from GPS coordinates
- Moving time vs. stopped time analysis

### Database Changes
- Migration V15: Renamed raw_fit_file → raw_activity_file
- Added source_file_format column (FIT/GPX) with constraint
- Index on source_file_format for performance
- Updated Activity entity with new fields

### Controller & UI Updates
- ActivityController: Now handles both FIT and GPX uploads
- Upload form: Updated to accept .fit and .gpx files
- Help text: Clarified both formats are supported

### Testing
- GpxParserIntegrationTest: 9 comprehensive tests with real GPX file
- Tests cover: parsing, validation, heart rate extraction, distance calculation,
  elevation metrics, speed calculation, chronological ordering, smoothing
- Fixed TrainingLoadServiceTest date issue (testDate outside 30-day window)
- All 97 unit tests passing (integration tests require Docker)

### Technical Details
- Supports GPX 1.0 and 1.1 specifications
- Handles multiple track segments
- Processes Garmin TrackPointExtension v1 and v2
- Same track simplification as FIT (Douglas-Peucker algorithm)
- Consistent JSONB storage format for track points
- Compatible with existing analytics, heatmaps, and image generation

## Testing Summary
-  9/9 GpxParserIntegrationTest tests passing
-  4/4 FitParserIntegrationTest tests passing
-  14/14 FitFileServiceTest tests passing
-  97/97 total unit tests passing

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-02 13:31:05 +01:00
.idea Fit File Processing and Persistence 2025-11-27 22:59:45 +01:00
src Add GPX file support for activity imports 2026-01-02 13:31:05 +01:00
.dockerignore More vibin 2025-11-28 21:04:38 +01:00
.env.example Add global registration disable feature 2025-12-03 11:27:19 +01:00
.gitignore More vibin 2025-11-28 21:04:38 +01:00
CLAUDE.md Add GPX file support for activity imports 2026-01-02 13:31:05 +01:00
docker-compose.federation-test.yml Added Heatmaps 2026-01-01 23:48:05 +01:00
docker-compose.yml Docker Fixes 2025-11-29 12:28:58 +01:00
DOCKER.md More vibin 2025-11-28 21:04:38 +01:00
Dockerfile Add global registration disable feature 2025-12-03 11:27:19 +01:00
FEDERATION_TESTING_GUIDE.md Added Heatmaps 2026-01-01 23:48:05 +01:00
MVP_COMPLETE.md MVP done 2025-11-29 09:56:55 +01:00
pom.xml Stuff 2025-12-04 18:39:01 +01:00