3.2 KiB
Implementation Plan: Simplify Sync Job Management with Progress Tracking
Branch: 004-home-sstent-projects | Date: Saturday, October 11, 2025 | Spec: /home/sstent/Projects/FitTrack_GarminSync/specs/004-home-sstent-projects/spec.md
Input: Feature specification from /specs/004-home-sstent-projects/spec.md
Note: This template is filled in by the /speckit.plan command. See .specify/templates/commands/plan.md for the execution workflow.
Summary
The feature aims to simplify sync job management for a single-user system by allowing only one sync job at a time and providing progress tracking via a polling API. This involves reintroducing a simplified SyncJob model and a CurrentSyncJobManager to manage its state, modifying existing sync services to update this state, and creating a new API endpoint (GET /garmin/sync/status) for users to monitor progress.
Technical Context
Language/Version: Python 3.13
Primary Dependencies: FastAPI, Pydantic, garth, garminconnect, httpx
Storage: In-memory for CurrentSyncJobManager
Testing: Pytest
Target Platform: Linux server
Project Type: Web application (backend)
Performance Goals:
- Users can successfully initiate any sync operation and receive an initial confirmation within 2 seconds.
- The
GET /garmin/sync/statusAPI endpoint responds with the current sync status within 500ms, even under moderate load (e.g., 10 requests per second). - Sync progress updates are reflected in the
GET /garmin/sync/statusAPI with a granularity that provides meaningful feedback to the user (e.g., progress updates at least every 10% completion or every 30 seconds for long syncs). Constraints: Single-user system, only one sync job active at a time. Scale/Scope: Single user, managing personal Garmin data synchronization.
Constitution Check
GATE: Must pass before Phase 0 research. Re-check after Phase 1 design.
All gates pass. No violations.
Project Structure
Documentation (this feature)
specs/004-home-sstent-projects/
├── plan.md # This file (/speckit.plan command output)
├── research.md # Phase 0 output (/speckit.plan command)
├── data-model.md # Phase 1 output (/speckit.plan command)
├── quickstart.md # Phase 1 output (/speckit.plan command)
├── contracts/ # Phase 1 output (/speckit.plan command)
└── tasks.md # Phase 2 output (/speckit.tasks command - NOT created by /speckit.plan)
Source Code (repository root)
backend/
├── src/
│ ├── models/ # For SyncJob model
│ ├── services/ # For CurrentSyncJobManager and sync logic
│ └── api/ # For garmin_sync API endpoints
└── tests/
├── unit/
├── integration/
└── api/
Structure Decision: The existing "Option 2: Web application" structure is appropriate and will be used. New files will be added to backend/src/models/ (for SyncJob), backend/src/services/ (for CurrentSyncJobManager), and backend/src/api/ (for the new status endpoint and modifications to existing sync endpoints).
Complexity Tracking
N/A