-
Notifications
You must be signed in to change notification settings - Fork 8
Closed
Labels
enhancementNew feature or requestNew feature or request
Description
Problem
The src/services/motionApi.ts file has grown to 2,300+ lines with mixed concerns (API client, caching, 10+ resource types). This makes the code harder to maintain, test, and understand.
Proposed Structure
src/services/
├── motionApi.ts # Facade (~150 lines) - maintains backward compat
├── api/
│ ├── index.ts # Barrel export
│ ├── ApiClient.ts # Axios, retry logic (~150 lines)
│ ├── CacheManager.ts # All caches (~80 lines)
│ ├── tasks.ts # Task methods (~200 lines)
│ ├── projects.ts # Project methods (~180 lines)
│ ├── workspaces.ts # Workspace methods (~50 lines)
│ ├── users.ts # User methods (~80 lines)
│ ├── comments.ts # Comment methods (~100 lines)
│ ├── customFields.ts # Custom field methods (~250 lines)
│ ├── recurringTasks.ts # Recurring task methods (~150 lines)
│ ├── schedules.ts # Schedule methods (~100 lines)
│ ├── statuses.ts # Status methods (~60 lines)
│ └── search.ts # Search/resolution (~350 lines)
Architecture
- Composition pattern: Each module receives ApiClient and CacheManager
- Facade pattern: MotionApiService delegates to modules, maintains existing API for backward compatibility
- Dependency injection: Shared axios instance passed to all modules
Migration Phases
- Phase 1: Extract infrastructure (ApiClient, CacheManager)
- Phase 2: Extract resources by dependency order (workspaces first, then users, tasks, projects, etc.)
- Phase 3: Cleanup and documentation
Benefits
- Smaller, focused files that are easier to understand
- Better testability - can unit test individual modules
- Clearer separation of concerns
- Easier to add new resource types
- Maintains backward compatibility via facade
Related
This issue was identified during code review. The pagination memory optimization (early termination and limits) was addressed separately in the fix/pagination-memory-optimization branch.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
enhancementNew feature or requestNew feature or request