Skip to content

refactor: Split motionApi.ts into smaller resource modules #52

@devondragon

Description

@devondragon

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

  1. Phase 1: Extract infrastructure (ApiClient, CacheManager)
  2. Phase 2: Extract resources by dependency order (workspaces first, then users, tasks, projects, etc.)
  3. 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions