Commit graph

188 commits

Author SHA1 Message Date
Tim Zöller
bc63e0f16d Moar Fixes 2026-01-03 20:39:57 +01:00
Tim Zöller
c9b982890a Fix federated follow counts 2026-01-03 20:25:17 +01:00
Tim Zöller
3b18e30cee Undo für Batch Import 2026-01-03 14:57:34 +01:00
Tim Zöller
a19d4870f7 Batch Import 2026-01-03 08:56:57 +01:00
Tim Zöller
7ecb5456cc Fix integration test: Add sourceFileFormat to test activity builder
ActivityControllerIntegrationTest was failing because the helper method
createTestActivity() didn't set the source_file_format field, which
became required after migration V15.

Added sourceFileFormat("FIT") to the Activity builder in the test helper.

Test Results:
-  128 tests passing
-  0 failures
-  0 errors
- 4 tests skipped (expected)

All integration tests now pass with Docker/Testcontainers.

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-02 18:03:23 +01:00
Tim Zöller
534d55d6f3 Add Maven profile to skip integration tests when Docker unavailable
Integration tests using Testcontainers require Docker. This profile allows
running unit tests in CI/CD environments or local setups without Docker.

Usage:
  mvn test -P skip-integration-tests

Results:
- 97 unit tests pass
- 18 integration tests skipped (require Docker)

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-02 17:50:06 +01:00
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
Tim Zöller
66b14ebf7f Add on-demand heatmap rebuild and remove nightly scheduler
- Added rebuild button to heatmap page with loading states
- Added POST /api/heatmap/me/rebuild endpoint for on-demand recalculation
- Removed HeatmapRecalculationScheduler (nightly 3 AM cron job)
- Removed @EnableScheduling annotation since no schedulers remain
- Users can now rebuild their heatmap manually instead of relying on automatic nightly recalculation

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-02 09:21:52 +01:00
Tim Zöller
f391028061 Added Heatmaps 2026-01-01 23:48:05 +01:00
Tim Zöller
c8b37f4720 Darkmode 2025-12-16 15:29:29 +01:00
Tim Zöller
0e092e670b Smoothen Speed 2025-12-16 15:01:20 +01:00
Tim Zöller
75a4f6524c Better Federation Support 2025-12-15 21:59:44 +01:00
Tim Zöller
5b687883b0 Better Federation Support 2025-12-15 21:55:17 +01:00
Tim Zöller
15b420b87a Make webfinger discovery case insensitive 2025-12-15 10:53:51 +01:00
Tim Zöller
fe05e2ffa4 Follow Users on the instance 2025-12-15 10:25:40 +01:00
Tim Zöller
cc59701337 Small visual fixes 2025-12-15 09:07:15 +01:00
Tim Zöller
566fc90249 Small visual fixes 2025-12-15 09:03:15 +01:00
Tim Zöller
7c957e5135 Chart Rendering fixed for analytics 2025-12-15 08:42:39 +01:00
Tim Zöller
6158707daa Fixes 2025-12-14 17:29:33 +01:00
Tim Zöller
1569114593 Quality of Life Improvements 2025-12-14 17:22:36 +01:00
Tim Zöller
114d92c453 Optical improvements, don't duplicate initially created entries 2025-12-14 17:11:24 +01:00
Tim Zöller
ecb9e1f540 Don't duplicated updates activities 2025-12-14 16:12:20 +01:00
Tim Zöller
769e05ee0e Tests 2025-12-05 20:42:20 +01:00
Tim Zöller
cbf4060441 Tests 2025-12-05 20:38:54 +01:00
Tim Zöller
d3dbf8e80a Tests 2025-12-05 20:38:53 +01:00
Tim Zöller
0e81a65d62 Good stuff 2025-12-05 10:21:45 +01:00
Tim Zöller
9e428a0499 Nicer sharepics 2025-12-04 22:39:15 +01:00
Tim Zöller
a32b9e99e0 Nicer sharepics 2025-12-04 22:08:56 +01:00
Tim Zöller
74137a3395 Stuff 2025-12-04 20:23:39 +01:00
Tim Zöller
7b575ff7e4 Stuff 2025-12-04 18:52:58 +01:00
Tim Zöller
5b0648f0d0 Stuff 2025-12-04 18:46:20 +01:00
Tim Zöller
7d07653d2a Stuff 2025-12-04 18:39:01 +01:00
Tim Zöller
1d7000d592 Stuff 2025-12-04 13:22:23 +01:00
Tim Zöller
ac04dbf352 Nice things 2025-12-04 13:14:30 +01:00
Tim Zöller
7e4b1d50d7 Nice things 2025-12-04 13:04:08 +01:00
Tim Zöller
67a8aad4f1 Nice things 2025-12-04 12:53:12 +01:00
Tim Zöller
d06a0d769a Nice things 2025-12-04 12:49:35 +01:00
Tim Zöller
362680f774 Nice things 2025-12-04 12:44:18 +01:00
Tim Zöller
6dccf87aec Nice things 2025-12-04 12:17:14 +01:00
Tim Zöller
da7d58b548 Nice things 2025-12-04 09:09:12 +01:00
Tim Zöller
facade014a Notification System 2025-12-04 08:59:44 +01:00
Tim Zöller
2bc865fefd Notification System 2025-12-04 08:31:56 +01:00
Tim Zöller
3ec22c4770 More graphs 2025-12-04 08:24:20 +01:00
Tim Zöller
a399179bf6 More graphs 2025-12-04 08:19:53 +01:00
Tim Zöller
37d0e3132b Follower UI 2025-12-04 08:09:44 +01:00
Tim Zöller
8545a3f43b Follower UI 2025-12-03 23:05:37 +01:00
Tim Zöller
301364b8a7 Moar federation 2025-12-03 22:54:54 +01:00
Tim Zöller
32a12f25dc Fixed Date + Time 2025-12-03 22:26:56 +01:00
Tim Zöller
c84697edc7 Moar federation 2025-12-03 22:16:20 +01:00
Tim Zöller
63ef2fa5c4 Moar federation 2025-12-03 22:08:23 +01:00