Renamed UserDistanceStatsComponent and its i18n files from the activities to the users directory for better organization. Updated all relevant imports and i18n paths. Also updated the Crowdin configuration to include the new users component path. Minor docstring update in user_goals router to clarify date argument.
Simplified userGoalsService by removing data transformation logic and direct dependencies on utility functions. Deleted genericUtils.js as it is no longer used. Also removed debug logs from router and adjusted router initialization order in main.js.
Updated all formatting utility functions (e.g., formatDistance, formatPace, formatCalories, etc.) to accept a translation function `t` for proper localization. Refactored all component usages to pass the translation function accordingly. This change improves i18n support and ensures all user-facing strings are localized. Also added debug logging in the router and updated user goals service to use the new formatting signatures.
Introduces a meta.requiresAuth property to all routes for clearer authentication requirements. Refactors the navigation guard to use this meta property, redirecting unauthenticated users to login and preserving intended destination. Also adds scroll behavior to restore saved position or scroll to top.
Replaces static import and manual message construction for translations with a dynamic import and lazy loading approach. This reduces boilerplate, simplifies locale and component management, and improves maintainability for adding new languages or components.
Added empty settingsUserGoals.json files for ca, de, es, fr, nl, and pt locales and registered them in i18n/index.js. Also cleaned up the us version by removing unused goal-related strings, keeping only those relevant to fetching and displaying goals.
Extended the profile data import functionality to include user goals. Updated documentation, data mapping, and import logic to handle user goals alongside other user-related data.
User goals are now included in the profile data export ZIP, with corresponding updates to the backend export logic and counts. Refactored backend user goals CRUD to clarify function naming. Fixed import paths for Goals components in frontend Settings views and adjusted icon spacing in GoalsListComponent.
Corrects the initialization and management of the isLoading state in SettingsUserGoals.vue and SettingsUsersZone.vue. Ensures loading indicators are set appropriately during async data fetching on component mount.
Renamed SettingsGoals components and i18n files to SettingsUserGoals for clarity and consistency. Updated all relevant imports and translation keys. Removed the reusable ConfirmComponent and its example. Also removed the unused 'parse-duration' dependency from package.json and updated several frontend dependencies.
Implemented goal editing functionality in the frontend, including edit modals, event handling, and service methods. Updated backend schemas to introduce UserGoalEdit for partial updates. Improved unit conversion utilities and ensured correct display and conversion of distance and elevation based on user settings. Added success/error messages for editing and deleting goals, and refactored related code for clarity and maintainability.
Refactored backend user goal schemas to introduce UserGoalBase, UserGoalCreate, and UserGoalRead for clearer API boundaries and stricter validation. Updated CRUD and router logic to use new schemas and improved error handling. On the frontend, enhanced goal creation flow to optimistically add new goals to the list, display success notifications, and show more detailed goal information in the list. Added new i18n string for successful goal addition.
Consolidates UserGoalBase and UserGoal into a single UserGoal schema, updates related CRUD and router signatures, and adjusts the Alembic migration to match the new model structure. The migration now includes additional goal fields, changes interval to non-nullable, and updates comments for clarity. Also updates the gear.created_at column comment for consistency.
Replaces string/int fields for interval, activity_type, and goal_type with Enum/IntEnum types for better type safety. Adds field-level non-negative integer constraints and a model-level validator to ensure only the correct goal value is set based on goal_type. Updates model configuration for stricter validation and assignment.
Updated backend and frontend to support new goal types and structure for user goals, including new fields such as goal_type and goal_activities_number. Adjusted validation, models, and API schema accordingly. Added new Vue components for managing goals in the settings area and updated i18n files for multiple languages.
Added a helper to convert string datetime fields to datetime objects before applying timezone formatting in serialize_activity. This prevents errors when activity fields are provided as ISO format strings.
Changed variable declarations for minutes and seconds from const to let in pace formatting functions to allow for reassignment when seconds round up to 60.
Introduces a new async function to fetch a notification by its ID and prepend it to the notifications list if not already present. Increments the unread count if the notification is unread and handles errors with a user-facing message.
Changed the default value of REVERSE_GEO_PROVIDER from 'nominatim' to 'geocode' in the configuration and updated the documentation to reflect this new default.
Introduces support for Nominatim as a reverse geocoding provider alongside geocode and photon. Updates configuration and documentation to include NOMINATIM_API_HOST and NOMINATIM_API_USE_HTTPS environment variables, sets Nominatim as the default provider, and refactors related logic in utils.py.
Replaced direct dictionary access with .get() when extracting 'max' speed from lap.tpx_ext_stats to prevent KeyError if 'Speed' or 'max' keys are missing.
Updated the create_activity_sets function to properly extract values from tuples for the category and category_subtype fields. Also fixed logging to use core_logger.print_to_log for error reporting.
Introduces 'Track run' as a new activity type in the backend, updating mappings and distance calculations accordingly. Removes debug print statements from FIT utils. Updates backend dependencies in poetry.lock and pyproject.toml, and bumps API version to v0.13.4. Adds new ignore rules for import error files in .gitignore. Minor updates to frontend components and i18n files.
Create tz_applied fields in the schema object.
Only apply timezone adjustments to the tz_applied fields.
Changed references to start_time and created_at to use their corresponding tz_applied fields.