From d2fa57ee5bc289c7c63c2a0ea3bb1f30757b955e Mon Sep 17 00:00:00 2001 From: opficdev <162981733+opficdev@users.noreply.github.com> Date: Sun, 28 Jun 2026 15:57:12 +0900 Subject: [PATCH 01/12] =?UTF-8?q?chore:=20=EC=BB=A4=EB=B0=8B=20=EB=A9=94?= =?UTF-8?q?=EC=8B=9C=EC=A7=80=20=EC=A7=80=EC=B9=A8=20=EB=B3=B4=EA=B0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AGENTS.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/AGENTS.md b/AGENTS.md index 55f640f9..6895f826 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -107,6 +107,16 @@ These may proceed after inspection when they do not change architecture meaning: - Do not claim architecture work is complete without checking the diff scope. - Do not spend time on unrelated generated project or lockfile churn. Keep generated workspace/project and `Package.resolved` changes out of source control unless they are part of an explicitly approved dependency-lock policy. +## Git and commit rules + +- Commit messages must start with a short prefix used by recent local commits, such as `feat`, `fix`, `refactor`, `chore`, `test`, `docs`, `ui`, or `rollback`. +- Write commit message prose in Korean. +- Keep implementation names such as `ToastPresenter`, `toastHost`, `MainView`, `DevLogPresentation`, file paths, commands, branch names, and commit hashes in their original form. +- Do not translate implementation names into Korean unless the user explicitly asks for a user-facing Korean label. +- Do not write a commit message body. +- When checking recent commit-message style, do not infer local commit style from GitHub merge or squash-merge subjects such as `[#123] ... (#456)`. +- For squash-merge commits, inspect the commit body and use the individual bullet commit messages as the style reference. + ## Canonical project rules - DevLog-specific working rules belong in this repository, not in global agent memory. From e9463ed106dea6a3c44525d1ec3d4e97438016f6 Mon Sep 17 00:00:00 2001 From: opficdev <162981733+opficdev@users.noreply.github.com> Date: Sun, 28 Jun 2026 21:44:53 +0900 Subject: [PATCH 02/12] =?UTF-8?q?feat:=20=EC=95=B1=EC=9D=B4=20=EB=B0=B1?= =?UTF-8?q?=EA=B7=B8=EB=9D=BC=EC=9A=B4=EB=93=9C=EB=A1=9C=20=EB=84=98?= =?UTF-8?q?=EC=96=B4=EA=B0=88=20=EC=8B=9C=20=EB=82=A0=EC=A7=9C=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD=EC=97=90=20=EB=8C=80=ED=95=9C=20=EC=8B=B1=ED=81=AC=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Application/DevLogApp/Sources/App/DevLogApp.swift | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/Application/DevLogApp/Sources/App/DevLogApp.swift b/Application/DevLogApp/Sources/App/DevLogApp.swift index 3b434735..9adc8397 100644 --- a/Application/DevLogApp/Sources/App/DevLogApp.swift +++ b/Application/DevLogApp/Sources/App/DevLogApp.swift @@ -18,6 +18,7 @@ struct DevLogApp: App { @Environment(\.diContainer) var container: DIContainer @Environment(\.scenePhase) var scenePhase @State private var windowEvent = TodoEditorWindowEvent() + @State private var syncDate = Date() init() { AppAssembler().assemble(AppDIContainer.shared) @@ -38,6 +39,17 @@ struct DevLogApp: App { .autocorrectionDisabled() .onChange(of: scenePhase) { _, phase in guard phase == .background else { return } + let now = Date() + + // 위젯 갱신은 앱 실행 시 로그인 세션 흐름에서 한 번 요청된다. (WidgetSessionSyncHandler.swift:47) + // 따라서 이 백그라운드 트리거는 매번 최신 데이터를 다시 가져오기 위한 경로가 아니라 + // 앱이 실행된 상태로 날짜가 넘어가서 Today widget의 분류 기준일이 바뀌었을 때만 + // 기존 위젯 갱신 흐름을 보조로 허용하기 위한 안전장치다. + // 같은 날의 첫 백그라운드 진입을 막는 것은 의도된 동작이며 + // 앱이 꺼져 있는 동안 날짜가 바뀐 경우는 다음 실행 시 세션 기반 갱신 요청이 담당한다. + guard !Calendar.current.isDate(syncDate, inSameDayAs: now) else { return } + + syncDate = now container.resolve(WidgetSyncEventBus.self).publish(.syncRequested) } } From 4ba0432877706095229a48c8f3cc333108a6a3eb Mon Sep 17 00:00:00 2001 From: opficdev <162981733+opficdev@users.noreply.github.com> Date: Sun, 28 Jun 2026 22:41:58 +0900 Subject: [PATCH 03/12] =?UTF-8?q?fix:=20Todo=20=EB=B3=80=EA=B2=BD=20?= =?UTF-8?q?=EC=8B=9C=20=EC=9C=84=EC=A0=AF=20=EB=8F=99=EA=B8=B0=ED=99=94=20?= =?UTF-8?q?=EC=9A=94=EC=B2=AD=EC=9D=84=20=EB=B0=B1=EA=B7=B8=EB=9D=BC?= =?UTF-8?q?=EC=9A=B4=EB=93=9C=EB=A1=9C=20=EC=A7=80=EC=97=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DevLogApp/Sources/App/DevLogApp.swift | 21 +++++++++------ .../Repository/TodoRepositoryImpl.swift | 6 ++--- .../Sources/Widget/WidgetSyncEventBus.swift | 2 ++ .../Repository/TodoRepositoryImplTests.swift | 26 +++++++++++-------- .../UserPreferencesRepositoryImplTests.swift | 6 +++++ .../Widget/WidgetSyncEventBusImpl.swift | 18 +++++++++++++ .../WidgetSessionSyncHandlerTests.swift | 6 +++++ .../Widget/WidgetSyncEventBusTests.swift | 12 +++++++++ 8 files changed, 75 insertions(+), 22 deletions(-) diff --git a/Application/DevLogApp/Sources/App/DevLogApp.swift b/Application/DevLogApp/Sources/App/DevLogApp.swift index 9adc8397..2d8d8056 100644 --- a/Application/DevLogApp/Sources/App/DevLogApp.swift +++ b/Application/DevLogApp/Sources/App/DevLogApp.swift @@ -40,17 +40,22 @@ struct DevLogApp: App { .onChange(of: scenePhase) { _, phase in guard phase == .background else { return } let now = Date() + let bus = container.resolve(WidgetSyncEventBus.self) // 위젯 갱신은 앱 실행 시 로그인 세션 흐름에서 한 번 요청된다. (WidgetSessionSyncHandler.swift:47) - // 따라서 이 백그라운드 트리거는 매번 최신 데이터를 다시 가져오기 위한 경로가 아니라 - // 앱이 실행된 상태로 날짜가 넘어가서 Today widget의 분류 기준일이 바뀌었을 때만 - // 기존 위젯 갱신 흐름을 보조로 허용하기 위한 안전장치다. - // 같은 날의 첫 백그라운드 진입을 막는 것은 의도된 동작이며 - // 앱이 꺼져 있는 동안 날짜가 바뀐 경우는 다음 실행 시 세션 기반 갱신 요청이 담당한다. - guard !Calendar.current.isDate(syncDate, inSameDayAs: now) else { return } + // Todo 변경 성공 시에는 즉시 fetch하지 않고 WidgetSyncEventBus에 갱신 요청만 남긴다. + // 따라서 같은 날의 백그라운드 진입은 저장된 요청이 있을 때만 기존 syncRequested 흐름을 실행한다. + // 앱이 실행된 상태로 날짜가 넘어간 경우에는 Today widget의 분류 기준일 자체가 바뀌므로, + // 콘텐츠 변경 여부와 관계없이 기존 syncRequested 흐름을 즉시 허용한다. + guard Calendar.current.isDate(syncDate, inSameDayAs: now) else { + syncDate = now + _ = bus.confirmRequest() + bus.publish(.syncRequested) + return + } - syncDate = now - container.resolve(WidgetSyncEventBus.self).publish(.syncRequested) + guard bus.confirmRequest() else { return } + bus.publish(.syncRequested) } } WindowGroup(id: TodoEditorWindowValue.sceneId, for: TodoEditorWindowValue.self) { value in diff --git a/Application/DevLogData/Sources/Repository/TodoRepositoryImpl.swift b/Application/DevLogData/Sources/Repository/TodoRepositoryImpl.swift index 475e3091..9e6f58a5 100644 --- a/Application/DevLogData/Sources/Repository/TodoRepositoryImpl.swift +++ b/Application/DevLogData/Sources/Repository/TodoRepositoryImpl.swift @@ -143,7 +143,7 @@ final class TodoRepositoryImpl: TodoRepository { private func upsertTodo(_ todoRequest: TodoRequest) async throws { do { try await todoService.upsertTodo(request: todoRequest) - widgetSyncEventBus.publish(.syncRequested) + widgetSyncEventBus.request() } catch { throw error.toDomain() } @@ -152,7 +152,7 @@ final class TodoRepositoryImpl: TodoRepository { func deleteTodo(_ todoId: String) async throws { do { try await todoService.deleteTodo(todoId: todoId) - widgetSyncEventBus.publish(.syncRequested) + widgetSyncEventBus.request() todoMutationEventBus.publish(.deleted(todoId)) } catch { throw error.toDomain() @@ -162,7 +162,7 @@ final class TodoRepositoryImpl: TodoRepository { func undoDeleteTodo(_ todoId: String) async throws { do { try await todoService.undoDeleteTodo(todoId: todoId) - widgetSyncEventBus.publish(.syncRequested) + widgetSyncEventBus.request() todoMutationEventBus.publish(.restored(todoId)) } catch { throw error.toDomain() diff --git a/Application/DevLogData/Sources/Widget/WidgetSyncEventBus.swift b/Application/DevLogData/Sources/Widget/WidgetSyncEventBus.swift index 02cf4977..f9b2e9e4 100644 --- a/Application/DevLogData/Sources/Widget/WidgetSyncEventBus.swift +++ b/Application/DevLogData/Sources/Widget/WidgetSyncEventBus.swift @@ -9,5 +9,7 @@ import Combine public protocol WidgetSyncEventBus { func publish(_ event: WidgetSyncEvent) + func request() + func confirmRequest() -> Bool func observe() -> AnyPublisher } diff --git a/Application/DevLogData/Tests/Repository/TodoRepositoryImplTests.swift b/Application/DevLogData/Tests/Repository/TodoRepositoryImplTests.swift index 64d45eb3..aa3ffffc 100644 --- a/Application/DevLogData/Tests/Repository/TodoRepositoryImplTests.swift +++ b/Application/DevLogData/Tests/Repository/TodoRepositoryImplTests.swift @@ -13,8 +13,8 @@ import DevLogDomain @testable import DevLogData struct TodoRepositoryImplTests { - @Test("Todo 변경 성공 시 위젯 동기화와 mutation 이벤트를 발행한다") - func todo_변경_성공_시_위젯_동기화와_mutation_이벤트를_발행한다() async throws { + @Test("Todo 변경 성공 시 위젯 동기화 요청과 mutation 이벤트를 발행한다") + func todo_변경_성공_시_위젯_동기화_요청과_mutation_이벤트를_발행한다() async throws { let fixture = makeFixture() let todo = makeTodo() @@ -22,8 +22,7 @@ struct TodoRepositoryImplTests { try await fixture.repository.deleteTodo(todo.id) try await fixture.repository.undoDeleteTodo(todo.id) - let events = fixture.widgetSyncEventBus.events - #expect(events == [.syncRequested, .syncRequested, .syncRequested]) + #expect(fixture.widgetSyncEventBus.requestCallCount == 3) let mutationEvents = fixture.todoMutationEventBus.publishedEvents() #expect(mutationEvents == [.updated(todo.id), .deleted(todo.id), .restored(todo.id)]) @@ -55,8 +54,7 @@ struct TodoRepositoryImplTests { #expect(error as? TodoRepositoryImplTestsError == .serviceFailed) } - let syncEvents = fixture.widgetSyncEventBus.events - #expect(syncEvents.isEmpty) + #expect(fixture.widgetSyncEventBus.requestCallCount == 0) let mutationEvents = fixture.todoMutationEventBus.publishedEvents() #expect(mutationEvents.isEmpty) @@ -177,14 +175,20 @@ private final class TodoRepositoryMemoryCacheStoreSpy: MemoryCacheStore { } private final class WidgetSyncEventBusSpy: WidgetSyncEventBus { - private(set) var events = [WidgetSyncEvent]() + private(set) var requestCallCount = 0 - func observe() -> AnyPublisher { - Empty().eraseToAnyPublisher() + func publish(_ event: WidgetSyncEvent) { } + + func request() { + requestCallCount += 1 } - func publish(_ event: WidgetSyncEvent) { - events.append(event) + func confirmRequest() -> Bool { + false + } + + func observe() -> AnyPublisher { + Empty().eraseToAnyPublisher() } } diff --git a/Application/DevLogData/Tests/Repository/UserPreferencesRepositoryImplTests.swift b/Application/DevLogData/Tests/Repository/UserPreferencesRepositoryImplTests.swift index 65a0ea8b..29477917 100644 --- a/Application/DevLogData/Tests/Repository/UserPreferencesRepositoryImplTests.swift +++ b/Application/DevLogData/Tests/Repository/UserPreferencesRepositoryImplTests.swift @@ -112,6 +112,12 @@ private final class WidgetSyncEventBusSpy: WidgetSyncEventBus { events.append(event) } + func request() { } + + func confirmRequest() -> Bool { + false + } + func observe() -> AnyPublisher { Empty().eraseToAnyPublisher() } diff --git a/Application/DevLogWidget/Sources/Widget/WidgetSyncEventBusImpl.swift b/Application/DevLogWidget/Sources/Widget/WidgetSyncEventBusImpl.swift index 48abc23f..dfaa4a8b 100644 --- a/Application/DevLogWidget/Sources/Widget/WidgetSyncEventBusImpl.swift +++ b/Application/DevLogWidget/Sources/Widget/WidgetSyncEventBusImpl.swift @@ -6,10 +6,13 @@ // import Combine +import Foundation import DevLogData public final class WidgetSyncEventBusImpl: WidgetSyncEventBus { private let subject = PassthroughSubject() + private let lock = NSLock() + private var isRequested = false public init() { } @@ -17,6 +20,21 @@ public final class WidgetSyncEventBusImpl: WidgetSyncEventBus { subject.send(event) } + public func request() { + lock.lock() + defer { lock.unlock() } + isRequested = true + } + + public func confirmRequest() -> Bool { + lock.lock() + defer { lock.unlock() } + + guard isRequested else { return false } + isRequested = false + return true + } + public func observe() -> AnyPublisher { subject.eraseToAnyPublisher() } diff --git a/Application/DevLogWidget/Tests/Handler/WidgetSessionSyncHandlerTests.swift b/Application/DevLogWidget/Tests/Handler/WidgetSessionSyncHandlerTests.swift index 45c647dc..f433ebb9 100644 --- a/Application/DevLogWidget/Tests/Handler/WidgetSessionSyncHandlerTests.swift +++ b/Application/DevLogWidget/Tests/Handler/WidgetSessionSyncHandlerTests.swift @@ -75,6 +75,12 @@ private final class WidgetSyncEventBusSpy: WidgetSyncEventBus { events.append(event) } + func request() { } + + func confirmRequest() -> Bool { + false + } + func observe() -> AnyPublisher { Empty().eraseToAnyPublisher() } diff --git a/Application/DevLogWidget/Tests/Widget/WidgetSyncEventBusTests.swift b/Application/DevLogWidget/Tests/Widget/WidgetSyncEventBusTests.swift index 188aff90..8a70154e 100644 --- a/Application/DevLogWidget/Tests/Widget/WidgetSyncEventBusTests.swift +++ b/Application/DevLogWidget/Tests/Widget/WidgetSyncEventBusTests.swift @@ -25,4 +25,16 @@ struct WidgetSyncEventBusTests { #expect(receivedEvents == [.syncRequested]) _ = cancellable } + + @Test("WidgetSyncEventBus는 요청 여부를 한 번만 소비한다") + func widgetSyncEventBus는_요청_여부를_한_번만_소비한다() { + let bus = WidgetSyncEventBusImpl() + + #expect(bus.confirmRequest() == false) + + bus.request() + + #expect(bus.confirmRequest()) + #expect(bus.confirmRequest() == false) + } } From 9e98af20e9168ce7e570a09d8b13e478e5051875 Mon Sep 17 00:00:00 2001 From: opficdev <162981733+opficdev@users.noreply.github.com> Date: Sun, 28 Jun 2026 22:52:16 +0900 Subject: [PATCH 04/12] =?UTF-8?q?fix:=20=EC=84=A4=EC=A0=95=EB=90=9C=20?= =?UTF-8?q?=EC=9C=84=EC=A0=AF=20=EA=B8=B0=EC=A4=80=EC=9C=BC=EB=A1=9C=20?= =?UTF-8?q?=EB=8F=99=EA=B8=B0=ED=99=94=20fetch=20=EB=B2=94=EC=9C=84=20?= =?UTF-8?q?=EC=A0=9C=ED=95=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../WidgetConfigurationProvider.swift | 10 ++++ .../Sources/Widget/WidgetAssembler.swift | 6 ++- .../WidgetConfigurationProviderImpl.swift | 25 ++++++++++ .../Widget/WidgetSyncEventHandler.swift | 47 +++++++++++++++++-- .../Widget/WidgetSyncEventHandlerTests.swift | 38 ++++++++++++++- 5 files changed, 119 insertions(+), 7 deletions(-) create mode 100644 Application/DevLogData/Sources/Protocol/WidgetConfigurationProvider.swift create mode 100644 Application/DevLogWidget/Sources/Widget/WidgetConfigurationProviderImpl.swift diff --git a/Application/DevLogData/Sources/Protocol/WidgetConfigurationProvider.swift b/Application/DevLogData/Sources/Protocol/WidgetConfigurationProvider.swift new file mode 100644 index 00000000..395c8749 --- /dev/null +++ b/Application/DevLogData/Sources/Protocol/WidgetConfigurationProvider.swift @@ -0,0 +1,10 @@ +// +// WidgetConfigurationProvider.swift +// DevLogData +// +// Created by opfic on 6/28/26. +// + +public protocol WidgetConfigurationProvider { + func currentWidgetKinds() async throws -> Set +} diff --git a/Application/DevLogWidget/Sources/Widget/WidgetAssembler.swift b/Application/DevLogWidget/Sources/Widget/WidgetAssembler.swift index 4c539136..7d95655d 100644 --- a/Application/DevLogWidget/Sources/Widget/WidgetAssembler.swift +++ b/Application/DevLogWidget/Sources/Widget/WidgetAssembler.swift @@ -20,6 +20,9 @@ public final class WidgetAssembler: Assembler { container.register(WidgetSyncEventBus.self) { WidgetSyncEventBusImpl() } + container.register(WidgetConfigurationProvider.self) { + WidgetConfigurationProviderImpl() + } container.register(WidgetSharedDefaultsStore.self) { WidgetSharedDefaultsStore() } @@ -41,7 +44,8 @@ public final class WidgetAssembler: Assembler { WidgetSyncEventHandler( eventBus: container.resolve(WidgetSyncEventBus.self), repository: container.resolve(WidgetTodoSnapshotRepository.self), - snapshotUpdater: container.resolve(WidgetSnapshotUpdater.self) + snapshotUpdater: container.resolve(WidgetSnapshotUpdater.self), + configurationProvider: container.resolve(WidgetConfigurationProvider.self) ) } container.register(WidgetSessionSyncHandler.self) { diff --git a/Application/DevLogWidget/Sources/Widget/WidgetConfigurationProviderImpl.swift b/Application/DevLogWidget/Sources/Widget/WidgetConfigurationProviderImpl.swift new file mode 100644 index 00000000..93aba401 --- /dev/null +++ b/Application/DevLogWidget/Sources/Widget/WidgetConfigurationProviderImpl.swift @@ -0,0 +1,25 @@ +// +// WidgetConfigurationProviderImpl.swift +// DevLogWidget +// +// Created by opfic on 6/28/26. +// + +import WidgetKit +import DevLogData + +public final class WidgetConfigurationProviderImpl: WidgetConfigurationProvider { + public init() { } + + public func currentWidgetKinds() async throws -> Set { + try await withCheckedThrowingContinuation { continuation in + WidgetCenter.shared.getCurrentConfigurations { result in + continuation.resume( + with: result.map { configurations in + Set(configurations.map(\.kind)) + } + ) + } + } + } +} diff --git a/Application/DevLogWidget/Sources/Widget/WidgetSyncEventHandler.swift b/Application/DevLogWidget/Sources/Widget/WidgetSyncEventHandler.swift index 39a7b1ec..02e48fb9 100644 --- a/Application/DevLogWidget/Sources/Widget/WidgetSyncEventHandler.swift +++ b/Application/DevLogWidget/Sources/Widget/WidgetSyncEventHandler.swift @@ -9,10 +9,12 @@ import Combine import Foundation import DevLogCore import DevLogData +import DevLogWidgetCore public final class WidgetSyncEventHandler { private let repository: WidgetTodoSnapshotRepository private let snapshotUpdater: WidgetSnapshotUpdater + private let configurationProvider: WidgetConfigurationProvider private let pageSize = 100 private let logger = Logger(category: "WidgetSyncEventHandler") private var cancellables = Set() @@ -20,10 +22,12 @@ public final class WidgetSyncEventHandler { public init( eventBus: WidgetSyncEventBus, repository: WidgetTodoSnapshotRepository, - snapshotUpdater: WidgetSnapshotUpdater + snapshotUpdater: WidgetSnapshotUpdater, + configurationProvider: WidgetConfigurationProvider ) { self.repository = repository self.snapshotUpdater = snapshotUpdater + self.configurationProvider = configurationProvider eventBus.observe() .sink { [weak self] event in @@ -40,13 +44,32 @@ private extension WidgetSyncEventHandler { Task { [weak self] in guard let self else { return } let now = Date() - async let todaySnapshot: Void = updateTodayWidgetSnapshot(now: now) - async let heatmapSnapshot: Void = updateHeatmapWidgetSnapshot(now: now) - _ = await (todaySnapshot, heatmapSnapshot) + let targets = await enabledSnapshotTargets() + await withTaskGroup(of: Void.self) { group in + if targets.contains(.today) { + group.addTask { await self.updateTodayWidgetSnapshot(now: now) } + } + if targets.contains(.heatmap) { + group.addTask { await self.updateHeatmapWidgetSnapshot(now: now) } + } + } } } } + func enabledSnapshotTargets() async -> Set { + do { + let kinds = try await configurationProvider.currentWidgetKinds() + return WidgetSnapshotTarget.targets(for: kinds) + } catch { + logger.error( + "Failed to fetch current widget configurations.", + error: error + ) + return Set(WidgetSnapshotTarget.allCases) + } + } + func updateTodayWidgetSnapshot(now: Date) async { do { async let todosWithDueDate = fetchTodayTodos( @@ -143,3 +166,19 @@ private extension WidgetSyncEventHandler { ) } } + +private enum WidgetSnapshotTarget: CaseIterable { + case today + case heatmap + + static func targets(for kinds: Set) -> Set { + var targets = Set() + if kinds.contains(WidgetKind.todayTodo) { + targets.insert(.today) + } + if kinds.contains(WidgetKind.heatmap) { + targets.insert(.heatmap) + } + return targets + } +} diff --git a/Application/DevLogWidget/Tests/Widget/WidgetSyncEventHandlerTests.swift b/Application/DevLogWidget/Tests/Widget/WidgetSyncEventHandlerTests.swift index b7f729e3..ec8c4964 100644 --- a/Application/DevLogWidget/Tests/Widget/WidgetSyncEventHandlerTests.swift +++ b/Application/DevLogWidget/Tests/Widget/WidgetSyncEventHandlerTests.swift @@ -9,6 +9,7 @@ import Foundation import Testing import DevLogCore import DevLogData +import DevLogWidgetCore @testable import DevLogWidget struct WidgetSyncEventHandlerTests { @@ -93,6 +94,28 @@ struct WidgetSyncEventHandlerTests { _ = fixture.handler } + @Test("Today 위젯만 설정되어 있으면 Today 스냅샷만 갱신한다") + func today_위젯만_설정되어_있으면_today_스냅샷만_갱신한다() async throws { + let now = Date() + let fixture = makeFixture(widgetKinds: [WidgetKind.todayTodo]) + + await fixture.repository.setTodos( + todayTodosWithDueDate: [ + makeTodo(id: "today", createdAt: now, dueDate: now) + ] + ) + + fixture.bus.publish(.syncRequested) + + try await waitUntil { + fixture.snapshotUpdater.hasTodayUpdate + } + + #expect(fixture.snapshotUpdater.todayUpdates.first?.todos.map(\.id) == ["today"]) + #expect(fixture.snapshotUpdater.heatmapUpdates.isEmpty) + #expect(Set(await fixture.repository.calledCalls().map(\.sortTarget)) == Set([.dueDate, .updatedAt])) + _ = fixture.handler + } @Test("Heatmap 스냅샷 조회 실패는 Today 스냅샷 갱신을 막지 않는다") func heatmap_스냅샷_조회_실패는_today_스냅샷_갱신을_막지_않는다() async throws { let now = Date() @@ -116,14 +139,18 @@ struct WidgetSyncEventHandlerTests { _ = fixture.handler } - private func makeFixture() -> Fixture { + private func makeFixture( + widgetKinds: Set = [WidgetKind.todayTodo, WidgetKind.heatmap] + ) -> Fixture { let bus = WidgetSyncEventBusImpl() let repository = WidgetTodoSnapshotRepositorySpy() let snapshotUpdater = WidgetSnapshotUpdaterSpy() + let configurationProvider = WidgetConfigurationProviderSpy(widgetKinds: widgetKinds) let handler = WidgetSyncEventHandler( eventBus: bus, repository: repository, - snapshotUpdater: snapshotUpdater + snapshotUpdater: snapshotUpdater, + configurationProvider: configurationProvider ) return Fixture( @@ -161,6 +188,13 @@ private struct Fixture { let handler: WidgetSyncEventHandler } +private struct WidgetConfigurationProviderSpy: WidgetConfigurationProvider { + let widgetKinds: Set + func currentWidgetKinds() async throws -> Set { + widgetKinds + } +} + private actor WidgetTodoSnapshotRepositorySpy: WidgetTodoSnapshotRepository { struct Call { let sortTarget: TodoQuery.SortTarget From f472de20a4979620f68dbb9374104c212f12d313 Mon Sep 17 00:00:00 2001 From: opficdev <162981733+opficdev@users.noreply.github.com> Date: Sun, 28 Jun 2026 23:43:43 +0900 Subject: [PATCH 05/12] =?UTF-8?q?refactor:=20=EC=9C=84=EC=A0=AF=20?= =?UTF-8?q?=EB=8F=99=EA=B8=B0=ED=99=94=20=EC=9A=94=EC=B2=AD=20=EC=83=81?= =?UTF-8?q?=ED=83=9C=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DevLogApp/Sources/App/DevLogApp.swift | 21 +++++------- .../DevLogData/Sources/DataAssembler.swift | 1 - .../Repository/TodoRepositoryImpl.swift | 6 ---- .../Sources/Widget/WidgetSyncEventBus.swift | 2 -- .../Repository/TodoRepositoryImplTests.swift | 34 +++---------------- .../UserPreferencesRepositoryImplTests.swift | 6 ---- .../Widget/WidgetSyncEventBusImpl.swift | 18 ---------- .../WidgetSessionSyncHandlerTests.swift | 6 ---- .../Widget/WidgetSyncEventBusTests.swift | 12 ------- 9 files changed, 12 insertions(+), 94 deletions(-) diff --git a/Application/DevLogApp/Sources/App/DevLogApp.swift b/Application/DevLogApp/Sources/App/DevLogApp.swift index 2d8d8056..ea717e7f 100644 --- a/Application/DevLogApp/Sources/App/DevLogApp.swift +++ b/Application/DevLogApp/Sources/App/DevLogApp.swift @@ -40,22 +40,17 @@ struct DevLogApp: App { .onChange(of: scenePhase) { _, phase in guard phase == .background else { return } let now = Date() - let bus = container.resolve(WidgetSyncEventBus.self) // 위젯 갱신은 앱 실행 시 로그인 세션 흐름에서 한 번 요청된다. (WidgetSessionSyncHandler.swift:47) - // Todo 변경 성공 시에는 즉시 fetch하지 않고 WidgetSyncEventBus에 갱신 요청만 남긴다. - // 따라서 같은 날의 백그라운드 진입은 저장된 요청이 있을 때만 기존 syncRequested 흐름을 실행한다. - // 앱이 실행된 상태로 날짜가 넘어간 경우에는 Today widget의 분류 기준일 자체가 바뀌므로, - // 콘텐츠 변경 여부와 관계없이 기존 syncRequested 흐름을 즉시 허용한다. - guard Calendar.current.isDate(syncDate, inSameDayAs: now) else { - syncDate = now - _ = bus.confirmRequest() - bus.publish(.syncRequested) - return - } + // 따라서 이 백그라운드 트리거는 매번 최신 데이터를 다시 가져오기 위한 경로가 아니라, + // 앱이 실행된 상태로 날짜가 넘어가서 Today widget의 분류 기준일이 바뀌었을 때만 + // 기존 위젯 갱신 흐름을 보조로 허용하기 위한 안전장치다. + // 같은 날의 첫 백그라운드 진입을 막는 것은 의도된 동작이며, + // 앱이 꺼져 있는 동안 날짜가 바뀐 경우는 다음 실행 시 세션 기반 갱신 요청이 담당한다. + guard !Calendar.current.isDate(syncDate, inSameDayAs: now) else { return } - guard bus.confirmRequest() else { return } - bus.publish(.syncRequested) + syncDate = now + container.resolve(WidgetSyncEventBus.self).publish(.syncRequested) } } WindowGroup(id: TodoEditorWindowValue.sceneId, for: TodoEditorWindowValue.self) { value in diff --git a/Application/DevLogData/Sources/DataAssembler.swift b/Application/DevLogData/Sources/DataAssembler.swift index fe176b3b..c2f11acc 100644 --- a/Application/DevLogData/Sources/DataAssembler.swift +++ b/Application/DevLogData/Sources/DataAssembler.swift @@ -41,7 +41,6 @@ public final class DataAssembler: Assembler { todoService: container.resolve(TodoService.self), todoCategoryService: container.resolve(TodoCategoryService.self), store: container.resolve(MemoryCacheStore.self), - widgetSyncEventBus: container.resolve(WidgetSyncEventBus.self), todoMutationEventBus: container.resolve(TodoMutationEventBus.self) ) } diff --git a/Application/DevLogData/Sources/Repository/TodoRepositoryImpl.swift b/Application/DevLogData/Sources/Repository/TodoRepositoryImpl.swift index 9e6f58a5..20fe0bac 100644 --- a/Application/DevLogData/Sources/Repository/TodoRepositoryImpl.swift +++ b/Application/DevLogData/Sources/Repository/TodoRepositoryImpl.swift @@ -17,20 +17,17 @@ final class TodoRepositoryImpl: TodoRepository { private let todoService: TodoService private let todoCategoryService: TodoCategoryService private let store: MemoryCacheStore - private let widgetSyncEventBus: WidgetSyncEventBus private let todoMutationEventBus: TodoMutationEventBus init( todoService: TodoService, todoCategoryService: TodoCategoryService, store: MemoryCacheStore, - widgetSyncEventBus: WidgetSyncEventBus, todoMutationEventBus: TodoMutationEventBus ) { self.todoService = todoService self.todoCategoryService = todoCategoryService self.store = store - self.widgetSyncEventBus = widgetSyncEventBus self.todoMutationEventBus = todoMutationEventBus } @@ -143,7 +140,6 @@ final class TodoRepositoryImpl: TodoRepository { private func upsertTodo(_ todoRequest: TodoRequest) async throws { do { try await todoService.upsertTodo(request: todoRequest) - widgetSyncEventBus.request() } catch { throw error.toDomain() } @@ -152,7 +148,6 @@ final class TodoRepositoryImpl: TodoRepository { func deleteTodo(_ todoId: String) async throws { do { try await todoService.deleteTodo(todoId: todoId) - widgetSyncEventBus.request() todoMutationEventBus.publish(.deleted(todoId)) } catch { throw error.toDomain() @@ -162,7 +157,6 @@ final class TodoRepositoryImpl: TodoRepository { func undoDeleteTodo(_ todoId: String) async throws { do { try await todoService.undoDeleteTodo(todoId: todoId) - widgetSyncEventBus.request() todoMutationEventBus.publish(.restored(todoId)) } catch { throw error.toDomain() diff --git a/Application/DevLogData/Sources/Widget/WidgetSyncEventBus.swift b/Application/DevLogData/Sources/Widget/WidgetSyncEventBus.swift index f9b2e9e4..02cf4977 100644 --- a/Application/DevLogData/Sources/Widget/WidgetSyncEventBus.swift +++ b/Application/DevLogData/Sources/Widget/WidgetSyncEventBus.swift @@ -9,7 +9,5 @@ import Combine public protocol WidgetSyncEventBus { func publish(_ event: WidgetSyncEvent) - func request() - func confirmRequest() -> Bool func observe() -> AnyPublisher } diff --git a/Application/DevLogData/Tests/Repository/TodoRepositoryImplTests.swift b/Application/DevLogData/Tests/Repository/TodoRepositoryImplTests.swift index aa3ffffc..ffe22101 100644 --- a/Application/DevLogData/Tests/Repository/TodoRepositoryImplTests.swift +++ b/Application/DevLogData/Tests/Repository/TodoRepositoryImplTests.swift @@ -13,8 +13,8 @@ import DevLogDomain @testable import DevLogData struct TodoRepositoryImplTests { - @Test("Todo 변경 성공 시 위젯 동기화 요청과 mutation 이벤트를 발행한다") - func todo_변경_성공_시_위젯_동기화_요청과_mutation_이벤트를_발행한다() async throws { + @Test("Todo 변경 성공 시 mutation 이벤트를 발행한다") + func todo_변경_성공_시_mutation_이벤트를_발행한다() async throws { let fixture = makeFixture() let todo = makeTodo() @@ -22,14 +22,12 @@ struct TodoRepositoryImplTests { try await fixture.repository.deleteTodo(todo.id) try await fixture.repository.undoDeleteTodo(todo.id) - #expect(fixture.widgetSyncEventBus.requestCallCount == 3) - let mutationEvents = fixture.todoMutationEventBus.publishedEvents() #expect(mutationEvents == [.updated(todo.id), .deleted(todo.id), .restored(todo.id)]) } - @Test("Todo 변경 실패 시 위젯 동기화와 mutation 이벤트를 발행하지 않는다") - func todo_변경_실패_시_위젯_동기화와_mutation_이벤트를_발행하지_않는다() async throws { + @Test("Todo 변경 실패 시 mutation 이벤트를 발행하지 않는다") + func todo_변경_실패_시_mutation_이벤트를_발행하지_않는다() async throws { let fixture = makeFixture() let todo = makeTodo() @@ -54,8 +52,6 @@ struct TodoRepositoryImplTests { #expect(error as? TodoRepositoryImplTestsError == .serviceFailed) } - #expect(fixture.widgetSyncEventBus.requestCallCount == 0) - let mutationEvents = fixture.todoMutationEventBus.publishedEvents() #expect(mutationEvents.isEmpty) } @@ -64,20 +60,17 @@ struct TodoRepositoryImplTests { let todoService = TodoServiceSpy() let todoCategoryService = TodoCategoryServiceSpy() let store = TodoRepositoryMemoryCacheStoreSpy() - let widgetSyncEventBus = WidgetSyncEventBusSpy() let todoMutationEventBus = TodoMutationEventBusSpy() let repository = TodoRepositoryImpl( todoService: todoService, todoCategoryService: todoCategoryService, store: store, - widgetSyncEventBus: widgetSyncEventBus, todoMutationEventBus: todoMutationEventBus ) return Fixture( repository: repository, todoService: todoService, - widgetSyncEventBus: widgetSyncEventBus, todoMutationEventBus: todoMutationEventBus ) } @@ -105,7 +98,6 @@ struct TodoRepositoryImplTests { private struct Fixture { let repository: TodoRepositoryImpl let todoService: TodoServiceSpy - let widgetSyncEventBus: WidgetSyncEventBusSpy let todoMutationEventBus: TodoMutationEventBusSpy } @@ -174,24 +166,6 @@ private final class TodoRepositoryMemoryCacheStoreSpy: MemoryCacheStore { } } -private final class WidgetSyncEventBusSpy: WidgetSyncEventBus { - private(set) var requestCallCount = 0 - - func publish(_ event: WidgetSyncEvent) { } - - func request() { - requestCallCount += 1 - } - - func confirmRequest() -> Bool { - false - } - - func observe() -> AnyPublisher { - Empty().eraseToAnyPublisher() - } -} - private final class TodoMutationEventBusSpy: TodoMutationEventBus { private var capturedEvents = [TodoMutationEvent]() diff --git a/Application/DevLogData/Tests/Repository/UserPreferencesRepositoryImplTests.swift b/Application/DevLogData/Tests/Repository/UserPreferencesRepositoryImplTests.swift index 29477917..65a0ea8b 100644 --- a/Application/DevLogData/Tests/Repository/UserPreferencesRepositoryImplTests.swift +++ b/Application/DevLogData/Tests/Repository/UserPreferencesRepositoryImplTests.swift @@ -112,12 +112,6 @@ private final class WidgetSyncEventBusSpy: WidgetSyncEventBus { events.append(event) } - func request() { } - - func confirmRequest() -> Bool { - false - } - func observe() -> AnyPublisher { Empty().eraseToAnyPublisher() } diff --git a/Application/DevLogWidget/Sources/Widget/WidgetSyncEventBusImpl.swift b/Application/DevLogWidget/Sources/Widget/WidgetSyncEventBusImpl.swift index dfaa4a8b..48abc23f 100644 --- a/Application/DevLogWidget/Sources/Widget/WidgetSyncEventBusImpl.swift +++ b/Application/DevLogWidget/Sources/Widget/WidgetSyncEventBusImpl.swift @@ -6,13 +6,10 @@ // import Combine -import Foundation import DevLogData public final class WidgetSyncEventBusImpl: WidgetSyncEventBus { private let subject = PassthroughSubject() - private let lock = NSLock() - private var isRequested = false public init() { } @@ -20,21 +17,6 @@ public final class WidgetSyncEventBusImpl: WidgetSyncEventBus { subject.send(event) } - public func request() { - lock.lock() - defer { lock.unlock() } - isRequested = true - } - - public func confirmRequest() -> Bool { - lock.lock() - defer { lock.unlock() } - - guard isRequested else { return false } - isRequested = false - return true - } - public func observe() -> AnyPublisher { subject.eraseToAnyPublisher() } diff --git a/Application/DevLogWidget/Tests/Handler/WidgetSessionSyncHandlerTests.swift b/Application/DevLogWidget/Tests/Handler/WidgetSessionSyncHandlerTests.swift index f433ebb9..45c647dc 100644 --- a/Application/DevLogWidget/Tests/Handler/WidgetSessionSyncHandlerTests.swift +++ b/Application/DevLogWidget/Tests/Handler/WidgetSessionSyncHandlerTests.swift @@ -75,12 +75,6 @@ private final class WidgetSyncEventBusSpy: WidgetSyncEventBus { events.append(event) } - func request() { } - - func confirmRequest() -> Bool { - false - } - func observe() -> AnyPublisher { Empty().eraseToAnyPublisher() } diff --git a/Application/DevLogWidget/Tests/Widget/WidgetSyncEventBusTests.swift b/Application/DevLogWidget/Tests/Widget/WidgetSyncEventBusTests.swift index 8a70154e..188aff90 100644 --- a/Application/DevLogWidget/Tests/Widget/WidgetSyncEventBusTests.swift +++ b/Application/DevLogWidget/Tests/Widget/WidgetSyncEventBusTests.swift @@ -25,16 +25,4 @@ struct WidgetSyncEventBusTests { #expect(receivedEvents == [.syncRequested]) _ = cancellable } - - @Test("WidgetSyncEventBus는 요청 여부를 한 번만 소비한다") - func widgetSyncEventBus는_요청_여부를_한_번만_소비한다() { - let bus = WidgetSyncEventBusImpl() - - #expect(bus.confirmRequest() == false) - - bus.request() - - #expect(bus.confirmRequest()) - #expect(bus.confirmRequest() == false) - } } From 0142089fffdc32e03c4c83df17646c2b643e9239 Mon Sep 17 00:00:00 2001 From: opficdev <162981733+opficdev@users.noreply.github.com> Date: Sun, 28 Jun 2026 23:47:11 +0900 Subject: [PATCH 06/12] =?UTF-8?q?refactor:=20=EC=9C=84=EC=A0=AF=20?= =?UTF-8?q?=EC=84=A4=EC=A0=95=20=EC=A1=B0=ED=9A=8C=20=EA=B8=B0=EB=B0=98=20?= =?UTF-8?q?=EB=8F=99=EA=B8=B0=ED=99=94=20=EB=B6=84=EA=B8=B0=20=EC=A0=9C?= =?UTF-8?q?=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../WidgetConfigurationProvider.swift | 10 ----- .../Sources/Widget/WidgetAssembler.swift | 6 +-- .../WidgetConfigurationProviderImpl.swift | 25 ----------- .../Widget/WidgetSyncEventHandler.swift | 43 ++----------------- .../Widget/WidgetSyncEventHandlerTests.swift | 37 +--------------- 5 files changed, 6 insertions(+), 115 deletions(-) delete mode 100644 Application/DevLogData/Sources/Protocol/WidgetConfigurationProvider.swift delete mode 100644 Application/DevLogWidget/Sources/Widget/WidgetConfigurationProviderImpl.swift diff --git a/Application/DevLogData/Sources/Protocol/WidgetConfigurationProvider.swift b/Application/DevLogData/Sources/Protocol/WidgetConfigurationProvider.swift deleted file mode 100644 index 395c8749..00000000 --- a/Application/DevLogData/Sources/Protocol/WidgetConfigurationProvider.swift +++ /dev/null @@ -1,10 +0,0 @@ -// -// WidgetConfigurationProvider.swift -// DevLogData -// -// Created by opfic on 6/28/26. -// - -public protocol WidgetConfigurationProvider { - func currentWidgetKinds() async throws -> Set -} diff --git a/Application/DevLogWidget/Sources/Widget/WidgetAssembler.swift b/Application/DevLogWidget/Sources/Widget/WidgetAssembler.swift index 7d95655d..4c539136 100644 --- a/Application/DevLogWidget/Sources/Widget/WidgetAssembler.swift +++ b/Application/DevLogWidget/Sources/Widget/WidgetAssembler.swift @@ -20,9 +20,6 @@ public final class WidgetAssembler: Assembler { container.register(WidgetSyncEventBus.self) { WidgetSyncEventBusImpl() } - container.register(WidgetConfigurationProvider.self) { - WidgetConfigurationProviderImpl() - } container.register(WidgetSharedDefaultsStore.self) { WidgetSharedDefaultsStore() } @@ -44,8 +41,7 @@ public final class WidgetAssembler: Assembler { WidgetSyncEventHandler( eventBus: container.resolve(WidgetSyncEventBus.self), repository: container.resolve(WidgetTodoSnapshotRepository.self), - snapshotUpdater: container.resolve(WidgetSnapshotUpdater.self), - configurationProvider: container.resolve(WidgetConfigurationProvider.self) + snapshotUpdater: container.resolve(WidgetSnapshotUpdater.self) ) } container.register(WidgetSessionSyncHandler.self) { diff --git a/Application/DevLogWidget/Sources/Widget/WidgetConfigurationProviderImpl.swift b/Application/DevLogWidget/Sources/Widget/WidgetConfigurationProviderImpl.swift deleted file mode 100644 index 93aba401..00000000 --- a/Application/DevLogWidget/Sources/Widget/WidgetConfigurationProviderImpl.swift +++ /dev/null @@ -1,25 +0,0 @@ -// -// WidgetConfigurationProviderImpl.swift -// DevLogWidget -// -// Created by opfic on 6/28/26. -// - -import WidgetKit -import DevLogData - -public final class WidgetConfigurationProviderImpl: WidgetConfigurationProvider { - public init() { } - - public func currentWidgetKinds() async throws -> Set { - try await withCheckedThrowingContinuation { continuation in - WidgetCenter.shared.getCurrentConfigurations { result in - continuation.resume( - with: result.map { configurations in - Set(configurations.map(\.kind)) - } - ) - } - } - } -} diff --git a/Application/DevLogWidget/Sources/Widget/WidgetSyncEventHandler.swift b/Application/DevLogWidget/Sources/Widget/WidgetSyncEventHandler.swift index 02e48fb9..546d5d97 100644 --- a/Application/DevLogWidget/Sources/Widget/WidgetSyncEventHandler.swift +++ b/Application/DevLogWidget/Sources/Widget/WidgetSyncEventHandler.swift @@ -14,7 +14,6 @@ import DevLogWidgetCore public final class WidgetSyncEventHandler { private let repository: WidgetTodoSnapshotRepository private let snapshotUpdater: WidgetSnapshotUpdater - private let configurationProvider: WidgetConfigurationProvider private let pageSize = 100 private let logger = Logger(category: "WidgetSyncEventHandler") private var cancellables = Set() @@ -22,12 +21,10 @@ public final class WidgetSyncEventHandler { public init( eventBus: WidgetSyncEventBus, repository: WidgetTodoSnapshotRepository, - snapshotUpdater: WidgetSnapshotUpdater, - configurationProvider: WidgetConfigurationProvider + snapshotUpdater: WidgetSnapshotUpdater ) { self.repository = repository self.snapshotUpdater = snapshotUpdater - self.configurationProvider = configurationProvider eventBus.observe() .sink { [weak self] event in @@ -44,32 +41,14 @@ private extension WidgetSyncEventHandler { Task { [weak self] in guard let self else { return } let now = Date() - let targets = await enabledSnapshotTargets() await withTaskGroup(of: Void.self) { group in - if targets.contains(.today) { - group.addTask { await self.updateTodayWidgetSnapshot(now: now) } - } - if targets.contains(.heatmap) { - group.addTask { await self.updateHeatmapWidgetSnapshot(now: now) } - } + group.addTask { await self.updateTodayWidgetSnapshot(now: now) } + group.addTask { await self.updateHeatmapWidgetSnapshot(now: now) } } } } } - func enabledSnapshotTargets() async -> Set { - do { - let kinds = try await configurationProvider.currentWidgetKinds() - return WidgetSnapshotTarget.targets(for: kinds) - } catch { - logger.error( - "Failed to fetch current widget configurations.", - error: error - ) - return Set(WidgetSnapshotTarget.allCases) - } - } - func updateTodayWidgetSnapshot(now: Date) async { do { async let todosWithDueDate = fetchTodayTodos( @@ -166,19 +145,3 @@ private extension WidgetSyncEventHandler { ) } } - -private enum WidgetSnapshotTarget: CaseIterable { - case today - case heatmap - - static func targets(for kinds: Set) -> Set { - var targets = Set() - if kinds.contains(WidgetKind.todayTodo) { - targets.insert(.today) - } - if kinds.contains(WidgetKind.heatmap) { - targets.insert(.heatmap) - } - return targets - } -} diff --git a/Application/DevLogWidget/Tests/Widget/WidgetSyncEventHandlerTests.swift b/Application/DevLogWidget/Tests/Widget/WidgetSyncEventHandlerTests.swift index ec8c4964..62583262 100644 --- a/Application/DevLogWidget/Tests/Widget/WidgetSyncEventHandlerTests.swift +++ b/Application/DevLogWidget/Tests/Widget/WidgetSyncEventHandlerTests.swift @@ -94,28 +94,6 @@ struct WidgetSyncEventHandlerTests { _ = fixture.handler } - @Test("Today 위젯만 설정되어 있으면 Today 스냅샷만 갱신한다") - func today_위젯만_설정되어_있으면_today_스냅샷만_갱신한다() async throws { - let now = Date() - let fixture = makeFixture(widgetKinds: [WidgetKind.todayTodo]) - - await fixture.repository.setTodos( - todayTodosWithDueDate: [ - makeTodo(id: "today", createdAt: now, dueDate: now) - ] - ) - - fixture.bus.publish(.syncRequested) - - try await waitUntil { - fixture.snapshotUpdater.hasTodayUpdate - } - - #expect(fixture.snapshotUpdater.todayUpdates.first?.todos.map(\.id) == ["today"]) - #expect(fixture.snapshotUpdater.heatmapUpdates.isEmpty) - #expect(Set(await fixture.repository.calledCalls().map(\.sortTarget)) == Set([.dueDate, .updatedAt])) - _ = fixture.handler - } @Test("Heatmap 스냅샷 조회 실패는 Today 스냅샷 갱신을 막지 않는다") func heatmap_스냅샷_조회_실패는_today_스냅샷_갱신을_막지_않는다() async throws { let now = Date() @@ -139,18 +117,14 @@ struct WidgetSyncEventHandlerTests { _ = fixture.handler } - private func makeFixture( - widgetKinds: Set = [WidgetKind.todayTodo, WidgetKind.heatmap] - ) -> Fixture { + private func makeFixture() -> Fixture { let bus = WidgetSyncEventBusImpl() let repository = WidgetTodoSnapshotRepositorySpy() let snapshotUpdater = WidgetSnapshotUpdaterSpy() - let configurationProvider = WidgetConfigurationProviderSpy(widgetKinds: widgetKinds) let handler = WidgetSyncEventHandler( eventBus: bus, repository: repository, - snapshotUpdater: snapshotUpdater, - configurationProvider: configurationProvider + snapshotUpdater: snapshotUpdater ) return Fixture( @@ -188,13 +162,6 @@ private struct Fixture { let handler: WidgetSyncEventHandler } -private struct WidgetConfigurationProviderSpy: WidgetConfigurationProvider { - let widgetKinds: Set - func currentWidgetKinds() async throws -> Set { - widgetKinds - } -} - private actor WidgetTodoSnapshotRepositorySpy: WidgetTodoSnapshotRepository { struct Call { let sortTarget: TodoQuery.SortTarget From cb04c905a4672875bae1a17b5c7fc89217b87dc1 Mon Sep 17 00:00:00 2001 From: opficdev <162981733+opficdev@users.noreply.github.com> Date: Mon, 29 Jun 2026 23:24:10 +0900 Subject: [PATCH 07/12] =?UTF-8?q?docs:=20=EB=B6=88=ED=95=84=EC=9A=94=20?= =?UTF-8?q?=EC=9D=B4=EB=AF=B8=EC=A7=80=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/Widget.png | Bin 252071 -> 0 bytes docs/store-protocol.png | Bin 264451 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 docs/Widget.png delete mode 100644 docs/store-protocol.png diff --git a/docs/Widget.png b/docs/Widget.png deleted file mode 100644 index 6f60328da6e3b08676ed72754737b55c9dff7d32..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 252071 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ɁAoToO=5mGC!iy5ZMWnm! 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 diff --git a/docs/store-protocol.png b/docs/store-protocol.png deleted file mode 100644 index 698329c3463ba6112766600968fe2a4dbf0ba3f8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 264451 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 r$I;ymcJ*>%3g83s< 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

+pBF&!jG1?$$#XbZA*IHXeTux5-ukFC7Oqq=K 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 From c0a8f3f3a8c211ad8b409bca070badca740763e6 Mon Sep 17 00:00:00 2001 From: opficdev <162981733+opficdev@users.noreply.github.com> Date: Tue, 30 Jun 2026 10:04:26 +0900 Subject: [PATCH 08/12] =?UTF-8?q?refactor:=20=EC=9C=84=EC=A0=AF=20?= =?UTF-8?q?=EC=8A=A4=EB=83=85=EC=83=B7=20=EA=B0=B1=EC=8B=A0=20=ED=9D=90?= =?UTF-8?q?=EB=A6=84=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DevLogData/Sources/DataAssembler.swift | 1 + .../Sources/Mapper/TodoMapping.swift | 13 ++ .../Protocol/WidgetSnapshotUpdater.swift | 62 ++++- .../Repository/TodoRepositoryImpl.swift | 13 ++ .../UserPreferencesRepositoryImpl.swift | 4 +- .../Sources/Widget/WidgetSyncEvent.swift | 1 + .../Repository/TodoRepositoryImplTests.swift | 54 +++++ .../UserPreferencesRepositoryImplTests.swift | 6 +- .../Widget/WidgetSnapshotUpdaterImpl.swift | 214 ++++++++++++++++-- .../Widget/WidgetSyncEventHandler.swift | 4 + .../Widget/WidgetSnapshotUpdaterTests.swift | 110 ++++++++- .../Widget/WidgetSyncEventHandlerTests.swift | 105 +++++---- 12 files changed, 510 insertions(+), 77 deletions(-) diff --git a/Application/DevLogData/Sources/DataAssembler.swift b/Application/DevLogData/Sources/DataAssembler.swift index c2f11acc..0638ad6f 100644 --- a/Application/DevLogData/Sources/DataAssembler.swift +++ b/Application/DevLogData/Sources/DataAssembler.swift @@ -41,6 +41,7 @@ public final class DataAssembler: Assembler { todoService: container.resolve(TodoService.self), todoCategoryService: container.resolve(TodoCategoryService.self), store: container.resolve(MemoryCacheStore.self), + updater: container.resolve(WidgetSnapshotUpdater.self), todoMutationEventBus: container.resolve(TodoMutationEventBus.self) ) } diff --git a/Application/DevLogData/Sources/Mapper/TodoMapping.swift b/Application/DevLogData/Sources/Mapper/TodoMapping.swift index fa6373c6..6dfd7a74 100644 --- a/Application/DevLogData/Sources/Mapper/TodoMapping.swift +++ b/Application/DevLogData/Sources/Mapper/TodoMapping.swift @@ -89,6 +89,19 @@ public extension WidgetTodoSnapshot { dueDate: todo.dueDate ) } + + static func fromDomain(_ draft: TodoDraft) -> Self { + WidgetTodoSnapshot( + id: draft.id, + number: nil, + title: draft.title, + isPinned: draft.isPinned, + createdAt: draft.createdAt, + completedAt: draft.completedAt, + deletedAt: nil, + dueDate: draft.dueDate + ) + } } public extension TodoCursorDTO { diff --git a/Application/DevLogData/Sources/Protocol/WidgetSnapshotUpdater.swift b/Application/DevLogData/Sources/Protocol/WidgetSnapshotUpdater.swift index 1748bd34..41d79258 100644 --- a/Application/DevLogData/Sources/Protocol/WidgetSnapshotUpdater.swift +++ b/Application/DevLogData/Sources/Protocol/WidgetSnapshotUpdater.swift @@ -10,20 +10,64 @@ import DevLogCore public protocol WidgetSnapshotUpdater { func updateTodaySnapshot( - todos: [WidgetTodoSnapshot], + todos: [WidgetTodoSnapshot]?, + displayOptions: TodayDisplayOptions?, now: Date ) - func updateTodaySnapshot( - todos: [WidgetTodoSnapshot], - displayOptions: TodayDisplayOptions, + + func updateHeatmapSnapshot( + createdTodos: [WidgetTodoSnapshot]?, + completedTodos: [WidgetTodoSnapshot]?, + deletedTodos: [WidgetTodoSnapshot]?, + quarterStart: Date?, now: Date ) - func updateHeatmapSnapshot( - createdTodos: [WidgetTodoSnapshot], - completedTodos: [WidgetTodoSnapshot], - deletedTodos: [WidgetTodoSnapshot], - quarterStart: Date, + + func upsertTodoSnapshot( + _ todo: WidgetTodoSnapshot, now: Date ) + + func deleteTodoSnapshot( + todoId: String, + deletedAt: Date, + now: Date + ) + + func restoreTodoSnapshot( + todoId: String, + now: Date + ) + func clear() } + +public extension WidgetSnapshotUpdater { + func updateTodaySnapshot( + todos: [WidgetTodoSnapshot]? = nil, + displayOptions: TodayDisplayOptions? = nil, + now: Date + ) { + updateTodaySnapshot( + todos: todos, + displayOptions: displayOptions, + now: now + ) + } + + func updateHeatmapSnapshot( + createdTodos: [WidgetTodoSnapshot]? = nil, + completedTodos: [WidgetTodoSnapshot]? = nil, + deletedTodos: [WidgetTodoSnapshot]? = nil, + quarterStart: Date? = nil, + now: Date + ) { + updateHeatmapSnapshot( + createdTodos: createdTodos, + completedTodos: completedTodos, + deletedTodos: deletedTodos, + quarterStart: quarterStart, + now: now + ) + } +} diff --git a/Application/DevLogData/Sources/Repository/TodoRepositoryImpl.swift b/Application/DevLogData/Sources/Repository/TodoRepositoryImpl.swift index 20fe0bac..89974406 100644 --- a/Application/DevLogData/Sources/Repository/TodoRepositoryImpl.swift +++ b/Application/DevLogData/Sources/Repository/TodoRepositoryImpl.swift @@ -17,17 +17,20 @@ final class TodoRepositoryImpl: TodoRepository { private let todoService: TodoService private let todoCategoryService: TodoCategoryService private let store: MemoryCacheStore + private let updater: WidgetSnapshotUpdater private let todoMutationEventBus: TodoMutationEventBus init( todoService: TodoService, todoCategoryService: TodoCategoryService, store: MemoryCacheStore, + updater: WidgetSnapshotUpdater, todoMutationEventBus: TodoMutationEventBus ) { self.todoService = todoService self.todoCategoryService = todoCategoryService self.store = store + self.updater = updater self.todoMutationEventBus = todoMutationEventBus } @@ -129,12 +132,18 @@ final class TodoRepositoryImpl: TodoRepository { func upsertTodo(_ todo: Todo) async throws { let todoRequest = TodoRequest.fromDomain(todo) try await upsertTodo(todoRequest) + let now = Date() + let snapshot = WidgetTodoSnapshot.fromDomain(todo) + updater.upsertTodoSnapshot(snapshot, now: now) todoMutationEventBus.publish(.updated(todo.id)) } func upsertTodo(_ todoDraft: TodoDraft) async throws { let todoRequest = TodoRequest.fromDomain(todoDraft) try await upsertTodo(todoRequest) + let now = Date() + let snapshot = WidgetTodoSnapshot.fromDomain(todoDraft) + updater.upsertTodoSnapshot(snapshot, now: now) } private func upsertTodo(_ todoRequest: TodoRequest) async throws { @@ -148,6 +157,8 @@ final class TodoRepositoryImpl: TodoRepository { func deleteTodo(_ todoId: String) async throws { do { try await todoService.deleteTodo(todoId: todoId) + let now = Date() + updater.deleteTodoSnapshot(todoId: todoId, deletedAt: now, now: now) todoMutationEventBus.publish(.deleted(todoId)) } catch { throw error.toDomain() @@ -157,6 +168,8 @@ final class TodoRepositoryImpl: TodoRepository { func undoDeleteTodo(_ todoId: String) async throws { do { try await todoService.undoDeleteTodo(todoId: todoId) + let now = Date() + updater.restoreTodoSnapshot(todoId: todoId, now: now) todoMutationEventBus.publish(.restored(todoId)) } catch { throw error.toDomain() diff --git a/Application/DevLogData/Sources/Repository/UserPreferencesRepositoryImpl.swift b/Application/DevLogData/Sources/Repository/UserPreferencesRepositoryImpl.swift index 1dbd275f..eabbd5c1 100644 --- a/Application/DevLogData/Sources/Repository/UserPreferencesRepositoryImpl.swift +++ b/Application/DevLogData/Sources/Repository/UserPreferencesRepositoryImpl.swift @@ -95,7 +95,7 @@ final class UserPreferencesRepositoryImpl: UserPreferencesRepository { func setHeatmapActivityTypes(_ activityTypes: [String]) { widgetSnapshotPreferenceStore.setHeatmapActivityTypes(activityTypes) - widgetSyncEventBus.publish(.syncRequested) + widgetSyncEventBus.publish(.refreshRequested) } func todayDisplayOptions() -> TodayDisplayOptions { @@ -104,6 +104,6 @@ final class UserPreferencesRepositoryImpl: UserPreferencesRepository { func setTodayDisplayOptions(_ options: TodayDisplayOptions) { widgetSnapshotPreferenceStore.setTodayDisplayOptions(options) - widgetSyncEventBus.publish(.syncRequested) + widgetSyncEventBus.publish(.refreshRequested) } } diff --git a/Application/DevLogData/Sources/Widget/WidgetSyncEvent.swift b/Application/DevLogData/Sources/Widget/WidgetSyncEvent.swift index 1865a716..bbd6375e 100644 --- a/Application/DevLogData/Sources/Widget/WidgetSyncEvent.swift +++ b/Application/DevLogData/Sources/Widget/WidgetSyncEvent.swift @@ -7,4 +7,5 @@ public enum WidgetSyncEvent: Equatable { case syncRequested + case refreshRequested } diff --git a/Application/DevLogData/Tests/Repository/TodoRepositoryImplTests.swift b/Application/DevLogData/Tests/Repository/TodoRepositoryImplTests.swift index ffe22101..5bdee0ac 100644 --- a/Application/DevLogData/Tests/Repository/TodoRepositoryImplTests.swift +++ b/Application/DevLogData/Tests/Repository/TodoRepositoryImplTests.swift @@ -24,6 +24,9 @@ struct TodoRepositoryImplTests { let mutationEvents = fixture.todoMutationEventBus.publishedEvents() #expect(mutationEvents == [.updated(todo.id), .deleted(todo.id), .restored(todo.id)]) + #expect(fixture.widgetSnapshotUpdater.upsertedTodoIds == [todo.id]) + #expect(fixture.widgetSnapshotUpdater.deletedTodoIds == [todo.id]) + #expect(fixture.widgetSnapshotUpdater.restoredTodoIds == [todo.id]) } @Test("Todo 변경 실패 시 mutation 이벤트를 발행하지 않는다") @@ -54,23 +57,29 @@ struct TodoRepositoryImplTests { let mutationEvents = fixture.todoMutationEventBus.publishedEvents() #expect(mutationEvents.isEmpty) + #expect(fixture.widgetSnapshotUpdater.upsertedTodoIds.isEmpty) + #expect(fixture.widgetSnapshotUpdater.deletedTodoIds.isEmpty) + #expect(fixture.widgetSnapshotUpdater.restoredTodoIds.isEmpty) } private func makeFixture() -> Fixture { let todoService = TodoServiceSpy() let todoCategoryService = TodoCategoryServiceSpy() let store = TodoRepositoryMemoryCacheStoreSpy() + let widgetSnapshotUpdater = WidgetSnapshotUpdaterSpy() let todoMutationEventBus = TodoMutationEventBusSpy() let repository = TodoRepositoryImpl( todoService: todoService, todoCategoryService: todoCategoryService, store: store, + updater: widgetSnapshotUpdater, todoMutationEventBus: todoMutationEventBus ) return Fixture( repository: repository, todoService: todoService, + widgetSnapshotUpdater: widgetSnapshotUpdater, todoMutationEventBus: todoMutationEventBus ) } @@ -98,6 +107,7 @@ struct TodoRepositoryImplTests { private struct Fixture { let repository: TodoRepositoryImpl let todoService: TodoServiceSpy + let widgetSnapshotUpdater: WidgetSnapshotUpdaterSpy let todoMutationEventBus: TodoMutationEventBusSpy } @@ -182,6 +192,50 @@ private final class TodoMutationEventBusSpy: TodoMutationEventBus { } } +private final class WidgetSnapshotUpdaterSpy: WidgetSnapshotUpdater { + private(set) var upsertedTodoIds = [String]() + private(set) var deletedTodoIds = [String]() + private(set) var restoredTodoIds = [String]() + + func updateTodaySnapshot( + todos: [WidgetTodoSnapshot]?, + displayOptions: TodayDisplayOptions?, + now: Date + ) { } + + func updateHeatmapSnapshot( + createdTodos: [WidgetTodoSnapshot]?, + completedTodos: [WidgetTodoSnapshot]?, + deletedTodos: [WidgetTodoSnapshot]?, + quarterStart: Date?, + now: Date + ) { } + + func upsertTodoSnapshot( + _ todo: WidgetTodoSnapshot, + now: Date + ) { + upsertedTodoIds.append(todo.id) + } + + func deleteTodoSnapshot( + todoId: String, + deletedAt: Date, + now: Date + ) { + deletedTodoIds.append(todoId) + } + + func restoreTodoSnapshot( + todoId: String, + now: Date + ) { + restoredTodoIds.append(todoId) + } + + func clear() { } +} + private enum TodoRepositoryImplTestsError: Error, Equatable { case serviceFailed case unexpectedCall diff --git a/Application/DevLogData/Tests/Repository/UserPreferencesRepositoryImplTests.swift b/Application/DevLogData/Tests/Repository/UserPreferencesRepositoryImplTests.swift index 65a0ea8b..32fb722d 100644 --- a/Application/DevLogData/Tests/Repository/UserPreferencesRepositoryImplTests.swift +++ b/Application/DevLogData/Tests/Repository/UserPreferencesRepositoryImplTests.swift @@ -12,8 +12,8 @@ import DevLogCore @testable import DevLogData struct UserPreferencesRepositoryImplTests { - @Test("위젯 설정 변경 시 위젯 동기화 이벤트를 발행한다") - func 위젯_설정_변경_시_위젯_동기화_이벤트를_발행한다() { + @Test("위젯 설정 변경 시 위젯 스냅샷 재생성 이벤트를 발행한다") + func 위젯_설정_변경_시_위젯_스냅샷_재생성_이벤트를_발행한다() { let widgetSnapshotPreferenceStore = WidgetSnapshotPreferenceStoreSpy() let widgetSyncEventBus = WidgetSyncEventBusSpy() let repository = UserPreferencesRepositoryImpl( @@ -38,7 +38,7 @@ struct UserPreferencesRepositoryImplTests { focusVisibility: .focusedOnly ) ) - #expect(widgetSyncEventBus.events == [.syncRequested, .syncRequested]) + #expect(widgetSyncEventBus.events == [.refreshRequested, .refreshRequested]) } } diff --git a/Application/DevLogWidget/Sources/Widget/WidgetSnapshotUpdaterImpl.swift b/Application/DevLogWidget/Sources/Widget/WidgetSnapshotUpdaterImpl.swift index bb488cf7..fd35041d 100644 --- a/Application/DevLogWidget/Sources/Widget/WidgetSnapshotUpdaterImpl.swift +++ b/Application/DevLogWidget/Sources/Widget/WidgetSnapshotUpdaterImpl.swift @@ -12,11 +12,23 @@ import DevLogData import DevLogWidgetCore final class WidgetSnapshotUpdaterImpl: WidgetSnapshotUpdater { + private struct SnapshotSource { + var hasTodaySource = false + var hasHeatmapSource = false + var todayTodos = [WidgetTodoSnapshot]() + var createdTodos = [WidgetTodoSnapshot]() + var completedTodos = [WidgetTodoSnapshot]() + var deletedTodos = [WidgetTodoSnapshot]() + var quarterStart: Date? + } + private let snapshotStore: WidgetSnapshotStore private let preferenceStore: WidgetSnapshotPreferenceStore private let todayFactory: TodayWidgetSnapshotFactory private let heatmapFactory: HeatmapWidgetSnapshotFactory private let logger = Logger(category: "WidgetSnapshotUpdaterImpl") + private let lock = NSLock() + private var source = SnapshotSource() init( snapshotStore: WidgetSnapshotStore, @@ -31,24 +43,14 @@ final class WidgetSnapshotUpdaterImpl: WidgetSnapshotUpdater { } func updateTodaySnapshot( - todos: [WidgetTodoSnapshot], - now: Date = Date() - ) { - updateTodaySnapshot( - todos: todos, - displayOptions: preferenceStore.todayDisplayOptions(), - now: now - ) - } - - func updateTodaySnapshot( - todos: [WidgetTodoSnapshot], - displayOptions: TodayDisplayOptions, + todos: [WidgetTodoSnapshot]?, + displayOptions: TodayDisplayOptions?, now: Date = Date() ) { + guard let todos = updateTodaySource(todos) else { return } let todayWidgetSnapshot = todayFactory.makeSnapshot( todos: todos, - displayOptions: displayOptions, + displayOptions: displayOptions ?? preferenceStore.todayDisplayOptions(), now: now ) @@ -64,16 +66,23 @@ final class WidgetSnapshotUpdaterImpl: WidgetSnapshotUpdater { } func updateHeatmapSnapshot( - createdTodos: [WidgetTodoSnapshot], - completedTodos: [WidgetTodoSnapshot], - deletedTodos: [WidgetTodoSnapshot], - quarterStart: Date, + createdTodos: [WidgetTodoSnapshot]?, + completedTodos: [WidgetTodoSnapshot]?, + deletedTodos: [WidgetTodoSnapshot]?, + quarterStart: Date?, now: Date = Date() ) { - let heatmapWidgetSnapshot = heatmapFactory.makeSnapshot( + guard let source = updateHeatmapSource( createdTodos: createdTodos, completedTodos: completedTodos, deletedTodos: deletedTodos, + quarterStart: quarterStart + ), + let quarterStart = source.quarterStart else { return } + let heatmapWidgetSnapshot = heatmapFactory.makeSnapshot( + createdTodos: source.createdTodos, + completedTodos: source.completedTodos, + deletedTodos: source.deletedTodos, selectedActivityKinds: preferenceStore.selectedActivityKinds(), quarterStart: quarterStart, now: now @@ -90,9 +99,176 @@ final class WidgetSnapshotUpdaterImpl: WidgetSnapshotUpdater { } } + func upsertTodoSnapshot( + _ todo: WidgetTodoSnapshot, + now: Date = Date() + ) { + lock.lock() + upsertTodaySource(todo) + upsertHeatmapSource(todo) + lock.unlock() + + updateTodaySnapshot(todos: nil, now: now) + updateHeatmapSnapshot( + createdTodos: nil, + completedTodos: nil, + deletedTodos: nil, + quarterStart: nil, + now: now + ) + } + + func deleteTodoSnapshot( + todoId: String, + deletedAt: Date, + now: Date = Date() + ) { + lock.lock() + source.todayTodos.removeAll { $0.id == todoId } + if let todo = sourceTodo(id: todoId) { + upsertHeatmapSource(todo.withDeletedAt(deletedAt)) + } + lock.unlock() + + updateTodaySnapshot(todos: nil, now: now) + updateHeatmapSnapshot( + createdTodos: nil, + completedTodos: nil, + deletedTodos: nil, + quarterStart: nil, + now: now + ) + } + + func restoreTodoSnapshot( + todoId: String, + now: Date = Date() + ) { + lock.lock() + if let todo = sourceTodo(id: todoId) { + upsertTodaySource(todo.withDeletedAt(nil)) + } + if let todo = sourceTodo(id: todoId) { + upsertHeatmapSource(todo.withDeletedAt(nil)) + } + lock.unlock() + + updateTodaySnapshot(todos: nil, now: now) + updateHeatmapSnapshot( + createdTodos: nil, + completedTodos: nil, + deletedTodos: nil, + quarterStart: nil, + now: now + ) + } + func clear() { + lock.lock() + source = SnapshotSource() + lock.unlock() + snapshotStore.clearSnapshots() preferenceStore.clear() WidgetCenter.shared.reloadAllTimelines() } } + +private extension WidgetSnapshotUpdaterImpl { + private func updateTodaySource( + _ todos: [WidgetTodoSnapshot]? + ) -> [WidgetTodoSnapshot]? { + lock.lock() + defer { lock.unlock() } + + if let todos { + source.hasTodaySource = true + source.todayTodos = todos + } + + guard source.hasTodaySource else { return nil } + return source.todayTodos + } + + private func updateHeatmapSource( + createdTodos: [WidgetTodoSnapshot]?, + completedTodos: [WidgetTodoSnapshot]?, + deletedTodos: [WidgetTodoSnapshot]?, + quarterStart: Date? + ) -> SnapshotSource? { + lock.lock() + defer { lock.unlock() } + + if let createdTodos, + let completedTodos, + let deletedTodos, + let quarterStart { + source.hasHeatmapSource = true + source.createdTodos = createdTodos + source.completedTodos = completedTodos + source.deletedTodos = deletedTodos + source.quarterStart = quarterStart + } + + guard source.hasHeatmapSource, + source.quarterStart != nil else { return nil } + return source + } + + func upsertTodaySource(_ todo: WidgetTodoSnapshot) { + guard source.hasTodaySource else { return } + + source.todayTodos.removeAll { $0.id == todo.id } + + guard todo.deletedAt == nil, + todo.completedAt == nil else { return } + + source.todayTodos.append(todo) + } + + func upsertHeatmapSource(_ todo: WidgetTodoSnapshot) { + guard source.hasHeatmapSource else { return } + + source.createdTodos.upsert(todo) + if todo.completedAt == nil { + source.completedTodos.removeAll { $0.id == todo.id } + } else { + source.completedTodos.upsert(todo) + } + + if todo.deletedAt == nil { + source.deletedTodos.removeAll { $0.id == todo.id } + } else { + source.deletedTodos.upsert(todo) + } + } + + func sourceTodo(id: String) -> WidgetTodoSnapshot? { + source.todayTodos.first { $0.id == id } + ?? source.createdTodos.first { $0.id == id } + ?? source.completedTodos.first { $0.id == id } + ?? source.deletedTodos.first { $0.id == id } + } +} + +private extension Array where Element == WidgetTodoSnapshot { + mutating func upsert(_ todo: WidgetTodoSnapshot) { + removeAll { $0.id == todo.id } + append(todo) + } +} + +private extension WidgetTodoSnapshot { + func withDeletedAt(_ deletedAt: Date?) -> Self { + WidgetTodoSnapshot( + id: id, + number: number, + title: title, + isPinned: isPinned, + createdAt: createdAt, + completedAt: completedAt, + deletedAt: deletedAt, + dueDate: dueDate + ) + } +} diff --git a/Application/DevLogWidget/Sources/Widget/WidgetSyncEventHandler.swift b/Application/DevLogWidget/Sources/Widget/WidgetSyncEventHandler.swift index 546d5d97..712858d3 100644 --- a/Application/DevLogWidget/Sources/Widget/WidgetSyncEventHandler.swift +++ b/Application/DevLogWidget/Sources/Widget/WidgetSyncEventHandler.swift @@ -46,6 +46,10 @@ private extension WidgetSyncEventHandler { group.addTask { await self.updateHeatmapWidgetSnapshot(now: now) } } } + case .refreshRequested: + let now = Date() + snapshotUpdater.updateTodaySnapshot(now: now) + snapshotUpdater.updateHeatmapSnapshot(now: now) } } diff --git a/Application/DevLogWidget/Tests/Widget/WidgetSnapshotUpdaterTests.swift b/Application/DevLogWidget/Tests/Widget/WidgetSnapshotUpdaterTests.swift index 4b5164a3..fdcd5b1d 100644 --- a/Application/DevLogWidget/Tests/Widget/WidgetSnapshotUpdaterTests.swift +++ b/Application/DevLogWidget/Tests/Widget/WidgetSnapshotUpdaterTests.swift @@ -120,6 +120,111 @@ struct WidgetSnapshotUpdaterTests { #expect(fixture.preferenceStore.todayDisplayOptions() == .default) } + @Test("저장된 원본 재생성은 네트워크 fetch 없이 현재 설정을 반영한다") + func 저장된_원본_재생성은_네트워크_fetch_없이_현재_설정을_반영한다() throws { + let now = try #require(Calendar.current.date(from: DateComponents(year: 2026, month: 4, day: 30))) + let fixture = makeFixture() + + fixture.updater.updateTodaySnapshot( + todos: [ + makeTodo( + id: "focused", + createdAt: now, + dueDate: now, + isPinned: true + ), + makeTodo( + id: "normal", + createdAt: now, + dueDate: now + ) + ], + now: now + ) + fixture.preferenceStore.setTodayDisplayOptions( + TodayDisplayOptions( + dueDateVisibility: .all, + focusVisibility: .focusedOnly + ) + ) + + fixture.updater.updateTodaySnapshot(now: now) + + let snapshot = try #require(try fixture.snapshotStore.loadTodaySnapshot()) + #expect(snapshot.totalCount == 1) + #expect(snapshot.sections.flatMap(\.items).map(\.id) == ["focused"]) + } + + @Test("저장된 원본이 없으면 재생성 요청은 기존 스냅샷을 덮지 않는다") + func 저장된_원본이_없으면_재생성_요청은_기존_스냅샷을_덮지_않는다() throws { + let now = try #require(Calendar.current.date(from: DateComponents(year: 2026, month: 4, day: 30))) + let fixture = makeFixture() + try fixture.snapshotStore.saveTodaySnapshot( + TodayWidgetSnapshot( + generatedAt: now, + totalCount: 1, + focusedCount: 0, + overdueCount: 0, + dueSoonCount: 1, + sections: [ + TodayWidgetSectionSnapshot( + category: "dueSoon", + items: [ + WidgetTodoSnapshotItem( + id: "existing", + number: 1, + title: "existing", + isPinned: false, + dueDate: now + ) + ] + ) + ] + ) + ) + + fixture.updater.updateTodaySnapshot(now: now) + + let snapshot = try #require(try fixture.snapshotStore.loadTodaySnapshot()) + #expect(snapshot.totalCount == 1) + #expect(snapshot.sections.flatMap(\.items).map(\.id) == ["existing"]) + } + + @Test("Todo 삭제 원본 반영은 Today에서 제거하고 Heatmap 삭제 활동을 갱신한다") + func todo_삭제_원본_반영은_today에서_제거하고_heatmap_삭제_활동을_갱신한다() throws { + let calendar = Calendar(identifier: .gregorian) + let quarterStart = try #require(calendar.date(from: DateComponents(year: 2026, month: 4, day: 1))) + let createdAt = try #require(calendar.date(from: DateComponents(year: 2026, month: 4, day: 2))) + let deletedAt = try #require(calendar.date(from: DateComponents(year: 2026, month: 4, day: 3))) + let now = try #require(calendar.date(from: DateComponents(year: 2026, month: 4, day: 30))) + let fixture = makeFixture(calendar: calendar) + fixture.preferenceStore.setHeatmapActivityTypes(["deleted"]) + let todo = makeTodo( + id: "todo", + createdAt: createdAt, + dueDate: now + ) + + fixture.updater.updateTodaySnapshot( + todos: [todo], + now: now + ) + fixture.updater.updateHeatmapSnapshot( + createdTodos: [todo], + completedTodos: [], + deletedTodos: [], + quarterStart: quarterStart, + now: now + ) + + fixture.updater.deleteTodoSnapshot(todoId: todo.id, deletedAt: deletedAt, now: now) + + let todaySnapshot = try #require(try fixture.snapshotStore.loadTodaySnapshot()) + let heatmapSnapshot = try #require(try fixture.snapshotStore.loadHeatmapSnapshot()) + #expect(todaySnapshot.totalCount == 0) + #expect(heatmapSnapshot.maxCount == 1) + } + private func makeFixture( calendar: Calendar = .current ) -> Fixture { @@ -149,13 +254,14 @@ struct WidgetSnapshotUpdaterTests { createdAt: Date, completedAt: Date? = nil, deletedAt: Date? = nil, - dueDate: Date? = nil + dueDate: Date? = nil, + isPinned: Bool = false ) -> WidgetTodoSnapshot { WidgetTodoSnapshot( id: id, number: 1, title: id, - isPinned: false, + isPinned: isPinned, createdAt: createdAt, completedAt: completedAt, deletedAt: deletedAt, diff --git a/Application/DevLogWidget/Tests/Widget/WidgetSyncEventHandlerTests.swift b/Application/DevLogWidget/Tests/Widget/WidgetSyncEventHandlerTests.swift index 62583262..fc43ae41 100644 --- a/Application/DevLogWidget/Tests/Widget/WidgetSyncEventHandlerTests.swift +++ b/Application/DevLogWidget/Tests/Widget/WidgetSyncEventHandlerTests.swift @@ -58,7 +58,6 @@ struct WidgetSyncEventHandlerTests { .completedAt, .deletedAt ])) - _ = fixture.handler } @Test("Today 스냅샷 조회 실패는 Heatmap 스냅샷 갱신을 막지 않는다") @@ -91,7 +90,6 @@ struct WidgetSyncEventHandlerTests { #expect(fixture.snapshotUpdater.heatmapUpdates.first?.createdTodos.map(\.id) == ["created"]) #expect(fixture.snapshotUpdater.heatmapUpdates.first?.completedTodos.map(\.id) == ["completed"]) #expect(fixture.snapshotUpdater.heatmapUpdates.first?.deletedTodos.map(\.id) == ["deleted"]) - _ = fixture.handler } @Test("Heatmap 스냅샷 조회 실패는 Today 스냅샷 갱신을 막지 않는다") @@ -114,7 +112,19 @@ struct WidgetSyncEventHandlerTests { #expect(fixture.snapshotUpdater.todayUpdates.first?.todos.map(\.id) == ["today"]) #expect(fixture.snapshotUpdater.heatmapUpdates.isEmpty) - _ = fixture.handler + } + + @Test("스냅샷 재생성 요청 이벤트는 저장된 원본을 재사용한다") + func 스냅샷_재생성_요청_이벤트는_저장된_원본을_재사용한다() async throws { + let fixture = makeFixture() + + fixture.bus.publish(.refreshRequested) + + try await waitUntil { + fixture.snapshotUpdater.refreshCallCount == 2 + } + + #expect(await fixture.repository.calledCalls().isEmpty) } private func makeFixture() -> Fixture { @@ -192,7 +202,6 @@ private actor WidgetTodoSnapshotRepositorySpy: WidgetTodoSnapshotRepository { func setFailingSortTargets(_ failingSortTargets: Set) { self.failingSortTargets = failingSortTargets } - func fetchTodayTodos( dueDateFilter: TodoQuery.DueDateFilter, sortTarget: TodoQuery.SortTarget, @@ -247,7 +256,6 @@ private actor WidgetTodoSnapshotRepositorySpy: WidgetTodoSnapshotRepository { private final class WidgetSnapshotUpdaterSpy: WidgetSnapshotUpdater { struct TodayUpdate { let todos: [WidgetTodoSnapshot] - let displayOptions: TodayDisplayOptions? let now: Date } @@ -276,59 +284,68 @@ private final class WidgetSnapshotUpdaterSpy: WidgetSnapshotUpdater { return storedHeatmapUpdates } - var hasTodayUpdate: Bool { - !todayUpdates.isEmpty - } + var hasTodayUpdate: Bool { !todayUpdates.isEmpty } + var hasHeatmapUpdate: Bool { !heatmapUpdates.isEmpty } - var hasHeatmapUpdate: Bool { - !heatmapUpdates.isEmpty + var refreshCallCount: Int { + lock.lock() + defer { lock.unlock() } + return storedRefreshCallCount } - func updateTodaySnapshot( - todos: [WidgetTodoSnapshot], - now: Date - ) { - appendTodayUpdate( - TodayUpdate( - todos: todos, - displayOptions: nil, - now: now - ) - ) - } + private var storedRefreshCallCount = 0 func updateTodaySnapshot( - todos: [WidgetTodoSnapshot], - displayOptions: TodayDisplayOptions, + todos: [WidgetTodoSnapshot]?, + displayOptions: TodayDisplayOptions?, now: Date ) { - appendTodayUpdate( - TodayUpdate( - todos: todos, - displayOptions: displayOptions, - now: now - ) - ) + if let todos { + appendTodayUpdate(TodayUpdate(todos: todos, now: now)) + } else { + incrementRefreshCallCount() + } } func updateHeatmapSnapshot( - createdTodos: [WidgetTodoSnapshot], - completedTodos: [WidgetTodoSnapshot], - deletedTodos: [WidgetTodoSnapshot], - quarterStart: Date, + createdTodos: [WidgetTodoSnapshot]?, + completedTodos: [WidgetTodoSnapshot]?, + deletedTodos: [WidgetTodoSnapshot]?, + quarterStart: Date?, now: Date ) { - appendHeatmapUpdate( - HeatmapUpdate( + if let createdTodos, + let completedTodos, + let deletedTodos, + let quarterStart { + appendHeatmapUpdate(HeatmapUpdate( createdTodos: createdTodos, completedTodos: completedTodos, deletedTodos: deletedTodos, quarterStart: quarterStart, now: now - ) - ) + )) + } else { + incrementRefreshCallCount() + } } + func upsertTodoSnapshot( + _ todo: WidgetTodoSnapshot, + now: Date + ) { } + + func deleteTodoSnapshot( + todoId: String, + deletedAt: Date, + now: Date + ) { } + + func restoreTodoSnapshot( + todoId: String, + now: Date + ) { } + func clear() { lock.lock() defer { lock.unlock() } @@ -346,6 +363,12 @@ private final class WidgetSnapshotUpdaterSpy: WidgetSnapshotUpdater { defer { lock.unlock() } storedHeatmapUpdates.append(update) } + + private func incrementRefreshCallCount() { + lock.lock() + defer { lock.unlock() } + storedRefreshCallCount += 1 + } } private enum WidgetTodoSnapshotRepositorySpyError: Error { @@ -354,9 +377,7 @@ private enum WidgetTodoSnapshotRepositorySpyError: Error { } private func waitUntil( - timeout: Duration = .seconds(1), - pollInterval: Duration = .milliseconds(20), - _ condition: @escaping () -> Bool + timeout: Duration = .seconds(1), pollInterval: Duration = .milliseconds(20), _ condition: @escaping () -> Bool ) async throws { let continuousClock = ContinuousClock() let deadline = continuousClock.now + timeout From 7af866dcba6445fe3ba8b7514dd03ba918f585e3 Mon Sep 17 00:00:00 2001 From: opficdev <162981733+opficdev@users.noreply.github.com> Date: Tue, 30 Jun 2026 10:07:51 +0900 Subject: [PATCH 09/12] =?UTF-8?q?refactor:=20=ED=8C=8C=EB=9D=BC=EB=AF=B8?= =?UTF-8?q?=ED=84=B0=EB=AA=85=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Application/DevLogData/Sources/DataAssembler.swift | 2 +- .../Sources/Repository/TodoRepositoryImpl.swift | 12 ++++++------ .../Tests/Repository/TodoRepositoryImplTests.swift | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/Application/DevLogData/Sources/DataAssembler.swift b/Application/DevLogData/Sources/DataAssembler.swift index 0638ad6f..58a62118 100644 --- a/Application/DevLogData/Sources/DataAssembler.swift +++ b/Application/DevLogData/Sources/DataAssembler.swift @@ -42,7 +42,7 @@ public final class DataAssembler: Assembler { todoCategoryService: container.resolve(TodoCategoryService.self), store: container.resolve(MemoryCacheStore.self), updater: container.resolve(WidgetSnapshotUpdater.self), - todoMutationEventBus: container.resolve(TodoMutationEventBus.self) + eventBus: container.resolve(TodoMutationEventBus.self) ) } diff --git a/Application/DevLogData/Sources/Repository/TodoRepositoryImpl.swift b/Application/DevLogData/Sources/Repository/TodoRepositoryImpl.swift index 89974406..22a92299 100644 --- a/Application/DevLogData/Sources/Repository/TodoRepositoryImpl.swift +++ b/Application/DevLogData/Sources/Repository/TodoRepositoryImpl.swift @@ -18,20 +18,20 @@ final class TodoRepositoryImpl: TodoRepository { private let todoCategoryService: TodoCategoryService private let store: MemoryCacheStore private let updater: WidgetSnapshotUpdater - private let todoMutationEventBus: TodoMutationEventBus + private let eventBus: TodoMutationEventBus init( todoService: TodoService, todoCategoryService: TodoCategoryService, store: MemoryCacheStore, updater: WidgetSnapshotUpdater, - todoMutationEventBus: TodoMutationEventBus + eventBus: TodoMutationEventBus ) { self.todoService = todoService self.todoCategoryService = todoCategoryService self.store = store self.updater = updater - self.todoMutationEventBus = todoMutationEventBus + self.eventBus = eventBus } func fetchTodos(_ query: TodoQuery, cursor: TodoCursor?) async throws -> TodoPage { @@ -135,7 +135,7 @@ final class TodoRepositoryImpl: TodoRepository { let now = Date() let snapshot = WidgetTodoSnapshot.fromDomain(todo) updater.upsertTodoSnapshot(snapshot, now: now) - todoMutationEventBus.publish(.updated(todo.id)) + eventBus.publish(.updated(todo.id)) } func upsertTodo(_ todoDraft: TodoDraft) async throws { @@ -159,7 +159,7 @@ final class TodoRepositoryImpl: TodoRepository { try await todoService.deleteTodo(todoId: todoId) let now = Date() updater.deleteTodoSnapshot(todoId: todoId, deletedAt: now, now: now) - todoMutationEventBus.publish(.deleted(todoId)) + eventBus.publish(.deleted(todoId)) } catch { throw error.toDomain() } @@ -170,7 +170,7 @@ final class TodoRepositoryImpl: TodoRepository { try await todoService.undoDeleteTodo(todoId: todoId) let now = Date() updater.restoreTodoSnapshot(todoId: todoId, now: now) - todoMutationEventBus.publish(.restored(todoId)) + eventBus.publish(.restored(todoId)) } catch { throw error.toDomain() } diff --git a/Application/DevLogData/Tests/Repository/TodoRepositoryImplTests.swift b/Application/DevLogData/Tests/Repository/TodoRepositoryImplTests.swift index 5bdee0ac..85d58cd7 100644 --- a/Application/DevLogData/Tests/Repository/TodoRepositoryImplTests.swift +++ b/Application/DevLogData/Tests/Repository/TodoRepositoryImplTests.swift @@ -73,7 +73,7 @@ struct TodoRepositoryImplTests { todoCategoryService: todoCategoryService, store: store, updater: widgetSnapshotUpdater, - todoMutationEventBus: todoMutationEventBus + eventBus: todoMutationEventBus ) return Fixture( From cbf91a70610784cf2143637b6fd704137f02a024 Mon Sep 17 00:00:00 2001 From: opficdev <162981733+opficdev@users.noreply.github.com> Date: Tue, 30 Jun 2026 10:57:09 +0900 Subject: [PATCH 10/12] =?UTF-8?q?refactor:=20Today=20=EC=9C=84=EC=A0=AF=20?= =?UTF-8?q?=EC=8A=A4=EB=83=85=EC=83=B7=20=EC=A0=80=EC=9E=A5=20=ED=95=AD?= =?UTF-8?q?=EB=AA=A9=20=EC=B5=9C=EB=8C=80=203=EA=B0=9C=20=EC=A0=9C?= =?UTF-8?q?=ED=95=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Today/TodayWidgetSnapshotFactory.swift | 41 +++++++++++-------- .../TodayWidgetSnapshotFactoryTests.swift | 22 ++++------ 2 files changed, 31 insertions(+), 32 deletions(-) diff --git a/Widget/DevLogWidgetCore/Sources/Today/TodayWidgetSnapshotFactory.swift b/Widget/DevLogWidgetCore/Sources/Today/TodayWidgetSnapshotFactory.swift index efa0a212..02aedebb 100644 --- a/Widget/DevLogWidgetCore/Sources/Today/TodayWidgetSnapshotFactory.swift +++ b/Widget/DevLogWidgetCore/Sources/Today/TodayWidgetSnapshotFactory.swift @@ -89,23 +89,7 @@ public struct TodayWidgetSnapshotFactory { focusedCount: displayedTodos.filter(\.isPinned).count, overdueCount: displayedTodos.filter { isOverdue($0, now: now) }.count, dueSoonCount: displayedTodos.filter { isDueSoon($0, now: now) }.count, - sections: SectionCategory.allCases.compactMap { category in - let items = sections.items(for: category) - guard !items.isEmpty else { return nil } - - return TodayWidgetSectionSnapshot( - category: category.rawValue, - items: items.map { - WidgetTodoSnapshotItem( - id: $0.id, - number: $0.number, - title: $0.title, - isPinned: $0.isPinned, - dueDate: $0.dueDate - ) - } - ) - } + sections: snapshotSections(from: sections) ) } @@ -173,6 +157,29 @@ public struct TodayWidgetSnapshotFactory { return collection } + private func snapshotSections(from sections: SectionCollection) -> [TodayWidgetSectionSnapshot] { + let items = SectionCategory.allCases + .flatMap { sections.items(for: $0) } + .prefix(3) + .map { + WidgetTodoSnapshotItem( + id: $0.id, + number: $0.number, + title: $0.title, + isPinned: $0.isPinned, + dueDate: $0.dueDate + ) + } + + guard !items.isEmpty else { return [] } + return [ + TodayWidgetSectionSnapshot( + category: "items", + items: items + ) + ] + } + private func isOverdue( _ item: TodayWidgetTodoItem, now: Date diff --git a/Widget/DevLogWidgetCore/Tests/Today/TodayWidgetSnapshotFactoryTests.swift b/Widget/DevLogWidgetCore/Tests/Today/TodayWidgetSnapshotFactoryTests.swift index dc029774..a25962a7 100644 --- a/Widget/DevLogWidgetCore/Tests/Today/TodayWidgetSnapshotFactoryTests.swift +++ b/Widget/DevLogWidgetCore/Tests/Today/TodayWidgetSnapshotFactoryTests.swift @@ -11,8 +11,8 @@ import DevLogCore @testable import DevLogWidgetCore struct TodayWidgetSnapshotFactoryTests { - @Test("Today 위젯 스냅샷은 화면 규칙과 같은 순서로 섹션과 요약 수치를 만든다") - func today_위젯_스냅샷은_화면_규칙과_같은_순서로_섹션과_요약_수치를_만든다() throws { + @Test("Today 위젯 스냅샷은 화면 규칙과 같은 순서로 저장 항목과 요약 수치를 만든다") + func today_위젯_스냅샷은_화면_규칙과_같은_순서로_저장_항목과_요약_수치를_만든다() throws { let calendar = Calendar(identifier: .gregorian) let now = try #require(calendar.date(from: DateComponents(year: 2026, month: 4, day: 17))) let factory = TodayWidgetSnapshotFactory(calendar: calendar) @@ -27,12 +27,8 @@ struct TodayWidgetSnapshotFactoryTests { #expect(snapshot.focusedCount == 1) #expect(snapshot.overdueCount == 1) #expect(snapshot.dueSoonCount == 2) - #expect(snapshot.sections.map(\.category) == ["focused", "overdue", "dueSoon", "later", "unscheduled"]) - #expect(snapshot.sections[0].items.map(\.title) == ["고정된 할 일"]) - #expect(snapshot.sections[1].items.map(\.title) == ["지난 일정"]) - #expect(snapshot.sections[2].items.map(\.title) == ["임박 일정"]) - #expect(snapshot.sections[3].items.map(\.title) == ["나중 일정"]) - #expect(snapshot.sections[4].items.map(\.title) == ["미정 일정"]) + #expect(snapshot.sections.flatMap(\.items).count == 3) + #expect(snapshot.sections.flatMap(\.items).map(\.title) == ["고정된 할 일", "지난 일정", "임박 일정"]) } @Test("Today 위젯 스냅샷은 화면과 같은 display option 필터를 적용한다") @@ -54,8 +50,7 @@ struct TodayWidgetSnapshotFactoryTests { #expect(snapshot.focusedCount == 1) #expect(snapshot.overdueCount == 0) #expect(snapshot.dueSoonCount == 1) - #expect(snapshot.sections.map(\.category) == ["focused"]) - #expect(snapshot.sections[0].items.map(\.title) == ["고정된 할 일"]) + #expect(snapshot.sections.flatMap(\.items).map(\.title) == ["고정된 할 일"]) } @Test("Today 위젯 스냅샷은 날짜 경계에 따라 일정 섹션을 구분한다") @@ -112,11 +107,8 @@ struct TodayWidgetSnapshotFactoryTests { #expect(snapshot.totalCount == 5) #expect(snapshot.overdueCount == 1) #expect(snapshot.dueSoonCount == 2) - #expect(snapshot.sections.map(\.category) == ["overdue", "dueSoon", "later", "unscheduled"]) - #expect(snapshot.sections[0].items.map(\.title) == ["지난 일정"]) - #expect(snapshot.sections[1].items.map(\.title) == ["오늘 일정", "7일 뒤 일정"]) - #expect(snapshot.sections[2].items.map(\.title) == ["8일 뒤 일정"]) - #expect(snapshot.sections[3].items.map(\.title) == ["미정 일정"]) + #expect(snapshot.sections.flatMap(\.items).count == 3) + #expect(snapshot.sections.flatMap(\.items).map(\.title) == ["지난 일정", "오늘 일정", "7일 뒤 일정"]) } private func makeTodayTodos( From 07dfb78d6d899bd39de203de474b4fb4e7b99f07 Mon Sep 17 00:00:00 2001 From: opficdev <162981733+opficdev@users.noreply.github.com> Date: Tue, 30 Jun 2026 12:03:52 +0900 Subject: [PATCH 11/12] =?UTF-8?q?refactor:=20Today=20=EC=9C=84=EC=A0=AF=20?= =?UTF-8?q?=EC=8A=A4=EB=83=85=EC=83=B7=20=ED=95=AD=EB=AA=A9=20=EA=B5=AC?= =?UTF-8?q?=EC=A1=B0=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Widget/WidgetSnapshotUpdaterTests.swift | 25 ++++++++----------- .../Sources/Today/TodayWidgetSnapshot.swift | 9 ++----- .../Today/TodayWidgetSnapshotFactory.swift | 20 +++++---------- .../TodayWidgetSnapshotFactoryTests.swift | 10 ++++---- .../Today/TodayTodoWidgetEntryView.swift | 9 +++---- .../Today/TodayWidgetSnapshot.swift | 9 ++----- 6 files changed, 28 insertions(+), 54 deletions(-) diff --git a/Application/DevLogWidget/Tests/Widget/WidgetSnapshotUpdaterTests.swift b/Application/DevLogWidget/Tests/Widget/WidgetSnapshotUpdaterTests.swift index fdcd5b1d..1757ab38 100644 --- a/Application/DevLogWidget/Tests/Widget/WidgetSnapshotUpdaterTests.swift +++ b/Application/DevLogWidget/Tests/Widget/WidgetSnapshotUpdaterTests.swift @@ -31,7 +31,7 @@ struct WidgetSnapshotUpdaterTests { let snapshot = try #require(try fixture.snapshotStore.loadTodaySnapshot()) #expect(snapshot.totalCount == 1) - #expect(snapshot.sections.first?.items.first?.id == todo.id) + #expect(snapshot.items.first?.id == todo.id) } @Test("Heatmap 스냅샷 갱신은 Heatmap 스냅샷을 저장한다") @@ -152,7 +152,7 @@ struct WidgetSnapshotUpdaterTests { let snapshot = try #require(try fixture.snapshotStore.loadTodaySnapshot()) #expect(snapshot.totalCount == 1) - #expect(snapshot.sections.flatMap(\.items).map(\.id) == ["focused"]) + #expect(snapshot.items.map(\.id) == ["focused"]) } @Test("저장된 원본이 없으면 재생성 요청은 기존 스냅샷을 덮지 않는다") @@ -166,18 +166,13 @@ struct WidgetSnapshotUpdaterTests { focusedCount: 0, overdueCount: 0, dueSoonCount: 1, - sections: [ - TodayWidgetSectionSnapshot( - category: "dueSoon", - items: [ - WidgetTodoSnapshotItem( - id: "existing", - number: 1, - title: "existing", - isPinned: false, - dueDate: now - ) - ] + items: [ + WidgetTodayTodoSnapshot( + id: "existing", + number: 1, + title: "existing", + isPinned: false, + dueDate: now ) ] ) @@ -187,7 +182,7 @@ struct WidgetSnapshotUpdaterTests { let snapshot = try #require(try fixture.snapshotStore.loadTodaySnapshot()) #expect(snapshot.totalCount == 1) - #expect(snapshot.sections.flatMap(\.items).map(\.id) == ["existing"]) + #expect(snapshot.items.map(\.id) == ["existing"]) } @Test("Todo 삭제 원본 반영은 Today에서 제거하고 Heatmap 삭제 활동을 갱신한다") diff --git a/Widget/DevLogWidgetCore/Sources/Today/TodayWidgetSnapshot.swift b/Widget/DevLogWidgetCore/Sources/Today/TodayWidgetSnapshot.swift index fcb0d3d0..bd4c6d8b 100644 --- a/Widget/DevLogWidgetCore/Sources/Today/TodayWidgetSnapshot.swift +++ b/Widget/DevLogWidgetCore/Sources/Today/TodayWidgetSnapshot.swift @@ -13,15 +13,10 @@ public struct TodayWidgetSnapshot: Codable, Equatable { let focusedCount: Int let overdueCount: Int let dueSoonCount: Int - let sections: [TodayWidgetSectionSnapshot] + let items: [WidgetTodayTodoSnapshot] } -public struct TodayWidgetSectionSnapshot: Codable, Equatable { - let category: String - let items: [WidgetTodoSnapshotItem] -} - -public struct WidgetTodoSnapshotItem: Codable, Equatable { +public struct WidgetTodayTodoSnapshot: Codable, Equatable { let id: String let number: Int let title: String diff --git a/Widget/DevLogWidgetCore/Sources/Today/TodayWidgetSnapshotFactory.swift b/Widget/DevLogWidgetCore/Sources/Today/TodayWidgetSnapshotFactory.swift index 02aedebb..fa1e375c 100644 --- a/Widget/DevLogWidgetCore/Sources/Today/TodayWidgetSnapshotFactory.swift +++ b/Widget/DevLogWidgetCore/Sources/Today/TodayWidgetSnapshotFactory.swift @@ -78,7 +78,7 @@ public struct TodayWidgetSnapshotFactory { from: todayWidgetTodoItems, displayOptions: displayOptions ) - let sections = groupedSectionItems( + let collection = groupedSectionItems( from: displayedTodos, now: now ) @@ -89,7 +89,7 @@ public struct TodayWidgetSnapshotFactory { focusedCount: displayedTodos.filter(\.isPinned).count, overdueCount: displayedTodos.filter { isOverdue($0, now: now) }.count, dueSoonCount: displayedTodos.filter { isDueSoon($0, now: now) }.count, - sections: snapshotSections(from: sections) + items: snapshotItems(from: collection) ) } @@ -157,12 +157,12 @@ public struct TodayWidgetSnapshotFactory { return collection } - private func snapshotSections(from sections: SectionCollection) -> [TodayWidgetSectionSnapshot] { - let items = SectionCategory.allCases - .flatMap { sections.items(for: $0) } + private func snapshotItems(from collection: SectionCollection) -> [WidgetTodayTodoSnapshot] { + SectionCategory.allCases + .flatMap { collection.items(for: $0) } .prefix(3) .map { - WidgetTodoSnapshotItem( + WidgetTodayTodoSnapshot( id: $0.id, number: $0.number, title: $0.title, @@ -170,14 +170,6 @@ public struct TodayWidgetSnapshotFactory { dueDate: $0.dueDate ) } - - guard !items.isEmpty else { return [] } - return [ - TodayWidgetSectionSnapshot( - category: "items", - items: items - ) - ] } private func isOverdue( diff --git a/Widget/DevLogWidgetCore/Tests/Today/TodayWidgetSnapshotFactoryTests.swift b/Widget/DevLogWidgetCore/Tests/Today/TodayWidgetSnapshotFactoryTests.swift index a25962a7..b873ccf4 100644 --- a/Widget/DevLogWidgetCore/Tests/Today/TodayWidgetSnapshotFactoryTests.swift +++ b/Widget/DevLogWidgetCore/Tests/Today/TodayWidgetSnapshotFactoryTests.swift @@ -27,8 +27,8 @@ struct TodayWidgetSnapshotFactoryTests { #expect(snapshot.focusedCount == 1) #expect(snapshot.overdueCount == 1) #expect(snapshot.dueSoonCount == 2) - #expect(snapshot.sections.flatMap(\.items).count == 3) - #expect(snapshot.sections.flatMap(\.items).map(\.title) == ["고정된 할 일", "지난 일정", "임박 일정"]) + #expect(snapshot.items.count == 3) + #expect(snapshot.items.map(\.title) == ["고정된 할 일", "지난 일정", "임박 일정"]) } @Test("Today 위젯 스냅샷은 화면과 같은 display option 필터를 적용한다") @@ -50,7 +50,7 @@ struct TodayWidgetSnapshotFactoryTests { #expect(snapshot.focusedCount == 1) #expect(snapshot.overdueCount == 0) #expect(snapshot.dueSoonCount == 1) - #expect(snapshot.sections.flatMap(\.items).map(\.title) == ["고정된 할 일"]) + #expect(snapshot.items.map(\.title) == ["고정된 할 일"]) } @Test("Today 위젯 스냅샷은 날짜 경계에 따라 일정 섹션을 구분한다") @@ -107,8 +107,8 @@ struct TodayWidgetSnapshotFactoryTests { #expect(snapshot.totalCount == 5) #expect(snapshot.overdueCount == 1) #expect(snapshot.dueSoonCount == 2) - #expect(snapshot.sections.flatMap(\.items).count == 3) - #expect(snapshot.sections.flatMap(\.items).map(\.title) == ["지난 일정", "오늘 일정", "7일 뒤 일정"]) + #expect(snapshot.items.count == 3) + #expect(snapshot.items.map(\.title) == ["지난 일정", "오늘 일정", "7일 뒤 일정"]) } private func makeTodayTodos( diff --git a/Widget/DevLogWidgetExtension/Today/TodayTodoWidgetEntryView.swift b/Widget/DevLogWidgetExtension/Today/TodayTodoWidgetEntryView.swift index 0e364be5..73b34e46 100644 --- a/Widget/DevLogWidgetExtension/Today/TodayTodoWidgetEntryView.swift +++ b/Widget/DevLogWidgetExtension/Today/TodayTodoWidgetEntryView.swift @@ -94,14 +94,11 @@ struct TodayTodoWidgetEntryView: View { } } - private func displayedItems(from snapshot: TodayWidgetSnapshot) -> [WidgetTodoSnapshotItem] { - Array(snapshot - .sections - .flatMap(\.items) - .prefix(3)) + private func displayedItems(from snapshot: TodayWidgetSnapshot) -> [WidgetTodayTodoSnapshot] { + Array(snapshot.items.prefix(3)) } - private func todoRow(_ item: WidgetTodoSnapshotItem, lineLimit: Int? = nil) -> some View { + private func todoRow(_ item: WidgetTodayTodoSnapshot, lineLimit: Int? = nil) -> some View { HStack(spacing: 6) { Text("#\(item.number)") .font(.caption2) diff --git a/Widget/DevLogWidgetExtension/Today/TodayWidgetSnapshot.swift b/Widget/DevLogWidgetExtension/Today/TodayWidgetSnapshot.swift index 389044ec..71145aef 100644 --- a/Widget/DevLogWidgetExtension/Today/TodayWidgetSnapshot.swift +++ b/Widget/DevLogWidgetExtension/Today/TodayWidgetSnapshot.swift @@ -13,15 +13,10 @@ struct TodayWidgetSnapshot: Decodable, Equatable { let focusedCount: Int let overdueCount: Int let dueSoonCount: Int - let sections: [TodayWidgetSectionSnapshot] + let items: [WidgetTodayTodoSnapshot] } -struct TodayWidgetSectionSnapshot: Decodable, Equatable { - let category: String - let items: [WidgetTodoSnapshotItem] -} - -struct WidgetTodoSnapshotItem: Decodable, Equatable { +struct WidgetTodayTodoSnapshot: Decodable, Equatable { let id: String let number: Int let title: String From 176eeaee6190ca3de5c85c89619de955a197180b Mon Sep 17 00:00:00 2001 From: opficdev <162981733+opficdev@users.noreply.github.com> Date: Tue, 30 Jun 2026 12:30:17 +0900 Subject: [PATCH 12/12] =?UTF-8?q?fix:=20=EC=9C=84=EC=A0=AF=20=EC=8A=A4?= =?UTF-8?q?=EB=83=85=EC=83=B7=20=EC=9B=90=EB=B3=B8=20=EA=B0=B1=EC=8B=A0=20?= =?UTF-8?q?=EB=88=84=EB=9D=BD=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Sources/Widget/WidgetSnapshotUpdaterImpl.swift | 10 +++++----- .../Tests/Widget/WidgetSnapshotUpdaterTests.swift | 6 +++--- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/Application/DevLogWidget/Sources/Widget/WidgetSnapshotUpdaterImpl.swift b/Application/DevLogWidget/Sources/Widget/WidgetSnapshotUpdaterImpl.swift index fd35041d..f21cdbe3 100644 --- a/Application/DevLogWidget/Sources/Widget/WidgetSnapshotUpdaterImpl.swift +++ b/Application/DevLogWidget/Sources/Widget/WidgetSnapshotUpdaterImpl.swift @@ -124,8 +124,9 @@ final class WidgetSnapshotUpdaterImpl: WidgetSnapshotUpdater { now: Date = Date() ) { lock.lock() + let todo = sourceTodo(id: todoId) source.todayTodos.removeAll { $0.id == todoId } - if let todo = sourceTodo(id: todoId) { + if let todo { upsertHeatmapSource(todo.withDeletedAt(deletedAt)) } lock.unlock() @@ -146,10 +147,9 @@ final class WidgetSnapshotUpdaterImpl: WidgetSnapshotUpdater { ) { lock.lock() if let todo = sourceTodo(id: todoId) { - upsertTodaySource(todo.withDeletedAt(nil)) - } - if let todo = sourceTodo(id: todoId) { - upsertHeatmapSource(todo.withDeletedAt(nil)) + let restored = todo.withDeletedAt(nil) + upsertTodaySource(restored) + upsertHeatmapSource(restored) } lock.unlock() diff --git a/Application/DevLogWidget/Tests/Widget/WidgetSnapshotUpdaterTests.swift b/Application/DevLogWidget/Tests/Widget/WidgetSnapshotUpdaterTests.swift index 1757ab38..373736ce 100644 --- a/Application/DevLogWidget/Tests/Widget/WidgetSnapshotUpdaterTests.swift +++ b/Application/DevLogWidget/Tests/Widget/WidgetSnapshotUpdaterTests.swift @@ -185,8 +185,8 @@ struct WidgetSnapshotUpdaterTests { #expect(snapshot.items.map(\.id) == ["existing"]) } - @Test("Todo 삭제 원본 반영은 Today에서 제거하고 Heatmap 삭제 활동을 갱신한다") - func todo_삭제_원본_반영은_today에서_제거하고_heatmap_삭제_활동을_갱신한다() throws { + @Test("Todo 삭제 원본 반영은 Today 원본에만 있는 Todo도 Heatmap 삭제 활동으로 갱신한다") + func todo_삭제_원본_반영은_today_원본에만_있는_todo도_heatmap_삭제_활동으로_갱신한다() throws { let calendar = Calendar(identifier: .gregorian) let quarterStart = try #require(calendar.date(from: DateComponents(year: 2026, month: 4, day: 1))) let createdAt = try #require(calendar.date(from: DateComponents(year: 2026, month: 4, day: 2))) @@ -205,7 +205,7 @@ struct WidgetSnapshotUpdaterTests { now: now ) fixture.updater.updateHeatmapSnapshot( - createdTodos: [todo], + createdTodos: [], completedTodos: [], deletedTodos: [], quarterStart: quarterStart,