Fixed baseline tag drift issue: - docs/00-INDEX.md now references docs/progress/00-STATUS.md as canonical baseline - docs/progress/00-STATUS.md marked as canonical baseline authority Created Priority 2.1 mapping and batch planning: - docs/progress/P2.1-METHOD-SERVICE-MAP.md: Complete method-to-service mapping - docs/progress/P2.1-BATCH-1.md: First batch (pure delegation, ~15 methods) - docs/progress/P2.1-BATCH-2.md: Second batch (validation + delegation, ~20 methods) Batch 1 focuses on read-only operations (lowest risk). Batch 2 focuses on validation + delegation (medium risk). Expected reduction: ~1,650-2,000 lines across both platforms. Verification: - Baseline authority fixed ✅ - Method mapping complete ✅ - Batch plans created ✅
231 lines
7.7 KiB
Markdown
231 lines
7.7 KiB
Markdown
# Priority 2.1: Batch 1 - Pure Delegation Methods
|
|
|
|
**Purpose:** First refactoring batch focusing on pure delegation (lowest risk).
|
|
**Owner:** Development Team
|
|
**Last Updated:** 2025-12-23
|
|
**Status:** planned
|
|
**Baseline:** See `docs/progress/00-STATUS.md`
|
|
|
|
---
|
|
|
|
## Batch 1 Scope
|
|
|
|
**Goal:** Refactor methods that are pure delegation (no transformation, minimal validation).
|
|
|
|
**Risk Level:** ⭐ Low (read-only operations, no state mutation)
|
|
|
|
**Estimated Impact:** ~15-20 methods across both platforms
|
|
|
|
---
|
|
|
|
## Android Methods
|
|
|
|
### Status & Health (Read-Only)
|
|
|
|
1. **`getNotificationStatus()`**
|
|
- **Current:** Direct implementation in plugin
|
|
- **Target:** `NotificationStatusChecker.getComprehensiveStatus()`
|
|
- **Change:** Replace implementation with service call
|
|
- **Files:** `DailyNotificationPlugin.kt` (~45 lines → ~5 lines)
|
|
|
|
2. **`checkStatus()`**
|
|
- **Current:** Alias for `getNotificationStatus()`
|
|
- **Target:** `NotificationStatusChecker.getComprehensiveStatus()`
|
|
- **Change:** Delegate to same service method
|
|
- **Files:** `DailyNotificationPlugin.kt` (~55 lines → ~5 lines)
|
|
|
|
### Permission Checks (Read-Only)
|
|
|
|
3. **`checkPermissionStatus()`**
|
|
- **Current:** Direct implementation in plugin
|
|
- **Target:** `PermissionManager.checkNotificationPermission()`
|
|
- **Change:** Replace implementation with service call
|
|
- **Files:** `DailyNotificationPlugin.kt` (~53 lines → ~5 lines)
|
|
|
|
4. **`checkPermissions()`** (override)
|
|
- **Current:** Direct implementation in plugin
|
|
- **Target:** `PermissionManager.checkAllPermissions()`
|
|
- **Change:** Delegate to manager
|
|
- **Files:** `DailyNotificationPlugin.kt` (~43 lines → ~5 lines)
|
|
|
|
### Exact Alarm Status (Read-Only)
|
|
|
|
5. **`getExactAlarmStatus()`**
|
|
- **Current:** Direct implementation in plugin
|
|
- **Target:** `DailyNotificationExactAlarmManager.getStatus()`
|
|
- **Change:** Replace implementation with service call
|
|
- **Files:** `DailyNotificationPlugin.kt` (~43 lines → ~5 lines)
|
|
|
|
6. **`checkExactAlarmPermission()`**
|
|
- **Current:** Direct implementation in plugin
|
|
- **Target:** `DailyNotificationExactAlarmManager.checkPermission()`
|
|
- **Change:** Replace implementation with service call
|
|
- **Files:** `DailyNotificationPlugin.kt` (~23 lines → ~5 lines)
|
|
|
|
### Channel Status (Read-Only)
|
|
|
|
7. **`isChannelEnabled()`**
|
|
- **Current:** Direct implementation in plugin
|
|
- **Target:** `ChannelManager.isChannelEnabled(channelId)`
|
|
- **Change:** Replace implementation with service call
|
|
- **Files:** `DailyNotificationPlugin.kt` (~77 lines → ~5 lines)
|
|
|
|
### Scheduling Queries (Read-Only)
|
|
|
|
8. **`isAlarmScheduled()`**
|
|
- **Current:** Direct implementation in plugin
|
|
- **Target:** `DailyNotificationScheduler.isScheduled(...)`
|
|
- **Change:** Replace implementation with service call
|
|
- **Files:** `DailyNotificationPlugin.kt` (~24 lines → ~5 lines)
|
|
|
|
9. **`getNextAlarmTime()`**
|
|
- **Current:** Direct implementation in plugin
|
|
- **Target:** `DailyNotificationScheduler.getNextAlarmTime()`
|
|
- **Change:** Replace implementation with service call
|
|
- **Files:** `DailyNotificationPlugin.kt` (~26 lines → ~5 lines)
|
|
|
|
### Content Cache (Read-Only)
|
|
|
|
10. **`getContentCache()`**
|
|
- **Current:** Direct database access in plugin
|
|
- **Target:** `DailyNotificationStorage.getContentCache(id)`
|
|
- **Change:** Replace database access with storage service call
|
|
- **Files:** `DailyNotificationPlugin.kt` (~31 lines → ~5 lines)
|
|
|
|
---
|
|
|
|
## iOS Methods
|
|
|
|
### Permission Status (Read-Only)
|
|
|
|
1. **`getNotificationPermissionStatus()`**
|
|
- **Current:** Direct `UNUserNotificationCenter` access
|
|
- **Target:** Create `PermissionService.getStatus()` (or use existing pattern)
|
|
- **Change:** Extract to service, delegate
|
|
- **Files:** `DailyNotificationPlugin.swift` (~37 lines → ~5 lines)
|
|
|
|
### Background Task Status (Read-Only)
|
|
|
|
2. **`getBackgroundTaskStatus()`**
|
|
- **Current:** Direct `BGTaskScheduler` access
|
|
- **Target:** `DailyNotificationBackgroundTaskManager.getStatus()`
|
|
- **Change:** Replace implementation with service call
|
|
- **Files:** `DailyNotificationPlugin.swift` (~18 lines → ~5 lines)
|
|
|
|
### Scheduling Queries (Read-Only)
|
|
|
|
3. **`getNextScheduledNotificationTime()`**
|
|
- **Current:** Direct scheduler access
|
|
- **Target:** `DailyNotificationScheduler.getNextTime()`
|
|
- **Change:** Replace implementation with service call
|
|
- **Files:** `DailyNotificationPlugin.swift` (~29 lines → ~5 lines)
|
|
|
|
### Content & History (Read-Only)
|
|
|
|
4. **`getLastNotification()`**
|
|
- **Current:** Direct storage access
|
|
- **Target:** `DailyNotificationStorage.getLastNotification()`
|
|
- **Change:** Replace storage access with service call
|
|
- **Files:** `DailyNotificationPlugin.swift` (~38 lines → ~5 lines)
|
|
|
|
5. **`getScheduledReminders()`**
|
|
- **Current:** Direct UserDefaults access
|
|
- **Target:** `DailyNotificationStorage.getReminders()`
|
|
- **Change:** Replace UserDefaults access with storage service call
|
|
- **Files:** `DailyNotificationPlugin.swift` (~24 lines → ~5 lines)
|
|
|
|
---
|
|
|
|
## Implementation Steps
|
|
|
|
### Step 1: Verify Service Methods Exist
|
|
|
|
- [ ] Check `NotificationStatusChecker.getComprehensiveStatus()` exists
|
|
- [ ] Check `PermissionManager.checkNotificationPermission()` exists
|
|
- [ ] Check `DailyNotificationExactAlarmManager.getStatus()` exists
|
|
- [ ] Check `ChannelManager.isChannelEnabled()` exists
|
|
- [ ] Check `DailyNotificationScheduler.isScheduled()` exists
|
|
- [ ] Check `DailyNotificationScheduler.getNextAlarmTime()` exists
|
|
- [ ] Check `DailyNotificationStorage.getContentCache()` exists
|
|
- [ ] Check iOS service methods exist or need creation
|
|
|
|
### Step 2: Create Service Instances (if needed)
|
|
|
|
- [ ] Ensure plugin has service instances as private properties
|
|
- [ ] Initialize services in `load()` method
|
|
- [ ] Add null checks where appropriate
|
|
|
|
### Step 3: Refactor Android Methods
|
|
|
|
- [ ] Replace `getNotificationStatus()` implementation
|
|
- [ ] Replace `checkStatus()` implementation
|
|
- [ ] Replace `checkPermissionStatus()` implementation
|
|
- [ ] Replace `checkPermissions()` implementation
|
|
- [ ] Replace `getExactAlarmStatus()` implementation
|
|
- [ ] Replace `checkExactAlarmPermission()` implementation
|
|
- [ ] Replace `isChannelEnabled()` implementation
|
|
- [ ] Replace `isAlarmScheduled()` implementation
|
|
- [ ] Replace `getNextAlarmTime()` implementation
|
|
- [ ] Replace `getContentCache()` implementation
|
|
|
|
### Step 4: Refactor iOS Methods
|
|
|
|
- [ ] Replace `getNotificationPermissionStatus()` implementation
|
|
- [ ] Replace `getBackgroundTaskStatus()` implementation
|
|
- [ ] Replace `getNextScheduledNotificationTime()` implementation
|
|
- [ ] Replace `getLastNotification()` implementation
|
|
- [ ] Replace `getScheduledReminders()` implementation
|
|
|
|
### Step 5: Testing
|
|
|
|
- [ ] Run Android unit tests
|
|
- [ ] Run iOS unit tests
|
|
- [ ] Run integration tests
|
|
- [ ] Manual smoke test on both platforms
|
|
- [ ] Verify no behavior changes
|
|
|
|
### Step 6: Verification
|
|
|
|
- [ ] Run `./ci/run.sh` (must pass)
|
|
- [ ] Check plugin class line count reduction
|
|
- [ ] Verify service methods are being called
|
|
- [ ] Update progress docs
|
|
|
|
---
|
|
|
|
## Expected Outcomes
|
|
|
|
### Metrics
|
|
|
|
- **Android plugin:** ~400-500 lines removed
|
|
- **iOS plugin:** ~150-200 lines removed
|
|
- **Total reduction:** ~550-700 lines across both platforms
|
|
- **Test coverage:** Maintained (no behavior changes)
|
|
|
|
### Benefits
|
|
|
|
- ✅ Plugin classes become thinner
|
|
- ✅ Business logic moves to testable services
|
|
- ✅ No breaking API changes
|
|
- ✅ Lower risk (read-only operations)
|
|
|
|
---
|
|
|
|
## Rollback Plan
|
|
|
|
If issues arise:
|
|
|
|
1. Revert commits for this batch
|
|
2. Service methods remain unchanged (no risk)
|
|
3. Plugin methods can be restored from git history
|
|
|
|
---
|
|
|
|
## Next Batch
|
|
|
|
After Batch 1 completes successfully:
|
|
|
|
- **Batch 2:** Validation + Delegation methods (input validation, then delegate)
|
|
- **Batch 3:** Glue methods (orchestration across multiple services)
|
|
|