mirror of
https://github.com/sstent/FitTrack_GarminSync.git
synced 2025-12-05 23:51:44 +00:00
6.4 KiB
6.4 KiB
Data Model for GarminSync Service
This document outlines the key entities, their attributes, relationships, and validation rules for the GarminSync service, primarily focusing on data stored in CentralDB.
1. User
Represents the single authenticated individual utilizing the GarminSync service.
- Attributes:
id: Unique identifier (Primary Key, UUID)username: User's chosen username (String, Unique, Required)password_hash: Hashed password for authentication (String, Required)created_at: Timestamp of user creation (Datetime, Auto-generated)updated_at: Timestamp of last update (Datetime, Auto-generated)
- Relationships:
- One-to-One with
Garmin Connect Account - One-to-Many with
Activity(indirectly through Garmin Connect Account) - One-to-Many with
Health Metric(indirectly through Garmin Connect Account) - One-to-Many with
Workout - One-to-Many with
Sync Job
- One-to-One with
- Validation Rules:
usernamemust be unique.password_hashmust be present.
2. Garmin Connect Account
Represents the user's linked Garmin account, storing authentication credentials.
- Attributes:
id: Unique identifier (Primary Key, UUID)user_id: Foreign Key toUser.id(UUID, Required)garmin_user_id: Unique identifier from Garmin Connect (String, Required)oauth_token: OAuth2 access token (String, Encrypted, Required)oauth_token_secret: OAuth2 token secret (String, Encrypted, Required)refresh_token: OAuth2 refresh token (String, Encrypted)token_expires_at: Timestamp of token expiration (Datetime)linked_at: Timestamp of account linking (Datetime, Auto-generated)updated_at: Timestamp of last update (Datetime, Auto-generated)
- Relationships:
- Many-to-One with
User - One-to-Many with
Activity - One-to-Many with
Health Metric
- Many-to-One with
- Validation Rules:
user_idmust reference an existingUser.oauth_tokenandoauth_token_secretmust be present for active accounts.
3. Activity
A record of a fitness activity obtained from Garmin Connect, encompassing raw data files and metadata.
- Attributes:
id: Unique identifier (Primary Key, UUID)garmin_connect_account_id: Foreign Key toGarmin Connect Account.id(UUID, Required)garmin_activity_id: Unique identifier from Garmin Connect (String, Unique, Required)activity_type: Type of activity (e.g., 'running', 'cycling') (String, Required)start_time: Activity start time (Datetime, Required)duration: Activity duration in seconds (Integer, Required)distance: Activity distance in meters (Float)calories: Calories burned (Float)file_type: Original file type (FIT, GPX, TCX) (String, Required)file_path: Path to the stored activity file in CentralDB (String, Required)metadata: JSON blob for additional metadata (JSONB)synced_at: Timestamp of last successful sync (Datetime, Auto-generated)created_at: Timestamp of record creation (Datetime, Auto-generated)
- Relationships:
- Many-to-One with
Garmin Connect Account
- Many-to-One with
- Validation Rules:
garmin_activity_idmust be unique perGarmin Connect Account.file_typemust be one of FIT, GPX, or TCX.file_pathmust be a valid path.
4. Health Metric
A data point representing a user's health measurement synchronized from Garmin Connect.
- Attributes:
id: Unique identifier (Primary Key, UUID)garmin_connect_account_id: Foreign Key toGarmin Connect Account.id(UUID, Required)metric_type: Type of health metric (e.g., 'heart_rate', 'sleep', 'body_composition') (String, Required)timestamp: Timestamp of the metric reading (Datetime, Required)value: The measured value (Float, Required)unit: Unit of measurement (String)metadata: JSON blob for additional metadata (JSONB)synced_at: Timestamp of last successful sync (Datetime, Auto-generated)created_at: Timestamp of record creation (Datetime, Auto-generated)
- Relationships:
- Many-to-One with
Garmin Connect Account
- Many-to-One with
- Validation Rules:
- Combination of
garmin_connect_account_id,metric_type, andtimestampshould be unique.
- Combination of
5. Workout
A structured training plan or session that can be uploaded to Garmin Connect.
- Attributes:
id: Unique identifier (Primary Key, UUID)user_id: Foreign Key toUser.id(UUID, Required)name: Name of the workout (String, Required)description: Description of the workout (String)workout_definition: JSON representation of the workout structure (JSONB, Required)created_at: Timestamp of workout creation (Datetime, Auto-generated)updated_at: Timestamp of last update (Datetime, Auto-generated)uploaded_to_garmin_at: Timestamp of last successful upload to Garmin (Datetime)
- Relationships:
- Many-to-One with
User
- Many-to-One with
- Validation Rules:
workout_definitionmust conform to a predefined schema for Garmin Connect workouts.
6. Sync Job
An instance of a synchronization operation, tracking its status, progress, and any associated errors.
- Attributes:
id: Unique identifier (Primary Key, UUID)user_id: Foreign Key toUser.id(UUID, Required)job_type: Type of synchronization (e.g., 'activity_sync', 'health_metrics_sync', 'workout_upload') (String, Required)status: Current status ('pending', 'in_progress', 'completed', 'failed') (String, Required)started_at: Timestamp when the job started (Datetime)completed_at: Timestamp when the job completed (Datetime)progress: Current progress (Float, 0.0-1.0)error_message: Details of any error encountered (Text)metadata: JSON blob for job-specific data (JSONB)created_at: Timestamp of job creation (Datetime, Auto-generated)updated_at: Timestamp of last update (Datetime, Auto-generated)
- Relationships:
- Many-to-One with
User
- Many-to-One with
- Validation Rules:
job_typemust be one of the defined synchronization types.statusmust be one of the defined statuses.progressmust be between 0.0 and 1.0.