Skip to content

Commit 040876d

Browse files
committed
refactor: 위젯 동기화 트리거를 앱이 백그라운드로 내려갔을때로 축소
1 parent cd26441 commit 040876d

9 files changed

Lines changed: 19 additions & 43 deletions

DevLog/App/Assembler/DataAssembler.swift

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,7 @@ final class DataAssembler: Assembler {
2929
container.register(TodoRepository.self) {
3030
TodoRepositoryImpl(
3131
todoService: container.resolve(TodoService.self),
32-
todoCategoryService: container.resolve(TodoCategoryService.self),
33-
widgetSyncEventBus: container.resolve(WidgetSyncEventBus.self)
32+
todoCategoryService: container.resolve(TodoCategoryService.self)
3433
)
3534
}
3635

@@ -98,8 +97,7 @@ final class DataAssembler: Assembler {
9897
UserPreferencesRepositoryImpl(
9998
store: container.resolve(UserDefaultsStore.self),
10099
themeStore: container.resolve(ThemeStore.self),
101-
widgetSnapshotPreferenceStore: container.resolve(WidgetSnapshotPreferenceStore.self),
102-
widgetSyncEventBus: container.resolve(WidgetSyncEventBus.self)
100+
widgetSnapshotPreferenceStore: container.resolve(WidgetSnapshotPreferenceStore.self)
103101
)
104102
}
105103
}

DevLog/App/DevLogApp.swift

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import SwiftUI
1111
struct DevLogApp: App {
1212
@UIApplicationDelegateAdaptor(AppDelegate.self) var delegate
1313
@Environment(\.diContainer) var container: DIContainer
14+
@Environment(\.scenePhase) var scenePhase
1415

1516
init() {
1617
AppAssembler().assemble(AppDIContainer.shared)
@@ -24,6 +25,10 @@ struct DevLogApp: App {
2425
systemThemeUseCase: container.resolve(ObserveSystemThemeUseCase.self)
2526
))
2627
.autocorrectionDisabled()
28+
.onChange(of: scenePhase) { _, phase in
29+
guard phase == .background else { return }
30+
container.resolve(WidgetSyncEventBus.self).publish(.syncRequested)
31+
}
2732
}
2833
}
2934
}

DevLog/Data/Repository/TodoRepositoryImpl.swift

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,13 @@ import Foundation
1010
final class TodoRepositoryImpl: TodoRepository {
1111
private let todoService: TodoService
1212
private let todoCategoryService: TodoCategoryService
13-
private let widgetSyncEventBus: WidgetSyncEventBus
1413

1514
init(
1615
todoService: TodoService,
17-
todoCategoryService: TodoCategoryService,
18-
widgetSyncEventBus: WidgetSyncEventBus
16+
todoCategoryService: TodoCategoryService
1917
) {
2018
self.todoService = todoService
2119
self.todoCategoryService = todoCategoryService
22-
self.widgetSyncEventBus = widgetSyncEventBus
2320
}
2421

2522
func fetchTodos(_ query: TodoQuery, cursor: TodoCursor?) async throws -> TodoPage {
@@ -92,17 +89,14 @@ final class TodoRepositoryImpl: TodoRepository {
9289
func upsertTodo(_ todo: Todo) async throws {
9390
let request = TodoRequest.fromDomain(todo)
9491
try await todoService.upsertTodo(request: request)
95-
widgetSyncEventBus.publish(.todoDataChanged)
9692
}
9793

9894
func deleteTodo(_ todoId: String) async throws {
9995
try await todoService.deleteTodo(todoId: todoId)
100-
widgetSyncEventBus.publish(.todoDataChanged)
10196
}
10297

10398
func undoDeleteTodo(_ todoId: String) async throws {
10499
try await todoService.undoDeleteTodo(todoId: todoId)
105-
widgetSyncEventBus.publish(.todoDataChanged)
106100
}
107101
}
108102

DevLog/Data/Repository/UserPreferencesRepositoryImpl.swift

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,18 +20,15 @@ final class UserPreferencesRepositoryImpl: UserPreferencesRepository {
2020
private let store: UserDefaultsStore
2121
private let themeStore: ThemeStore
2222
private let widgetSnapshotPreferenceStore: WidgetSnapshotPreferenceStore
23-
private let widgetSyncEventBus: WidgetSyncEventBus
2423

2524
init(
2625
store: UserDefaultsStore,
2726
themeStore: ThemeStore,
28-
widgetSnapshotPreferenceStore: WidgetSnapshotPreferenceStore,
29-
widgetSyncEventBus: WidgetSyncEventBus
27+
widgetSnapshotPreferenceStore: WidgetSnapshotPreferenceStore
3028
) {
3129
self.store = store
3230
self.themeStore = themeStore
3331
self.widgetSnapshotPreferenceStore = widgetSnapshotPreferenceStore
34-
self.widgetSyncEventBus = widgetSyncEventBus
3532
themeStore.send(systemTheme())
3633
}
3734

@@ -93,7 +90,6 @@ final class UserPreferencesRepositoryImpl: UserPreferencesRepository {
9390

9491
func setHeatmapActivityTypes(_ activityTypes: [String]) {
9592
widgetSnapshotPreferenceStore.setHeatmapActivityTypes(activityTypes)
96-
widgetSyncEventBus.publish(.heatmapActivityKindsChanged)
9793
}
9894

9995
func todayDisplayOptions() -> TodayDisplayOptions {
@@ -102,6 +98,5 @@ final class UserPreferencesRepositoryImpl: UserPreferencesRepository {
10298

10399
func setTodayDisplayOptions(_ options: TodayDisplayOptions) {
104100
widgetSnapshotPreferenceStore.setTodayDisplayOptions(options)
105-
widgetSyncEventBus.publish(.todayDisplayOptionsChanged)
106101
}
107102
}

DevLog/Widget/Common/WidgetSyncEvent.swift

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,5 @@
66
//
77

88
enum WidgetSyncEvent: Equatable {
9-
case todoDataChanged
10-
case todayDisplayOptionsChanged
11-
case heatmapActivityKindsChanged
9+
case syncRequested
1210
}

DevLog/Widget/Sync/WidgetSyncEventHandler.swift

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -34,21 +34,13 @@ final class WidgetSyncEventHandler {
3434
private extension WidgetSyncEventHandler {
3535
func handle(_ event: WidgetSyncEvent) {
3636
switch event {
37-
case .todoDataChanged:
37+
case .syncRequested:
3838
Task { [weak self] in
3939
guard let self else { return }
4040
async let todaySnapshot: Void = updateTodayWidgetSnapshot()
4141
async let heatmapSnapshot: Void = updateHeatmapWidgetSnapshot()
4242
_ = await (todaySnapshot, heatmapSnapshot)
4343
}
44-
case .todayDisplayOptionsChanged:
45-
Task { [weak self] in
46-
await self?.updateTodayWidgetSnapshot()
47-
}
48-
case .heatmapActivityKindsChanged:
49-
Task { [weak self] in
50-
await self?.updateHeatmapWidgetSnapshot()
51-
}
5244
}
5345
}
5446

DevLog_Unit/Widget/WidgetSyncEventBusTests.swift

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,9 @@ struct WidgetSyncEventBusTests {
1919
receivedEvents.append(event)
2020
}
2121

22-
bus.publish(.todoDataChanged)
23-
bus.publish(.todayDisplayOptionsChanged)
22+
bus.publish(.syncRequested)
2423

25-
#expect(receivedEvents == [
26-
.todoDataChanged,
27-
.todayDisplayOptionsChanged
28-
])
24+
#expect(receivedEvents == [.syncRequested])
2925
_ = cancellable
3026
}
3127
}

DevLog_Unit/Widget/WidgetSyncEventHandlerTests.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ import Testing
1010
@testable import DevLog
1111

1212
struct WidgetSyncEventHandlerTests {
13-
@Test("Todo 데이터 변경 이벤트는 Today와 Heatmap 스냅샷을 갱신한다")
14-
func todo_데이터_변경_이벤트는_today와_heatmap_스냅샷을_갱신한다() async throws {
13+
@Test("위젯 동기화 요청 이벤트는 Today와 Heatmap 스냅샷을 갱신한다")
14+
func 위젯_동기화_요청_이벤트는_today와_heatmap_스냅샷을_갱신한다() async throws {
1515
let calendar = Calendar.current
1616
let now = Date()
1717
let quarterStart = calendar.startOfQuarter(for: now)
@@ -32,7 +32,7 @@ struct WidgetSyncEventHandlerTests {
3232
]
3333
)
3434

35-
fixture.bus.publish(.todoDataChanged)
35+
fixture.bus.publish(.syncRequested)
3636

3737
let todaySnapshot = try await loadTodaySnapshot(from: fixture.snapshotStore)
3838
let heatmapSnapshot = try await loadHeatmapSnapshot(from: fixture.snapshotStore)

DevLog_Unit/Widget/WidgetSyncEventTests.swift

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,8 @@ import Testing
1010
@testable import DevLog
1111

1212
struct WidgetSyncEventTests {
13-
@Test("위젯 동기화 이벤트는 변경 원인만 표현한다")
14-
func 위젯_동기화_이벤트는_변경_원인만_표현한다() {
15-
#expect(WidgetSyncEvent.todoDataChanged == .todoDataChanged)
16-
#expect(WidgetSyncEvent.todayDisplayOptionsChanged == .todayDisplayOptionsChanged)
17-
#expect(WidgetSyncEvent.heatmapActivityKindsChanged == .heatmapActivityKindsChanged)
13+
@Test("위젯 동기화 이벤트는 동기화 요청만 표현한다")
14+
func 위젯_동기화_이벤트는_동기화_요청만_표현한다() {
15+
#expect(WidgetSyncEvent.syncRequested == .syncRequested)
1816
}
1917
}

0 commit comments

Comments
 (0)