Files
daily-notification-plugin/docs/design/P2.1-NATIVE-REFACTORING-ANALYSIS.md
Jose Olarte III 6ad7ff5fe1 docs: reorganize docs into subdirs and fix links
- Keep only index, getting-started, invariants, performance,
  troubleshooting, and file-organization-summary in docs/ root
- Add docs/architecture/ (storage, database interfaces, native fetcher)
- Add docs/deployment/ (deployment-guide, DEPLOYMENT_CHECKLIST)
- Add docs/compliance/ (accessibility, legal, observability)
- Move integration guides and host-app docs to docs/integration/
- Move design/planning and prefetch docs to docs/design/
- Move Android consuming-app and comparison docs to docs/platform/android/
- Move DEPLOYMENT_SUMMARY and TODO-CLASSIFICATION to docs/progress/
- Archive deprecated platform-capability-reference to docs/_archive/
- Point platform-capability links to alarms/01-platform-capability-reference.md
- Update docs/00-INDEX.md with new sections and paths
- Fix cross-references in README, deployment, progress, design, testing,
  and test-app docs
- Remove one-off COMMIT_MESSAGE.txt
2026-03-06 19:51:13 +08:00

111 lines
4.1 KiB
Markdown

# Priority 2.1: Native Plugin Refactoring - Analysis
**Purpose:** Analyze current native plugin structure and create refactoring plan to extract services from god classes.
**Owner:** Development Team
**Last Updated:** 2025-12-23
**Status:** analysis
---
## Current State
### Android: `DailyNotificationPlugin.kt`
- **Location:** `android/src/main/java/com/timesafari/dailynotification/DailyNotificationPlugin.kt`
- **Size:** ~2,782 lines (per ChatGPT feedback)
- **Type:** Capacitor Plugin class (extends `Plugin`)
### iOS: `DailyNotificationPlugin.swift`
- **Location:** `ios/Plugin/DailyNotificationPlugin.swift`
- **Size:** ~2,047 lines (per ChatGPT feedback)
- **Type:** Capacitor Plugin class (extends `CAPPlugin`)
---
## Refactoring Goals
### Target Services (from ChatGPT feedback)
1. **SchedulerService** - Schedule management logic
2. **PermissionService** - Permission handling
3. **Power/ExactAlarmService** - Power management and exact alarm handling
4. **ReactivationService** - Cold start recovery and reactivation
5. **RollingWindowService** - Rolling window and rate limiting
6. **Storage/StateRepository** - Database and state management
7. **FetcherBridge** - Native fetcher registration and calling
### Principles
- **Thin Plugin Adapter**: Plugin class should only:
- Parse/validate input
- Call platform service
- Map exceptions to plugin errors
- **Service-Oriented**: Real logic lives in services
- **Testability**: Services should be independently testable
- **No Breaking Changes**: Maintain existing API surface
---
## Analysis Steps
1. **Inventory Current Methods** - List all methods in both plugin classes
2. **Identify Service Boundaries** - Group methods by logical service
3. **Check Existing Services** - See what's already extracted
4. **Create Extraction Plan** - Define safe, incremental extraction order
5. **Define Service Interfaces** - Establish contracts for each service
---
## Analysis Results
### Good News: Many Services Already Extracted!
Both platforms have already extracted significant functionality into services:
#### Android Services Already Exist:
-`PermissionManager.java` - Permission handling
-`DailyNotificationScheduler.java` - Scheduling logic
-`ReactivationManager.kt` - Cold start recovery
-`DailyNotificationRollingWindow.java` - Rolling window logic
-`DailyNotificationStorage.java` - Storage abstraction
-`DailyNotificationExactAlarmManager.java` - Exact alarm handling
-`NativeNotificationContentFetcher.java` - Fetcher interface
-`DailyNotificationPerformanceOptimizer.java` - Performance optimization
-`TimeSafariIntegrationManager.java` - Integration orchestration
#### iOS Services Already Exist:
-`DailyNotificationScheduler.swift` - Scheduling logic
-`DailyNotificationReactivationManager.swift` - Recovery
-`DailyNotificationRollingWindow.swift` - Rolling window
-`DailyNotificationStorage.swift` - Storage abstraction
-`DailyNotificationPowerManager.swift` - Power management
-`DailyNotificationStateActor.swift` - Thread-safe state
-`DailyNotificationBackgroundTaskManager.swift` - Background tasks
### Remaining Work
The plugin classes still contain:
1. **Direct database access** - Should use Storage service
2. **Business logic** - Should delegate to services
3. **Error handling** - Should use ErrorHandler service
4. **Validation logic** - Should be in service layer
5. **Orchestration** - Should use IntegrationManager (Android) or similar (iOS)
### Refactoring Strategy
Since many services already exist, the refactoring should focus on:
1. **Removing direct service instantiation** from plugin methods
2. **Delegating all business logic** to existing services
3. **Making plugin class a thin adapter** that only:
- Parses/validates input
- Calls service methods
- Maps exceptions to plugin errors
4. **Consolidating duplicate logic** into services
## Next Steps
1. ✅ Inventory existing services (DONE)
2. ⏭️ Analyze plugin methods to identify what still needs extraction
3. ⏭️ Create extraction plan focusing on delegation, not new services
4. ⏭️ Implement refactoring in small batches