# Priority 2.1: Method → Service Mapping **Purpose:** Map plugin methods to existing services for delegation refactoring. **Owner:** Development Team **Last Updated:** 2025-12-23 **Status:** mapping **Baseline:** See `docs/progress/00-STATUS.md` --- ## Mapping Structure For each plugin method, document: - **Plugin Method**: Method name and signature - **Target Service**: Existing service class - **Service Method**: Method to call (or create if needed) - **Delegation Type**: `pure` | `validation` | `glue` | `needs-service` - **Notes**: Special considerations, state requirements, edge cases --- ## Android: `DailyNotificationPlugin.kt` ### Configuration & Setup | Plugin Method | Target Service | Service Method | Type | Notes | |--------------|---------------|----------------|------|-------| | `configure()` | `TimeSafariIntegrationManager` | `configure(...)` | glue | Needs integration manager setup | | `load()` | Multiple | Various | glue | Initialization orchestration | | `getDatabase()` | `DailyNotificationDatabase` | `getDatabase(context)` | pure | Direct access, keep as-is | ### Permissions | Plugin Method | Target Service | Service Method | Type | Notes | |--------------|---------------|----------------|------|-------| | `checkPermissionStatus()` | `PermissionManager` | `checkNotificationPermission()` | pure | Direct delegation | | `checkPermissions()` | `PermissionManager` | `checkAllPermissions()` | pure | Override, delegate to manager | | `requestNotificationPermissions()` | `PermissionManager` | `requestNotificationPermission()` | pure | Direct delegation | | `requestPermissions()` | `PermissionManager` | `requestAllPermissions()` | pure | Override, delegate to manager | | `handleRequestPermissionsResult()` | `PermissionManager` | `handlePermissionResult()` | pure | Delegate result handling | ### Exact Alarm (Android 12+) | Plugin Method | Target Service | Service Method | Type | Notes | |--------------|---------------|----------------|------|-------| | `getExactAlarmStatus()` | `DailyNotificationExactAlarmManager` | `getStatus()` | pure | Direct delegation | | `checkExactAlarmPermission()` | `DailyNotificationExactAlarmManager` | `checkPermission()` | pure | Direct delegation | | `requestExactAlarmPermission()` | `DailyNotificationExactAlarmManager` | `requestPermission()` | validation | May need activity context | | `openExactAlarmSettings()` | `DailyNotificationExactAlarmManager` | `openSettings()` | validation | Needs activity context | | `canScheduleExactAlarms()` | `DailyNotificationExactAlarmManager` | `canSchedule()` | pure | Private helper, move to service | | `canRequestExactAlarmPermission()` | `DailyNotificationExactAlarmManager` | `canRequest()` | pure | Private helper, move to service | ### Notification Channels | Plugin Method | Target Service | Service Method | Type | Notes | |--------------|---------------|----------------|------|-------| | `isChannelEnabled()` | `ChannelManager` | `isChannelEnabled(channelId)` | pure | Direct delegation | | `openChannelSettings()` | `ChannelManager` | `openSettings(channelId)` | validation | Needs activity context | ### Status & Health | Plugin Method | Target Service | Service Method | Type | Notes | |--------------|---------------|----------------|------|-------| | `getNotificationStatus()` | `NotificationStatusChecker` | `getComprehensiveStatus()` | pure | Direct delegation | | `checkStatus()` | `NotificationStatusChecker` | `getComprehensiveStatus()` | pure | Alias, delegate to checker | ### Scheduling | Plugin Method | Target Service | Service Method | Type | Notes | |--------------|---------------|----------------|------|-------| | `scheduleContentFetch()` | `TimeSafariIntegrationManager` | `scheduleFetch(...)` | glue | Integration orchestration | | `scheduleDailyNotification()` | `DailyNotificationScheduler` | `schedule(...)` | validation | Input validation, then delegate | | `scheduleUserNotification()` | `DailyNotificationScheduler` | `scheduleUserNotification(...)` | validation | Input validation, then delegate | | `scheduleDualNotification()` | `TimeSafariIntegrationManager` | `scheduleDual(...)` | glue | Complex orchestration | | `getDualScheduleStatus()` | `TimeSafariIntegrationManager` | `getDualStatus(...)` | pure | Direct delegation | | `scheduleDailyReminder()` | `DailyReminderManager` | `schedule(...)` | validation | Input validation, then delegate | | `isAlarmScheduled()` | `DailyNotificationScheduler` | `isScheduled(...)` | pure | Direct delegation | | `getNextAlarmTime()` | `DailyNotificationScheduler` | `getNextAlarmTime()` | pure | Direct delegation | | `testAlarm()` | `DailyNotificationScheduler` | `scheduleTest(...)` | validation | Test helper, validate input | ### Content & Cache | Plugin Method | Target Service | Service Method | Type | Notes | |--------------|---------------|----------------|------|-------| | `getContentCache()` | `DailyNotificationStorage` | `getContentCache(id)` | pure | Direct delegation | | `configureNativeFetcher()` | `NativeNotificationContentFetcher` | `registerNativeFetcher(...)` | pure | Static registry, keep as-is | ### Schedule Management (CRUD) | Plugin Method | Target Service | Service Method | Type | Notes | |--------------|---------------|----------------|------|-------| | `getSchedules()` | `DailyNotificationStorage` | `getAllSchedules()` | pure | Direct delegation | | `getSchedule(id)` | `DailyNotificationStorage` | `getSchedule(id)` | pure | Direct delegation | | `getSchedulesWithStatus()` | `DailyNotificationStorage` | `getSchedulesWithStatus()` | glue | Combines storage + scheduler status | | `createSchedule()` | `DailyNotificationStorage` | `createSchedule(...)` | validation | Validate input, delegate | | `updateSchedule()` | `DailyNotificationStorage` | `updateSchedule(...)` | validation | Validate input, delegate | | `deleteSchedule()` | `DailyNotificationStorage` | `deleteSchedule(id)` | validation | Validate input, delegate | | `enableSchedule()` | `DailyNotificationStorage` | `enableSchedule(id, enabled)` | validation | Validate input, delegate | ### Callbacks | Plugin Method | Target Service | Service Method | Type | Notes | |--------------|---------------|----------------|------|-------| | `registerCallback()` | `DailyNotificationStorage` | `registerCallback(...)` | validation | Validate input, delegate | ### Utilities | Plugin Method | Target Service | Service Method | Type | Notes | |--------------|---------------|----------------|------|-------| | `cancelAllNotifications()` | `DailyNotificationScheduler` | `cancelAll()` | pure | Direct delegation | | `updateStarredPlans()` | `TimeSafariIntegrationManager` | `updateStarredPlans(...)` | glue | Integration-specific | | `injectInvalidTestData()` | `DailyNotificationStorage` | `injectTestData(...)` | validation | Test helper, validate input | --- ## iOS: `DailyNotificationPlugin.swift` ### Configuration & Setup | Plugin Method | Target Service | Service Method | Type | Notes | |--------------|---------------|----------------|------|-------| | `configure()` | `DailyNotificationStorage` | `configure(...)` | validation | Validate input, delegate | | `load()` | Multiple | Various | glue | Initialization orchestration | | `setupBackgroundTasks()` | `DailyNotificationBackgroundTaskManager` | `registerTasks()` | pure | Direct delegation | ### Permissions | Plugin Method | Target Service | Service Method | Type | Notes | |--------------|---------------|----------------|------|-------| | `checkPermissionStatus()` | `UNUserNotificationCenter` | `getNotificationSettings()` | validation | Parse settings, format response | | `requestNotificationPermissions()` | `UNUserNotificationCenter` | `requestAuthorization(...)` | validation | Handle async result | | `getNotificationPermissionStatus()` | `UNUserNotificationCenter` | `getNotificationSettings()` | validation | Parse settings, format response | | `requestNotificationPermission()` | `UNUserNotificationCenter` | `requestAuthorization(...)` | validation | Handle async result | ### Background Tasks | Plugin Method | Target Service | Service Method | Type | Notes | |--------------|---------------|----------------|------|-------| | `getBackgroundTaskStatus()` | `DailyNotificationBackgroundTaskManager` | `getStatus()` | pure | Direct delegation | | `handleBackgroundFetch()` | `DailyNotificationBackgroundTaskManager` | `handleFetch(task)` | glue | Task completion handling | | `handleBackgroundNotify()` | `DailyNotificationBackgroundTaskManager` | `handleNotify(task)` | glue | Task completion handling | | `checkForMissedBGTask()` | `DailyNotificationBackgroundTaskManager` | `checkMissed()` | pure | Direct delegation | | `scheduleBackgroundFetch(config)` | `DailyNotificationBackgroundTaskManager` | `scheduleFetch(...)` | validation | Validate config, delegate | | `scheduleBackgroundFetch(time)` | `DailyNotificationBackgroundTaskManager` | `scheduleFetch(time)` | pure | Direct delegation | ### Scheduling | Plugin Method | Target Service | Service Method | Type | Notes | |--------------|---------------|----------------|------|-------| | `scheduleContentFetch()` | `DailyNotificationScheduler` | `scheduleFetch(...)` | validation | Validate input, delegate | | `scheduleUserNotification()` | `DailyNotificationScheduler` | `scheduleUserNotification(...)` | validation | Validate input, delegate | | `scheduleDualNotification()` | `DailyNotificationScheduler` | `scheduleDual(...)` | glue | Complex orchestration | | `getDualScheduleStatus()` | `DailyNotificationScheduler` | `getDualStatus(...)` | pure | Direct delegation | | `scheduleDailyReminder()` | `DailyNotificationStorage` | `storeReminder(...)` | validation | Validate input, delegate | | `cancelDailyReminder()` | `DailyNotificationStorage` | `removeReminder(id)` | validation | Validate input, delegate | | `getScheduledReminders()` | `DailyNotificationStorage` | `getReminders()` | pure | Direct delegation | | `updateDailyReminder()` | `DailyNotificationStorage` | `updateReminder(...)` | validation | Validate input, delegate | | `scheduleDailyNotification()` | `DailyNotificationScheduler` | `schedule(...)` | validation | Validate input, delegate | | `getNextScheduledNotificationTime()` | `DailyNotificationScheduler` | `getNextTime()` | pure | Direct delegation | | `calculateNextScheduledTime()` | `DailyNotificationScheduler` | `calculateNextTime(...)` | pure | Private helper, move to service | ### Content & History | Plugin Method | Target Service | Service Method | Type | Notes | |--------------|---------------|----------------|------|-------| | `getLastNotification()` | `DailyNotificationStorage` | `getLastNotification()` | pure | Direct delegation | | `getPendingNotifications()` | `UNUserNotificationCenter` | `getPendingNotificationRequests()` | validation | Parse requests, format response | ### Status & Health | Plugin Method | Target Service | Service Method | Type | Notes | |--------------|---------------|----------------|------|-------| | `getNotificationStatus()` | `DailyNotificationStateActor` | `getStatus()` | glue | Combines multiple sources | | `getHealthStatus()` | `DailyNotificationStateActor` | `getHealthStatus()` | pure | Private helper, move to service | ### Settings & Channels | Plugin Method | Target Service | Service Method | Type | Notes | |--------------|---------------|----------------|------|-------| | `isChannelEnabled()` | `UNUserNotificationCenter` | `getNotificationSettings()` | validation | Parse settings, check channel | | `openChannelSettings()` | `UIApplication` | `openSettingsURLString` | validation | Needs app context | | `openNotificationSettings()` | `UIApplication` | `openSettingsURLString` | validation | Needs app context | | `openBackgroundAppRefreshSettings()` | `UIApplication` | `openSettingsURLString` | validation | Needs app context | | `updateSettings()` | `DailyNotificationStorage` | `updateSettings(...)` | validation | Validate input, delegate | ### Utilities | Plugin Method | Target Service | Service Method | Type | Notes | |--------------|---------------|----------------|------|-------| | `cancelAllNotifications()` | `UNUserNotificationCenter` | `removeAllPendingNotificationRequests()` | pure | Direct delegation | | `handleNotificationDelivery()` | `DailyNotificationReactivationManager` | `handleDelivery(...)` | glue | Notification observer | | `processRollover()` | `DailyNotificationReactivationManager` | `processRollover(...)` | glue | Private helper, move to service | | `formatTime()` | Utility | `formatTime(timestamp)` | pure | Private helper, move to utility | ### Storage Helpers (UserDefaults) | Plugin Method | Target Service | Service Method | Type | Notes | |--------------|---------------|----------------|------|-------| | `storeReminderInUserDefaults()` | `DailyNotificationStorage` | `storeReminder(...)` | pure | Private helper, delegate | | `removeReminderFromUserDefaults()` | `DailyNotificationStorage` | `removeReminder(id)` | pure | Private helper, delegate | | `getRemindersFromUserDefaults()` | `DailyNotificationStorage` | `getReminders()` | pure | Private helper, delegate | | `updateReminderInUserDefaults()` | `DailyNotificationStorage` | `updateReminder(...)` | pure | Private helper, delegate | --- ## Delegation Type Definitions - **pure**: Direct delegation, no transformation needed - **validation**: Input validation required before delegation - **glue**: Orchestrates multiple services or handles platform-specific wiring - **needs-service**: Service method doesn't exist yet, needs to be created --- ## Next Steps 1. ✅ Mapping complete (this document) 2. ⏭️ Review mapping for accuracy 3. ⏭️ Identify first two refactor batches (see `P2.1-BATCH-1.md` and `P2.1-BATCH-2.md`) 4. ⏭️ Begin Batch 1 implementation