Skip to content

refactor(backend): Schema directory refactor#560

Open
czajkub wants to merge 17 commits intomainfrom
schema-refactor
Open

refactor(backend): Schema directory refactor#560
czajkub wants to merge 17 commits intomainfrom
schema-refactor

Conversation

@czajkub
Copy link
Collaborator

@czajkub czajkub commented Mar 6, 2026

Description

Refactor entire app/schemas directory to follow a new pattern in code:

  • Deleted entire app/schemas/__init__.py - no more imports globally from schemas
  • Every subdirectory has its own __init__.py - importing only from them, not from separate modules or from larger directories above
  • No more than 5 modules per subdirectory - makes it so that inits are more readable, below 75 lines each, most below 50
  • subdirectories grouped by purpose
  • breaking down some large files to prevent large schema files
  • Every import from schemas now follows this pattern - in services layer, repositories, tests etc.

Top layer of separation in app/schemas:

.
├── auth
├── enums
├── model_crud
├── providers
├── responses
└── utils

All subdirectories listed:

.
├── auth
├── enums
├── model_crud
│   ├── activities
│   ├── credentials
│   ├── data_priority
│   └── user_management
├── providers
│   ├── apple
│   │   ├── apple_xml
│   │   └── auto_export
│   ├── garmin
│   ├── mobile_sdk
│   ├── polar
│   ├── strava
│   ├── suunto
│   └── whoop
├── responses
│   ├── activity
│   └── upload
└── utils

Every file also included in this gist:
https://gist.github.com/czajkub/2be61196d158be8c9780c380c00499f6

Example of an __init__.py file:

app/schemas/utils/__init__.py

from .metadata import (
    SourceMetadata,
    TimeseriesMetadata,
)
from .pagination import (
    OldPaginatedResponse,
    PaginatedResponse,
    Pagination,
)
from .query_params import (
    FilterParams,
)

__all__ = [
    # Query params
    "FilterParams",
    # Pagination
    "Pagination",
    "PaginatedResponse",
    "OldPaginatedResponse",
    # Metadata
    "SourceMetadata",
    "TimeseriesMetadata",
]

Checklist

General

  • My code follows the project's code style
  • I have performed a self-review of my code
  • I have added tests that prove my fix/feature works (if applicable)
  • New and existing tests pass locally

Backend Changes

You have to be in backend directory to make it work:

  • uv run pre-commit run --all-files passes

Additional Notes

There are two pagination versions - kept one of them as OldPaginatedResponse for compatibility, but should be unified, the old one only has two uses

Resolves #465

@czajkub czajkub self-assigned this Mar 6, 2026
@czajkub czajkub requested a review from KaliszS as a code owner March 6, 2026 10:22
@czajkub czajkub added the backend label Mar 6, 2026
@czajkub czajkub requested a review from bartmichalak as a code owner March 6, 2026 10:22
@coderabbitai
Copy link

coderabbitai bot commented Mar 6, 2026

Important

Review skipped

Too many files!

This PR contains 213 files, which is 63 over the limit of 150.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 583386a0-11db-46ec-b1f1-06b912fae003

📥 Commits

Reviewing files that changed from the base of the PR and between 11995ef and a79b5a9.

📒 Files selected for processing (213)
  • backend/app/api/routes/v1/api_keys.py
  • backend/app/api/routes/v1/applications.py
  • backend/app/api/routes/v1/auth.py
  • backend/app/api/routes/v1/connections.py
  • backend/app/api/routes/v1/dashboard.py
  • backend/app/api/routes/v1/developers.py
  • backend/app/api/routes/v1/events.py
  • backend/app/api/routes/v1/external_connectors.py
  • backend/app/api/routes/v1/garmin_webhooks.py
  • backend/app/api/routes/v1/import_xml.py
  • backend/app/api/routes/v1/invitations.py
  • backend/app/api/routes/v1/oauth.py
  • backend/app/api/routes/v1/priorities.py
  • backend/app/api/routes/v1/sdk_sync.py
  • backend/app/api/routes/v1/sdk_token.py
  • backend/app/api/routes/v1/summaries.py
  • backend/app/api/routes/v1/sync_data.py
  • backend/app/api/routes/v1/timeseries.py
  • backend/app/api/routes/v1/token.py
  • backend/app/api/routes/v1/user_invitation_code.py
  • backend/app/api/routes/v1/users.py
  • backend/app/api/routes/v1/vendor_workouts.py
  • backend/app/constants/series_types/apple/metric_types.py
  • backend/app/constants/series_types/apple/workout_statistics.py
  • backend/app/constants/workout_types/apple_sdk.py
  • backend/app/constants/workout_types/apple_xml.py
  • backend/app/constants/workout_types/garmin.py
  • backend/app/constants/workout_types/polar.py
  • backend/app/constants/workout_types/strava.py
  • backend/app/constants/workout_types/suunto.py
  • backend/app/constants/workout_types/whoop.py
  • backend/app/database.py
  • backend/app/integrations/celery/tasks/periodic_sync_task.py
  • backend/app/integrations/celery/tasks/process_xml_upload_task.py
  • backend/app/integrations/celery/tasks/send_email_task.py
  • backend/app/integrations/celery/tasks/sync_vendor_data_task.py
  • backend/app/models/data_source.py
  • backend/app/models/device_type_priority.py
  • backend/app/models/invitation.py
  • backend/app/models/provider_priority.py
  • backend/app/models/refresh_token.py
  • backend/app/models/user_connection.py
  • backend/app/repositories/api_key_repository.py
  • backend/app/repositories/application_repository.py
  • backend/app/repositories/data_point_series_repository.py
  • backend/app/repositories/data_source_repository.py
  • backend/app/repositories/developer_repository.py
  • backend/app/repositories/device_type_priority_repository.py
  • backend/app/repositories/event_record_detail_repository.py
  • backend/app/repositories/event_record_repository.py
  • backend/app/repositories/invitation_repository.py
  • backend/app/repositories/provider_priority_repository.py
  • backend/app/repositories/user_connection_repository.py
  • backend/app/repositories/user_invitation_code_repository.py
  • backend/app/repositories/user_repository.py
  • backend/app/schemas/__init__.py
  • backend/app/schemas/auth/__init__.py
  • backend/app/schemas/auth/authentication_method.py
  • backend/app/schemas/auth/connection_status.py
  • backend/app/schemas/auth/sdk_auth.py
  • backend/app/schemas/auth/token.py
  • backend/app/schemas/common.py
  • backend/app/schemas/common_types.py
  • backend/app/schemas/enums/__init__.py
  • backend/app/schemas/enums/device_type.py
  • backend/app/schemas/enums/provider.py
  • backend/app/schemas/enums/series_types.py
  • backend/app/schemas/enums/workout_types.py
  • backend/app/schemas/error_codes.py
  • backend/app/schemas/model_crud/activities/__init__.py
  • backend/app/schemas/model_crud/activities/data_point_series.py
  • backend/app/schemas/model_crud/activities/event_record.py
  • backend/app/schemas/model_crud/activities/event_record_detail.py
  • backend/app/schemas/model_crud/activities/personal_record.py
  • backend/app/schemas/model_crud/credentials/__init__.py
  • backend/app/schemas/model_crud/credentials/api_key.py
  • backend/app/schemas/model_crud/credentials/application.py
  • backend/app/schemas/model_crud/credentials/oauth.py
  • backend/app/schemas/model_crud/credentials/user_invitation_code.py
  • backend/app/schemas/model_crud/data_priority/__init__.py
  • backend/app/schemas/model_crud/data_priority/data_source.py
  • backend/app/schemas/model_crud/data_priority/device_type_priority.py
  • backend/app/schemas/model_crud/data_priority/provider_priority.py
  • backend/app/schemas/model_crud/data_priority/provider_setting.py
  • backend/app/schemas/model_crud/user_management/__init__.py
  • backend/app/schemas/model_crud/user_management/developer.py
  • backend/app/schemas/model_crud/user_management/invitation.py
  • backend/app/schemas/model_crud/user_management/user.py
  • backend/app/schemas/model_crud/user_management/user_connection.py
  • backend/app/schemas/oauth.py
  • backend/app/schemas/providers/apple/apple_xml/__init__.py
  • backend/app/schemas/providers/apple/apple_xml/aws.py
  • backend/app/schemas/providers/apple/apple_xml/stats.py
  • backend/app/schemas/providers/apple/auto_export/__init__.py
  • backend/app/schemas/providers/apple/auto_export/json_schemas.py
  • backend/app/schemas/providers/garmin/__init__.py
  • backend/app/schemas/providers/garmin/activity_import.py
  • backend/app/schemas/providers/garmin/wellness_import.py
  • backend/app/schemas/providers/mobile_sdk/__init__.py
  • backend/app/schemas/providers/mobile_sdk/sleep_state.py
  • backend/app/schemas/providers/mobile_sdk/sync_request.py
  • backend/app/schemas/providers/polar/__init__.py
  • backend/app/schemas/providers/polar/exercise_import.py
  • backend/app/schemas/providers/strava/__init__.py
  • backend/app/schemas/providers/strava/activity_import.py
  • backend/app/schemas/providers/suunto/__init__.py
  • backend/app/schemas/providers/suunto/workout_import.py
  • backend/app/schemas/providers/whoop/__init__.py
  • backend/app/schemas/providers/whoop/workout_import.py
  • backend/app/schemas/responses/activity/__init__.py
  • backend/app/schemas/responses/activity/data_point_responses.py
  • backend/app/schemas/responses/activity/events.py
  • backend/app/schemas/responses/activity/summaries.py
  • backend/app/schemas/responses/upload/__init__.py
  • backend/app/schemas/responses/upload/sync_results.py
  • backend/app/schemas/responses/upload/system_info.py
  • backend/app/schemas/responses/upload/upload_response.py
  • backend/app/schemas/strava/__init__.py
  • backend/app/schemas/token_type.py
  • backend/app/schemas/utils/__init__.py
  • backend/app/schemas/utils/metadata.py
  • backend/app/schemas/utils/pagination.py
  • backend/app/schemas/utils/query_params.py
  • backend/app/services/api_key_service.py
  • backend/app/services/apple/apple_xml/presigned_url_service.py
  • backend/app/services/apple/apple_xml/xml_service.py
  • backend/app/services/apple/auto_export/import_service.py
  • backend/app/services/apple/healthkit/device_resolution.py
  • backend/app/services/apple/healthkit/import_service.py
  • backend/app/services/apple/healthkit/sleep_service.py
  • backend/app/services/application_service.py
  • backend/app/services/developer_service.py
  • backend/app/services/event_record_service.py
  • backend/app/services/invitation_service.py
  • backend/app/services/priority_service.py
  • backend/app/services/provider_settings_service.py
  • backend/app/services/providers/apple/handlers/auto_export.py
  • backend/app/services/providers/apple/handlers/base.py
  • backend/app/services/providers/apple/handlers/healthkit.py
  • backend/app/services/providers/apple/workouts.py
  • backend/app/services/providers/factory.py
  • backend/app/services/providers/garmin/data_247.py
  • backend/app/services/providers/garmin/oauth.py
  • backend/app/services/providers/garmin/workouts.py
  • backend/app/services/providers/google/workouts.py
  • backend/app/services/providers/polar/oauth.py
  • backend/app/services/providers/polar/workouts.py
  • backend/app/services/providers/samsung/workouts.py
  • backend/app/services/providers/strava/handlers/webhook_helpers.py
  • backend/app/services/providers/strava/oauth.py
  • backend/app/services/providers/strava/workouts.py
  • backend/app/services/providers/suunto/data_247.py
  • backend/app/services/providers/suunto/oauth.py
  • backend/app/services/providers/suunto/workouts.py
  • backend/app/services/providers/templates/base_oauth.py
  • backend/app/services/providers/templates/base_workouts.py
  • backend/app/services/providers/whoop/data_247.py
  • backend/app/services/providers/whoop/oauth.py
  • backend/app/services/providers/whoop/workouts.py
  • backend/app/services/refresh_token_service.py
  • backend/app/services/services.py
  • backend/app/services/summaries_service.py
  • backend/app/services/system_info_service.py
  • backend/app/services/timeseries_service.py
  • backend/app/services/user_connection_service.py
  • backend/app/services/user_invitation_code_service.py
  • backend/app/services/user_service.py
  • backend/app/utils/auth.py
  • backend/pyproject.toml
  • backend/scripts/init/seed_activity_data.py
  • backend/scripts/init/seed_admin.py
  • backend/scripts/init/seed_series_types.py
  • backend/scripts/init_provider_settings.py
  • backend/tests/api/v1/test_connections.py
  • backend/tests/api/v1/test_garmin_webhooks.py
  • backend/tests/api/v1/test_summaries.py
  • backend/tests/api/v1/test_sync_data.py
  • backend/tests/api/v1/test_vendor_workouts.py
  • backend/tests/conftest.py
  • backend/tests/factories.py
  • backend/tests/integrations/test_provider_oauth.py
  • backend/tests/integrations/test_suunto_import.py
  • backend/tests/providers/garmin/test_garmin_oauth.py
  • backend/tests/providers/garmin/test_garmin_workouts.py
  • backend/tests/providers/polar/test_polar_oauth.py
  • backend/tests/providers/polar/test_polar_workouts.py
  • backend/tests/providers/suunto/test_suunto_oauth.py
  • backend/tests/providers/suunto/test_suunto_workouts.py
  • backend/tests/providers/templates/test_base_templates.py
  • backend/tests/repositories/test_api_key_repository.py
  • backend/tests/repositories/test_data_point_series_repository.py
  • backend/tests/repositories/test_developer_repository.py
  • backend/tests/repositories/test_device_type_priority_repository.py
  • backend/tests/repositories/test_event_record_detail_repository.py
  • backend/tests/repositories/test_event_record_repository.py
  • backend/tests/repositories/test_provider_priority_repository.py
  • backend/tests/repositories/test_refresh_token_repository.py
  • backend/tests/repositories/test_user_connection_repository.py
  • backend/tests/repositories/test_user_repository.py
  • backend/tests/schemas/test_provider_name.py
  • backend/tests/schemas/test_schema_validation.py
  • backend/tests/services/test_developer_service.py
  • backend/tests/services/test_event_record_service.py
  • backend/tests/services/test_priority_service.py
  • backend/tests/services/test_provider_settings_service.py
  • backend/tests/services/test_refresh_token_service.py
  • backend/tests/services/test_system_info_service.py
  • backend/tests/services/test_time_series_service.py
  • backend/tests/services/test_user_connection_service.py
  • backend/tests/services/test_user_service.py
  • backend/tests/tasks/test_periodic_sync_task.py
  • backend/tests/tasks/test_sync_vendor_data_task.py
  • backend/tests/utils_tests/test_conversion.py

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch schema-refactor

Comment @coderabbitai help to get the list of available commands and usage tips.

@railway-app railway-app bot temporarily deployed to Open Wearables / open-wearables-pr-560 March 6, 2026 10:22 Destroyed
@railway-app
Copy link

railway-app bot commented Mar 6, 2026

🚅 Deployed to the open-wearables-pr-560 environment in Open Wearables

Service Status Web Updated (UTC)
celery-beat ✅ Success (View Logs) Mar 6, 2026 at 10:28 am
celery-worker ✅ Success (View Logs) Mar 6, 2026 at 10:28 am
backend ✅ Success (View Logs) Web Mar 6, 2026 at 10:28 am
celery-flower ✅ Success (View Logs) Web Mar 6, 2026 at 10:28 am
frontend ✅ Success (View Logs) Web Mar 6, 2026 at 10:28 am

@czajkub czajkub changed the title Schema refactor refactor(backend): Schema directory refactor Mar 6, 2026
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Refactors the backend app/schemas package into purpose-based subpackages (auth/enums/model_crud/providers/responses/utils), removes the large global app.schemas aggregator, and updates imports across the backend so callers import from the appropriate subpackage.

Changes:

  • Reorganized and split schema modules into subpackages with per-subpackage __init__.py exports; removed legacy schema aggregator modules (app/schemas/__init__.py, oauth.py, common*.py, etc.).
  • Updated imports throughout API routes, services, repositories, models, scripts, and tests to use the new schema locations.
  • Added/relocated provider JSON schemas and response/util schemas (pagination, metadata, upload/system-info/sync results, activity responses).

Reviewed changes

Copilot reviewed 186 out of 213 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
backend/tests/utils_tests/test_conversion.py Update schema import to new schemas.auth location.
backend/tests/tasks/test_sync_vendor_data_task.py Update schema import to new schemas.auth location.
backend/tests/tasks/test_periodic_sync_task.py Update schema import to new schemas.auth location.
backend/tests/services/test_user_service.py Update user schema imports to schemas.model_crud.user_management.
backend/tests/services/test_user_connection_service.py Update connection/user_connection schema imports to new subpackages.
backend/tests/services/test_time_series_service.py Update series/timeseries schema imports to enums + model_crud.activities.
backend/tests/services/test_system_info_service.py Update ConnectionStatus import to schemas.auth.
backend/tests/services/test_refresh_token_service.py Update TokenType import to schemas.auth.
backend/tests/services/test_provider_settings_service.py Update ProviderName/ProviderSettingUpdate imports to new subpackages.
backend/tests/services/test_priority_service.py Update device/provider priority schema imports to new subpackages.
backend/tests/services/test_event_record_service.py Update event record schema imports to model_crud.activities.
backend/tests/services/test_developer_service.py Update developer schema imports to model_crud.user_management.
backend/tests/schemas/test_schema_validation.py Update schema imports to new auth/model_crud modules.
backend/tests/schemas/test_provider_name.py Update ProviderName import to schemas.enums.
backend/tests/repositories/test_user_repository.py Update user CRUD schema imports to model_crud.user_management.
backend/tests/repositories/test_user_connection_repository.py Update connection status + connection CRUD schemas to new modules.
backend/tests/repositories/test_refresh_token_repository.py Update TokenType import to schemas.auth.
backend/tests/repositories/test_provider_priority_repository.py Update ProviderName import to schemas.enums.
backend/tests/repositories/test_event_record_repository.py Update event record schema imports to model_crud.activities.
backend/tests/repositories/test_event_record_detail_repository.py Update event record detail schema imports to model_crud.activities.
backend/tests/repositories/test_device_type_priority_repository.py Update DeviceType import to schemas.enums.
backend/tests/repositories/test_developer_repository.py Update developer CRUD schema imports to model_crud.user_management.
backend/tests/repositories/test_data_point_series_repository.py Update series/timeseries schema imports to schemas.enums + model_crud.activities.
backend/tests/repositories/test_api_key_repository.py Update API key schema imports to model_crud.credentials.
backend/tests/providers/templates/test_base_templates.py Update event record schema imports to model_crud.activities.
backend/tests/providers/suunto/test_suunto_workouts.py Update provider/workout type schema imports to providers.suunto + enums.
backend/tests/providers/suunto/test_suunto_oauth.py Update OAuth/authentication method schema imports to new modules.
backend/tests/providers/polar/test_polar_workouts.py Update provider/workout type schema imports to providers.polar + enums.
backend/tests/providers/polar/test_polar_oauth.py Update OAuth/authentication method schema imports to new modules.
backend/tests/providers/garmin/test_garmin_workouts.py Update provider/activity + workout type schema imports to new modules.
backend/tests/providers/garmin/test_garmin_oauth.py Update OAuth/authentication method schema imports to new modules.
backend/tests/integrations/test_suunto_import.py Update ConnectionStatus/WorkoutType imports to auth + enums.
backend/tests/integrations/test_provider_oauth.py Update ConnectionStatus import to schemas.auth.
backend/tests/factories.py Update ConnectionStatus/ProviderName imports to auth + enums.
backend/tests/conftest.py Update series type definitions import to schemas.enums.
backend/tests/api/v1/test_vendor_workouts.py Update ConnectionStatus import to schemas.auth.
backend/tests/api/v1/test_sync_data.py Update ConnectionStatus import to schemas.auth.
backend/tests/api/v1/test_summaries.py Update ProviderName import to schemas.enums.
backend/tests/api/v1/test_garmin_webhooks.py Update ConnectionStatus import to schemas.auth.
backend/tests/api/v1/test_connections.py Update ConnectionStatus import to schemas.auth.
backend/scripts/init_provider_settings.py Update ProviderName import to schemas.enums.
backend/scripts/init/seed_series_types.py Update series type definitions import to schemas.enums.
backend/scripts/init/seed_admin.py Update developer create schema import to model_crud.user_management.
backend/scripts/init/seed_activity_data.py Update many schema imports to new auth/enums/model_crud modules.
backend/pyproject.toml Update Ruff per-file ignores to match new provider schema paths.
backend/app/utils/auth.py Update SDKAuthContext import to schemas.auth.
backend/app/services/user_service.py Update user schemas + switch to OldPaginatedResponse from schemas.utils.
backend/app/services/user_invitation_code_service.py Update invitation code schema imports to model_crud.credentials.
backend/app/services/user_connection_service.py Update user-connection CRUD schema imports to model_crud.user_management.
backend/app/services/timeseries_service.py Update imports to enums + model_crud.activities + responses.activity + utils.
backend/app/services/system_info_service.py Update imports to enums + responses.upload.
backend/app/services/summaries_service.py Update imports to enums + responses.activity + utils.
backend/app/services/services.py Update FilterParams import to schemas.utils.
backend/app/services/refresh_token_service.py Update token-related schema imports to schemas.auth.
backend/app/services/providers/whoop/workouts.py Move Whoop JSON schemas import to schemas.providers.whoop.
backend/app/services/providers/whoop/oauth.py Split imports between schemas.auth and model_crud.credentials.oauth.
backend/app/services/providers/whoop/data_247.py Update series/event schema imports to new enums + model_crud.activities.
backend/app/services/providers/templates/base_workouts.py Update event record schema imports to model_crud.activities.
backend/app/services/providers/templates/base_oauth.py Update auth + OAuth credential/state/user-connection schema imports.
backend/app/services/providers/suunto/workouts.py Update ProviderName + workout JSON schema imports to new modules.
backend/app/services/providers/suunto/oauth.py Update OAuth credential schema imports to model_crud.credentials.oauth.
backend/app/services/providers/suunto/data_247.py Update series/event schema imports to new enums + model_crud.activities.
backend/app/services/providers/strava/workouts.py Update workout type + Strava activity JSON imports to new modules.
backend/app/services/providers/strava/oauth.py Split imports between schemas.auth and model_crud.credentials.oauth.
backend/app/services/providers/strava/handlers/webhook_helpers.py Update Strava activity JSON import to schemas.providers.strava.
backend/app/services/providers/samsung/workouts.py Update event record schema imports to model_crud.activities.
backend/app/services/providers/polar/workouts.py Update Polar exercise JSON import to schemas.providers.polar.
backend/app/services/providers/polar/oauth.py Update OAuth credential schema imports to model_crud.credentials.oauth.
backend/app/services/providers/google/workouts.py Update event record schema imports to model_crud.activities.
backend/app/services/providers/garmin/workouts.py Update Garmin activity JSON import to schemas.providers.garmin.
backend/app/services/providers/garmin/oauth.py Split imports between schemas.auth and model_crud.credentials.oauth.
backend/app/services/providers/garmin/data_247.py Update series/event schema imports to new enums + model_crud.activities.
backend/app/services/providers/factory.py Update ProviderName import to schemas.enums.
backend/app/services/providers/apple/workouts.py Update event record schema imports to model_crud.activities.
backend/app/services/providers/apple/handlers/healthkit.py Update event record schema imports to model_crud.activities.
backend/app/services/providers/apple/handlers/base.py Update event record schema imports to model_crud.activities.
backend/app/services/providers/apple/handlers/auto_export.py Update event record schema imports to model_crud.activities.
backend/app/services/provider_settings_service.py Update provider setting schema imports to new subpackages.
backend/app/services/priority_service.py Update priority schema imports to enums + model_crud.data_priority.
backend/app/services/invitation_service.py Update invitation schema imports to model_crud.user_management.
backend/app/services/event_record_service.py Update imports to new response/utils/enums/model_crud locations.
backend/app/services/developer_service.py Update developer schema imports to model_crud.user_management.
backend/app/services/application_service.py Update application schema imports to model_crud.credentials.
backend/app/services/apple/healthkit/sleep_service.py Update SDK mobile schema imports to schemas.providers.mobile_sdk.
backend/app/services/apple/healthkit/import_service.py Update SDK/mobile + upload response schema imports to new modules.
backend/app/services/apple/healthkit/device_resolution.py Update OSVersion/SourceInfo import to schemas.providers.mobile_sdk.
backend/app/services/apple/auto_export/import_service.py Update auto-export provider schemas + upload response import paths.
backend/app/services/apple/apple_xml/xml_service.py Update XML parse stats import to schemas.providers.apple.apple_xml.
backend/app/services/apple/apple_xml/presigned_url_service.py Update presigned URL schema imports to schemas.providers.apple.apple_xml.
backend/app/services/api_key_service.py Update API key schema imports to model_crud.credentials.
backend/app/schemas/utils/query_params.py New shared query param schema (FilterParams).
backend/app/schemas/utils/pagination.py New pagination schemas (cursor-based + legacy).
backend/app/schemas/utils/metadata.py New metadata schemas for responses.
backend/app/schemas/utils/init.py Expose utils schemas via package exports.
backend/app/schemas/token_type.py Remove legacy TokenType module (moved under schemas.auth).
backend/app/schemas/strava/init.py Remove legacy Strava schema package root.
backend/app/schemas/responses/upload/upload_response.py New upload/sync response schema.
backend/app/schemas/responses/upload/system_info.py New dashboard system-info response schemas.
backend/app/schemas/responses/upload/sync_results.py New sync task result schemas.
backend/app/schemas/responses/upload/init.py Export upload-related response schemas.
backend/app/schemas/responses/activity/summaries.py Update SourceMetadata import to schemas.utils.
backend/app/schemas/responses/activity/events.py Update imports to new activity response modules; remove unused RootModel type.
backend/app/schemas/responses/activity/data_point_responses.py New time-series and aggregation response types for activity.
backend/app/schemas/responses/activity/init.py Export activity response schemas.
backend/app/schemas/providers/whoop/workout_import.py New Whoop workout JSON schemas.
backend/app/schemas/providers/whoop/init.py Export Whoop provider schemas.
backend/app/schemas/providers/suunto/workout_import.py New Suunto workout JSON schemas.
backend/app/schemas/providers/suunto/init.py Export Suunto provider schemas.
backend/app/schemas/providers/strava/activity_import.py New Strava activity JSON schemas.
backend/app/schemas/providers/strava/init.py Export Strava provider schemas.
backend/app/schemas/providers/polar/exercise_import.py New Polar exercise JSON schemas.
backend/app/schemas/providers/polar/init.py Export Polar provider schemas.
backend/app/schemas/providers/mobile_sdk/sync_request.py New mobile SDK sync request schema definitions.
backend/app/schemas/providers/mobile_sdk/sleep_state.py New mobile SDK sleep state TypedDict + constants.
backend/app/schemas/providers/mobile_sdk/init.py Export mobile SDK provider schemas.
backend/app/schemas/providers/garmin/wellness_import.py New Garmin wellness JSON schemas.
backend/app/schemas/providers/garmin/activity_import.py New Garmin activity JSON schemas.
backend/app/schemas/providers/garmin/init.py Export Garmin provider schemas.
backend/app/schemas/providers/apple/auto_export/json_schemas.py Add/move Apple auto-export JSON schemas and root wrapper.
backend/app/schemas/providers/apple/auto_export/init.py Export Apple auto-export provider schemas.
backend/app/schemas/providers/apple/apple_xml/stats.py New XML parsing stats dataclass (moved under provider schemas).
backend/app/schemas/providers/apple/apple_xml/aws.py New presigned URL request/response schemas + constants.
backend/app/schemas/providers/apple/apple_xml/init.py Export Apple XML provider schemas and constants.
backend/app/schemas/oauth.py Remove legacy combined OAuth schema module (split into auth/enums/model_crud).
backend/app/schemas/model_crud/user_management/user_connection.py New user-connection CRUD schemas under model_crud.
backend/app/schemas/model_crud/user_management/user.py New user CRUD schemas + query params under model_crud.
backend/app/schemas/model_crud/user_management/invitation.py New invitation schemas under model_crud.
backend/app/schemas/model_crud/user_management/developer.py New developer CRUD schemas under model_crud.
backend/app/schemas/model_crud/user_management/init.py Export user-management CRUD schemas.
backend/app/schemas/model_crud/data_priority/provider_setting.py New provider setting CRUD schemas.
backend/app/schemas/model_crud/data_priority/provider_priority.py Update provider priority schemas to import ProviderName from enums.
backend/app/schemas/model_crud/data_priority/device_type_priority.py Update DeviceType import to enums.
backend/app/schemas/model_crud/data_priority/data_source.py Update ProviderName import to enums.
backend/app/schemas/model_crud/data_priority/init.py Export data-priority CRUD schemas.
backend/app/schemas/model_crud/credentials/user_invitation_code.py Update TokenResponse import to schemas.auth.
backend/app/schemas/model_crud/credentials/oauth.py New OAuth credential/state schemas under model_crud.credentials.
backend/app/schemas/model_crud/credentials/application.py New application CRUD schemas under model_crud.credentials.
backend/app/schemas/model_crud/credentials/api_key.py New API key CRUD schemas under model_crud.credentials.
backend/app/schemas/model_crud/credentials/init.py Export credentials CRUD schemas.
backend/app/schemas/model_crud/activities/personal_record.py New personal record CRUD schemas under model_crud.activities.
backend/app/schemas/model_crud/activities/event_record_detail.py New event record detail CRUD schemas under model_crud.activities.
backend/app/schemas/model_crud/activities/event_record.py New event record CRUD schemas under model_crud.activities.
backend/app/schemas/model_crud/activities/data_point_series.py Remove embedded API response models; keep CRUD-related models and import SeriesType from enums.
backend/app/schemas/model_crud/activities/init.py Export activity-related CRUD schemas.
backend/app/schemas/error_codes.py Remove legacy error code schema module.
backend/app/schemas/enums/workout_types.py New unified WorkoutType enum + pace helper list.
backend/app/schemas/enums/series_types.py New unified SeriesType enum + stable ID/unit mappings and helpers.
backend/app/schemas/enums/provider.py New ProviderName enum + default priority map.
backend/app/schemas/enums/device_type.py New DeviceType enum + inference helpers + defaults.
backend/app/schemas/enums/init.py Export enums and helpers.
backend/app/schemas/common_types.py Remove legacy common types module (moved to schemas.utils).
backend/app/schemas/common.py Remove legacy common module (split across new packages).
backend/app/schemas/auth/token.py Add TokenType to auth token module.
backend/app/schemas/auth/sdk_auth.py New SDK auth request/context schemas.
backend/app/schemas/auth/connection_status.py New ConnectionStatus enum under auth.
backend/app/schemas/auth/authentication_method.py New AuthenticationMethod enum under auth.
backend/app/schemas/auth/init.py Export auth schemas/enums.
backend/app/schemas/init.py Remove global schema aggregator __init__.
backend/app/repositories/user_repository.py Update user schema imports to model_crud.user_management.
backend/app/repositories/user_invitation_code_repository.py Update invitation code schema imports to model_crud.credentials.
backend/app/repositories/user_connection_repository.py Update ConnectionStatus + CRUD schema imports to new modules.
backend/app/repositories/provider_priority_repository.py Update ProviderName/default priority imports to schemas.enums and CRUD schemas to model_crud.data_priority.
backend/app/repositories/invitation_repository.py Update invitation schema imports to model_crud.user_management.
backend/app/repositories/event_record_repository.py Update event record schema imports to model_crud.activities + ProviderName to enums.
backend/app/repositories/event_record_detail_repository.py Update event record detail schema imports to model_crud.activities.
backend/app/repositories/device_type_priority_repository.py Update DeviceType/defaults import to schemas.enums.
backend/app/repositories/developer_repository.py Update developer schema imports to model_crud.user_management.
backend/app/repositories/data_source_repository.py Update enums + data source schema imports to new locations.
backend/app/repositories/data_point_series_repository.py Update enums + activities CRUD + activity response type imports to new locations.
backend/app/repositories/application_repository.py Update application schema imports to model_crud.credentials.
backend/app/repositories/api_key_repository.py Update API key schema imports to model_crud.credentials.
backend/app/models/user_connection.py Update ConnectionStatus import to schemas.auth.
backend/app/models/refresh_token.py Update TokenType import to schemas.auth.
backend/app/models/provider_priority.py Update ProviderName import to schemas.enums.
backend/app/models/invitation.py Update InvitationStatus import to model_crud.user_management.
backend/app/models/device_type_priority.py Update DeviceType import to schemas.enums.
backend/app/models/data_source.py Update ProviderName import to schemas.enums.
backend/app/integrations/celery/tasks/sync_vendor_data_task.py Update sync result schema imports to schemas.responses.upload.
backend/app/integrations/celery/tasks/send_email_task.py Update InvitationStatus import to model_crud.user_management.
backend/app/integrations/celery/tasks/process_xml_upload_task.py Update XML parse stats import to provider schema package.
backend/app/integrations/celery/tasks/periodic_sync_task.py Update sync result schema imports to schemas.responses.upload.
backend/app/database.py Update enum imports (ConnectionStatus/TokenType/ProviderName/InvitationStatus) to new modules.
backend/app/constants/workout_types/whoop.py Update WorkoutType import to schemas.enums.
backend/app/constants/workout_types/suunto.py Update WorkoutType import to schemas.enums.
backend/app/constants/workout_types/strava.py Update WorkoutType import to schemas.enums.
backend/app/constants/workout_types/polar.py Update WorkoutType import to schemas.enums.
backend/app/constants/workout_types/garmin.py Update WorkoutType import to schemas.enums.
backend/app/constants/workout_types/apple_xml.py Update WorkoutType import to schemas.enums.
backend/app/constants/workout_types/apple_sdk.py Update WorkoutType import to schemas.enums.
backend/app/constants/series_types/apple/workout_statistics.py Update SeriesType import to schemas.enums.
backend/app/constants/series_types/apple/metric_types.py Update SeriesType import to schemas.enums.
backend/app/api/routes/v1/vendor_workouts.py Update ProviderName import to schemas.enums.
backend/app/api/routes/v1/users.py Update user schemas and response model to OldPaginatedResponse from schemas.utils.
backend/app/api/routes/v1/user_invitation_code.py Update invitation code schemas import to model_crud.credentials.
backend/app/api/routes/v1/token.py Update token schema imports to schemas.auth.
backend/app/api/routes/v1/timeseries.py Update imports to enums + model_crud.activities + responses.activity + utils.
backend/app/api/routes/v1/sync_data.py Update ProviderName import to schemas.enums.
backend/app/api/routes/v1/summaries.py Update summaries response import to responses.activity and pagination wrapper to utils.
backend/app/api/routes/v1/sdk_token.py Update SDK token request + token response imports to schemas.auth.
backend/app/api/routes/v1/sdk_sync.py Update SDK sync request and upload response imports to new provider/response packages.
backend/app/api/routes/v1/priorities.py Update enums + priority schema imports to new modules.
backend/app/api/routes/v1/oauth.py Update ProviderName + AuthorizationURLResponse + provider setting schemas to new modules.
backend/app/api/routes/v1/invitations.py Update invitation/developer schema imports to model_crud.user_management.
backend/app/api/routes/v1/import_xml.py Update presigned URL schema imports to provider schema package.
backend/app/api/routes/v1/garmin_webhooks.py Update GarminActivityJSON import to schemas.providers.garmin.
backend/app/api/routes/v1/external_connectors.py Update UploadDataResponse import to schemas.responses.upload.
backend/app/api/routes/v1/events.py Update event query params + responses + pagination wrapper imports to new modules.
backend/app/api/routes/v1/developers.py Update developer schema imports to model_crud.user_management.
backend/app/api/routes/v1/dashboard.py Update SystemInfoResponse import to schemas.responses.upload.
backend/app/api/routes/v1/connections.py Update UserConnectionRead import to model_crud.user_management.
backend/app/api/routes/v1/auth.py Update token and developer schema imports to new modules.
backend/app/api/routes/v1/applications.py Update application schema imports to model_crud.credentials.
backend/app/api/routes/v1/api_keys.py Update API key schema imports to model_crud.credentials.

Comment on lines +4 to +6
from pydantic import BaseModel, Field, computed_field, field_validator

from app.schemas.utils import TimeseriesMetadata
Copy link

Copilot AI Mar 6, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PaginatedResponse imports TimeseriesMetadata via from app.schemas.utils import TimeseriesMetadata, which couples this module to the package __init__ and creates a fragile circular import path (utils/init.py imports pagination). Import TimeseriesMetadata from the local module (e.g., from .metadata import TimeseriesMetadata) to avoid circular import behavior and make direct imports of pagination safe.

Copilot uses AI. Check for mistakes.
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yes, import from .metadata is better

Comment on lines +21 to 29
from app.schemas.responses.activity import SleepSession, SleepStagesSummary, Workout, WorkoutDetailed
from app.schemas.utils import (
PaginatedResponse,
Pagination,
TimeseriesMetadata,
)
from app.schemas.utils import (
SourceMetadata as DataSourceSchema,
)
Copy link

Copilot AI Mar 6, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There are two separate from app.schemas.utils import ... blocks back-to-back. This is redundant and makes import maintenance harder during future refactors. Combine these into a single import statement (including SourceMetadata as DataSourceSchema) to keep imports concise.

Copilot uses AI. Check for mistakes.
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is required by ruff, due to the alias its forced to be in 2 blocks

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Schema refactor

2 participants