mirror of
https://github.com/sstent/FitTrack_ReportGenerator.git
synced 2026-01-29 10:31:51 +00:00
feat: Initial implementation of FitTrack Report Generator
This commit introduces the initial version of the FitTrack Report Generator, a FastAPI application for analyzing workout files. Key features include: - Parsing of FIT, TCX, and GPX workout files. - Analysis of power, heart rate, speed, and elevation data. - Generation of summary reports and charts. - REST API for single and batch workout analysis. The project structure has been set up with a `src` directory for core logic, an `api` directory for the FastAPI application, and a `tests` directory for unit, integration, and contract tests. The development workflow is configured to use Docker and modern Python tooling.
This commit is contained in:
66
specs/001-create-a-new/data-model.md
Normal file
66
specs/001-create-a-new/data-model.md
Normal file
@@ -0,0 +1,66 @@
|
||||
# Data Model
|
||||
|
||||
## Entities
|
||||
|
||||
### User
|
||||
- **Description**: Represents a user of the system, primarily for storing personalized settings.
|
||||
- **Fields**:
|
||||
- `id`: Unique identifier (e.g., UUID)
|
||||
- `ftp_value`: Configured Functional Threshold Power (float, nullable, default value if null)
|
||||
- **Relationships**: One-to-many with `WorkoutAnalysis` (a user can have multiple analyses).
|
||||
- **Validation Rules**: `ftp_value` must be a positive number if set.
|
||||
|
||||
### WorkoutAnalysis
|
||||
- **Description**: Represents the result of analyzing a single workout file. This entity links a user to their analyzed workout data.
|
||||
- **Fields**:
|
||||
- `id`: Unique identifier (e.g., UUID)
|
||||
- `user_id`: Foreign key to `User.id`
|
||||
- `file_name`: Original name of the workout file (string)
|
||||
- `analysis_date`: Timestamp of when the analysis was performed (datetime)
|
||||
- `status`: Status of the analysis (e.g., 'completed', 'failed', 'processing')
|
||||
- `summary_metrics`: JSONB field for storing overall workout summary metrics (e.g., total distance, duration, average speed, etc.)
|
||||
- `report_path`: Path to the generated report (string)
|
||||
- `chart_paths`: JSONB field for storing paths to generated charts (e.g., `{'power_curve': '/path/to/chart.png'}`)
|
||||
- **Relationships**: Many-to-one with `User`.
|
||||
|
||||
### WorkoutData (Conceptual/In-Memory Structure)
|
||||
- **Description**: Represents the complete raw and processed data for a single workout session. This is primarily an in-memory object during analysis and its key components are persisted in `WorkoutAnalysis`.
|
||||
- **Fields**:
|
||||
- `metadata`: `WorkoutMetadata` object
|
||||
- `time_series_data`: Pandas DataFrame containing raw time-series data (e.g., timestamp, power, heart rate, speed, elevation)
|
||||
- `power_data`: `PowerData` object
|
||||
- `heart_rate_data`: `HeartRateData` object
|
||||
- `speed_data`: `SpeedData` object (derived from time-series)
|
||||
- `elevation_data`: `ElevationData` object (derived from time-series)
|
||||
|
||||
### WorkoutMetadata
|
||||
- **Description**: Metadata extracted from the workout file.
|
||||
- **Fields**:
|
||||
- `start_time`: Datetime of workout start
|
||||
- `duration`: Total duration (timedelta or seconds)
|
||||
- `device`: Device used for recording (string)
|
||||
- `file_type`: Original file type (e.g., 'FIT', 'TCX', 'GPX')
|
||||
|
||||
### PowerData
|
||||
- **Description**: Contains all power-related analysis results.
|
||||
- **Fields**:
|
||||
- `raw_power_stream`: List of power values
|
||||
- `average_power`: Float
|
||||
- `normalized_power`: Float
|
||||
- `intensity_factor`: Float
|
||||
- `training_stress_score`: Float
|
||||
- `zone_distribution`: Dictionary/JSONB of time spent in each power zone
|
||||
|
||||
### HeartRateData
|
||||
- **Description**: Contains all heart-rate-related analysis results.
|
||||
- **Fields**:
|
||||
- `raw_hr_stream`: List of heart rate values
|
||||
- `average_hr`: Float
|
||||
- `max_hr`: Integer
|
||||
- `zone_distribution`: Dictionary/JSONB of time spent in each heart rate zone
|
||||
|
||||
### ZoneCalculator (Utility)
|
||||
- **Description**: A utility class/module for defining and calculating training zones based on user-specific thresholds (like FTP) or default values.
|
||||
- **Fields**: (Methods for calculation, not data fields)
|
||||
- `calculate_power_zones(ftp, max_power)`
|
||||
- `calculate_heart_rate_zones(max_hr)`
|
||||
Reference in New Issue
Block a user