From d08a639b9977118fe1e76037057291e3a3fdcb8a Mon Sep 17 00:00:00 2001 From: dlrjswns Date: Thu, 20 Aug 2026 23:48:47 +0900 Subject: [PATCH 1/7] =?UTF-8?q?[FEAT]=20yearMonthWithHypen=ED=8F=AC?= =?UTF-8?q?=EB=A7=B7=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- GAMSS/Sources/Core/DateFormatterFactory.swift | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/GAMSS/Sources/Core/DateFormatterFactory.swift b/GAMSS/Sources/Core/DateFormatterFactory.swift index 3053bf6..40c0328 100644 --- a/GAMSS/Sources/Core/DateFormatterFactory.swift +++ b/GAMSS/Sources/Core/DateFormatterFactory.swift @@ -21,8 +21,15 @@ enum DateFormatterFactory { return formatter } + /// `yyyy-MM-dd` + static var dateWithHypen: DateFormatter { + let formatter = dateFormatter() + formatter.dateFormat = "yyyy-MM-dd" + return formatter + } + /// `yyyy-MM` - static var dateWithHyphen: DateFormatter { + static var yearMonthWithHypen: DateFormatter { let formatter = dateFormatter() formatter.dateFormat = "yyyy-MM" return formatter From 83cb7e2fbf6a23639f82fda574aea69bcf32bae3 Mon Sep 17 00:00:00 2001 From: dlrjswns Date: Thu, 20 Aug 2026 23:49:05 +0900 Subject: [PATCH 2/7] =?UTF-8?q?[FIX]=20API=EC=9D=91=EB=8B=B5=EA=B5=AC?= =?UTF-8?q?=EC=A1=B0=EC=97=90=20=EB=A7=9E=EC=B6=B0=20=EC=BD=94=EB=93=9C=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- GAMSS/Sources/Data/Repository/DefaultCardRepository.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/GAMSS/Sources/Data/Repository/DefaultCardRepository.swift b/GAMSS/Sources/Data/Repository/DefaultCardRepository.swift index aa18912..44a3530 100644 --- a/GAMSS/Sources/Data/Repository/DefaultCardRepository.swift +++ b/GAMSS/Sources/Data/Repository/DefaultCardRepository.swift @@ -43,13 +43,13 @@ final class DefaultCardRepository: CardRepository { } func fetchCardsByDate(yearMonth: Date, emotion: Emotion) async throws -> [DailyEmotion] { - let yearMonth = DateFormatterFactory.dateWithHyphen.string(from: yearMonth) + let yearMonth = DateFormatterFactory.yearMonthWithHypen.string(from: yearMonth) let response = try await networkManager.request( CardEndpoint.fetchCardsByDate(yearMonth: yearMonth, emotion: emotion.rawValue), responseType: APIResponse<[FetchCardsByDateResponseDTO]>.self ) return response.data.compactMap { response in - guard let date = DateFormatterFactory.dateWithDot.date(from: response.date) else { + guard let date = DateFormatterFactory.dateWithHypen.date(from: response.date) else { return nil } From 0a2fd47072828db785d240429573afe1c1a87b9b Mon Sep 17 00:00:00 2001 From: dlrjswns Date: Fri, 21 Aug 2026 00:51:11 +0900 Subject: [PATCH 3/7] =?UTF-8?q?[FEAT]=20=EC=84=A0=ED=83=9D=ED=95=9C=20?= =?UTF-8?q?=EB=85=B8=ED=8A=B8=EC=97=90=20=EB=8C=80=ED=95=9C=20=EB=AA=A8?= =?UTF-8?q?=EB=8B=AC=20=EB=A1=9C=EC=A7=81=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Archive/Detail/ArchiveDetailView.swift | 18 ++++++++++++++++ .../Detail/ArchiveDetailViewModel.swift | 2 +- .../Detail/DropStack/DropStackScene.swift | 21 ++++++++++++++++--- .../CardDetail/CardDetailView.swift | 16 +++++--------- .../CardDetail/CardDetailViewModel.swift | 17 +-------------- 5 files changed, 43 insertions(+), 31 deletions(-) diff --git a/GAMSS/Sources/Presentation/Archive/Detail/ArchiveDetailView.swift b/GAMSS/Sources/Presentation/Archive/Detail/ArchiveDetailView.swift index 453cbe4..89b3942 100644 --- a/GAMSS/Sources/Presentation/Archive/Detail/ArchiveDetailView.swift +++ b/GAMSS/Sources/Presentation/Archive/Detail/ArchiveDetailView.swift @@ -14,6 +14,7 @@ struct ArchiveDetailView: View { @State private var scene = DropStackScene() @State private var isMonthPickerPresented = false @State private var isDeleteAllModalPresented = false + @State private var selectedNote: DropNote? private let title: String @@ -44,6 +45,9 @@ struct ArchiveDetailView: View { .onAppear { scene.scaleMode = .resizeFill scene.updateSize(proxy.size) + scene.onSelectNote = { note in + selectedNote = note + } scene.render(notes: viewModel.notes) } .onChange(of: proxy.size) { _, newSize in @@ -82,6 +86,20 @@ struct ArchiveDetailView: View { } } } + .fullScreenCover(item: $selectedNote) { note in + CardDetailView( + viewModel: CardDetailViewModel( + cardId: note.id, + getCardUseCase: GetCardUseCase( + cardRepository: DefaultCardRepository(networkManager: NetworkManager.shared) + ) + ), + onClose: { + selectedNote = nil + } + ) + .presentationBackground(.clear) + } if isDeleteAllModalPresented { ModalContainerView( isPresented: $isDeleteAllModalPresented diff --git a/GAMSS/Sources/Presentation/Archive/Detail/ArchiveDetailViewModel.swift b/GAMSS/Sources/Presentation/Archive/Detail/ArchiveDetailViewModel.swift index 5097fba..70c3af1 100644 --- a/GAMSS/Sources/Presentation/Archive/Detail/ArchiveDetailViewModel.swift +++ b/GAMSS/Sources/Presentation/Archive/Detail/ArchiveDetailViewModel.swift @@ -37,7 +37,7 @@ final class ArchiveDetailViewModel: ObservableObject { do { notes = try await fetchCardsByDateUseCase.execute(yearMonth: selectedMonth).map { dailyEmotion in - DropNote(id: dailyEmotion.conversationId, imageName: "cardFoldStepTwo") + DropNote(id: dailyEmotion.id, imageName: "cardFoldStepTwo") } } catch { notes = [] diff --git a/GAMSS/Sources/Presentation/Archive/Detail/DropStack/DropStackScene.swift b/GAMSS/Sources/Presentation/Archive/Detail/DropStack/DropStackScene.swift index 41d2169..a5e8f99 100644 --- a/GAMSS/Sources/Presentation/Archive/Detail/DropStack/DropStackScene.swift +++ b/GAMSS/Sources/Presentation/Archive/Detail/DropStack/DropStackScene.swift @@ -8,12 +8,15 @@ import SpriteKit final class DropStackScene: SKScene { + var onSelectNote: ((DropNote) -> Void)? + private let floorNodeName = "drop-floor" private let boxNodeName = "drop-note" private let dropSize = CGSize(width: 80, height: 80) private let floorHeight: CGFloat = 12 private var pendingNotes: [DropNote] = [] + private var renderedNotes: [DropNote] = [] private var isAttachedToView = false override func didMove(to view: SKView) { @@ -46,11 +49,21 @@ final class DropStackScene: SKScene { func clear() { removeAllActions() pendingNotes = [] + renderedNotes = [] children .filter { $0.name == boxNodeName } .forEach { $0.removeFromParent() } } + override func touchesEnded(_ touches: Set, with event: UIEvent?) { + guard let location = touches.first?.location(in: self), + let id = nodes(at: location).first(where: { $0.name == boxNodeName })?.userData?["id"] as? Int, + let note = renderedNotes.first(where: { $0.id == id }) + else { return } + + onSelectNote?(note) + } + private func flushPendingNotesIfNeeded() { guard isAttachedToView, size.width > 0, size.height > 0, !pendingNotes.isEmpty else { return @@ -58,6 +71,7 @@ final class DropStackScene: SKScene { let notes = pendingNotes pendingNotes = [] + renderedNotes = notes removeAllActions() children @@ -67,7 +81,7 @@ final class DropStackScene: SKScene { for (index, note) in notes.enumerated() { let wait = SKAction.wait(forDuration: 0.07 * Double(index)) let spawn = SKAction.run { [weak self] in - self?.spawnOne(imageName: note.imageName) + self?.spawnOne(note: note) } run(.sequence([wait, spawn])) } @@ -93,9 +107,10 @@ final class DropStackScene: SKScene { addChild(floor) } - private func spawnOne(imageName: String) { - let node = SKSpriteNode(imageNamed: imageName) + private func spawnOne(note: DropNote) { + let node = SKSpriteNode(imageNamed: note.imageName) node.name = boxNodeName + node.userData = ["id": note.id] node.size = dropSize let minX = dropSize.width * 0.5 diff --git a/GAMSS/Sources/Presentation/CardDetail/CardDetailView.swift b/GAMSS/Sources/Presentation/CardDetail/CardDetailView.swift index 2cf4c76..c19a87d 100644 --- a/GAMSS/Sources/Presentation/CardDetail/CardDetailView.swift +++ b/GAMSS/Sources/Presentation/CardDetail/CardDetailView.swift @@ -74,7 +74,7 @@ struct CardDetailView: View { if isLoadFailure { await viewModel.loadCard() } else { - await discardCard() + } } } @@ -90,7 +90,7 @@ struct CardDetailView: View { VStack(spacing: Spacing.spacing200) { HStack(spacing: Spacing.spacing050) { OutlineButton(title: "기록 버리기") { - Task { await discardCard() } + } .frame(width: 97) @@ -135,21 +135,15 @@ struct CardDetailView: View { isShowingConversation = false } } - - private func discardCard() async { - let succeeded = await viewModel.deleteCard() - if succeeded { - onClose() - } - } } #Preview { CardDetailView( viewModel: CardDetailViewModel( cardId: 1, - getCardUseCase: GetCardUseCase(cardRepository: DefaultCardRepository(networkManager: NetworkManager.shared)), - deleteCardUseCase: DeleteCardUseCase(cardRepository: DefaultCardRepository(networkManager: NetworkManager.shared)) + getCardUseCase: GetCardUseCase( + cardRepository: DefaultCardRepository(networkManager: NetworkManager.shared) + ) ), onClose: {} ) diff --git a/GAMSS/Sources/Presentation/CardDetail/CardDetailViewModel.swift b/GAMSS/Sources/Presentation/CardDetail/CardDetailViewModel.swift index d12393a..b5a0c48 100644 --- a/GAMSS/Sources/Presentation/CardDetail/CardDetailViewModel.swift +++ b/GAMSS/Sources/Presentation/CardDetail/CardDetailViewModel.swift @@ -16,12 +16,10 @@ final class CardDetailViewModel: ObservableObject { private let cardId: Int private let getCardUseCase: GetCardUseCase - private let deleteCardUseCase: DeleteCardUseCase - init(cardId: Int, getCardUseCase: GetCardUseCase, deleteCardUseCase: DeleteCardUseCase) { + init(cardId: Int, getCardUseCase: GetCardUseCase) { self.cardId = cardId self.getCardUseCase = getCardUseCase - self.deleteCardUseCase = deleteCardUseCase } /// 카드가 아직 없고(로딩 실패로 보여줄 게 없음) 알럿이 떠 있으면, 알럿의 "닫기"가 화면 자체를 @@ -39,17 +37,4 @@ final class CardDetailViewModel: ObservableObject { alertMessage = "카드를 불러오지 못했어요" } } - - @discardableResult - func deleteCard() async -> Bool { - isLoading = true - defer { isLoading = false } - do { - try await deleteCardUseCase.execute(cardId: cardId) - return true - } catch { - alertMessage = "카드를 삭제하지 못했어요" - return false - } - } } From dbe2db1f3ac8258be087d63791d62d0883d11c01 Mon Sep 17 00:00:00 2001 From: dlrjswns Date: Fri, 21 Aug 2026 00:57:48 +0900 Subject: [PATCH 4/7] =?UTF-8?q?[FIX]=20=EB=82=A0=EC=A7=9C=EB=B3=80?= =?UTF-8?q?=EA=B2=BD=EC=8B=9C=20=EC=9D=B4=EC=A0=84=20DropNote=EC=95=88?= =?UTF-8?q?=EB=B9=84=EC=9B=8C=EC=A7=80=EB=8A=94=20=EB=AC=B8=EC=A0=9C=20?= =?UTF-8?q?=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Presentation/Archive/Detail/ArchiveDetailViewModel.swift | 1 + .../Presentation/Archive/Detail/DropStack/DropStackScene.swift | 1 + 2 files changed, 2 insertions(+) diff --git a/GAMSS/Sources/Presentation/Archive/Detail/ArchiveDetailViewModel.swift b/GAMSS/Sources/Presentation/Archive/Detail/ArchiveDetailViewModel.swift index 70c3af1..593295a 100644 --- a/GAMSS/Sources/Presentation/Archive/Detail/ArchiveDetailViewModel.swift +++ b/GAMSS/Sources/Presentation/Archive/Detail/ArchiveDetailViewModel.swift @@ -47,6 +47,7 @@ final class ArchiveDetailViewModel: ObservableObject { func selectMonth(_ month: Date) async { selectedMonth = month + notes = [] await load() } diff --git a/GAMSS/Sources/Presentation/Archive/Detail/DropStack/DropStackScene.swift b/GAMSS/Sources/Presentation/Archive/Detail/DropStack/DropStackScene.swift index a5e8f99..d99bc68 100644 --- a/GAMSS/Sources/Presentation/Archive/Detail/DropStack/DropStackScene.swift +++ b/GAMSS/Sources/Presentation/Archive/Detail/DropStack/DropStackScene.swift @@ -42,6 +42,7 @@ final class DropStackScene: SKScene { } func render(notes: [DropNote]) { + clear() pendingNotes = notes flushPendingNotesIfNeeded() } From 03b56b874cfa308df78ca6dc430438826c1cf06b Mon Sep 17 00:00:00 2001 From: dlrjswns Date: Fri, 21 Aug 2026 01:03:37 +0900 Subject: [PATCH 5/7] =?UTF-8?q?[FEAT]=20=EB=8C=80=ED=99=94=EB=B9=84?= =?UTF-8?q?=EC=96=B4=EC=9E=88=EC=9D=84=EB=95=8C=20UI=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Archive/Detail/ArchiveDetailView.swift | 30 +++++++++++-------- 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/GAMSS/Sources/Presentation/Archive/Detail/ArchiveDetailView.swift b/GAMSS/Sources/Presentation/Archive/Detail/ArchiveDetailView.swift index 89b3942..bf2475e 100644 --- a/GAMSS/Sources/Presentation/Archive/Detail/ArchiveDetailView.swift +++ b/GAMSS/Sources/Presentation/Archive/Detail/ArchiveDetailView.swift @@ -40,19 +40,25 @@ struct ArchiveDetailView: View { ZStack { Color.colorWhite - GeometryReader { proxy in - SpriteView(scene: scene, options: [.allowsTransparency]) - .onAppear { - scene.scaleMode = .resizeFill - scene.updateSize(proxy.size) - scene.onSelectNote = { note in - selectedNote = note + if viewModel.notes.isEmpty, !viewModel.isLoading { + Text("아직 남겨둔 이야기가 없어요.") + .typography(.body3Regular) + .foregroundStyle(Color.colorGray500) + } else { + GeometryReader { proxy in + SpriteView(scene: scene, options: [.allowsTransparency]) + .onAppear { + scene.scaleMode = .resizeFill + scene.updateSize(proxy.size) + scene.onSelectNote = { note in + selectedNote = note + } + scene.render(notes: viewModel.notes) + } + .onChange(of: proxy.size) { _, newSize in + scene.updateSize(newSize) } - scene.render(notes: viewModel.notes) - } - .onChange(of: proxy.size) { _, newSize in - scene.updateSize(newSize) - } + } } } } From 024339cc3647647fd812ba8a3a4bc44e38ed56e3 Mon Sep 17 00:00:00 2001 From: dlrjswns Date: Fri, 21 Aug 2026 01:29:39 +0900 Subject: [PATCH 6/7] =?UTF-8?q?[ADD]=20noteStrip=EC=9D=B4=EB=AF=B8?= =?UTF-8?q?=EC=A7=80=20=EC=97=90=EC=85=8B=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../noteStrip.imageset/Contents.json | 23 ++++++++++++++++++ .../noteStrip.imageset/note_strip.png | Bin 0 -> 10278 bytes .../noteStrip.imageset/note_strip@2x.png | Bin 0 -> 26776 bytes .../noteStrip.imageset/note_strip@3x.png | Bin 0 -> 46021 bytes 4 files changed, 23 insertions(+) create mode 100644 GAMSS/Resources/Assets.xcassets/noteStrip.imageset/Contents.json create mode 100644 GAMSS/Resources/Assets.xcassets/noteStrip.imageset/note_strip.png create mode 100644 GAMSS/Resources/Assets.xcassets/noteStrip.imageset/note_strip@2x.png create mode 100644 GAMSS/Resources/Assets.xcassets/noteStrip.imageset/note_strip@3x.png diff --git a/GAMSS/Resources/Assets.xcassets/noteStrip.imageset/Contents.json b/GAMSS/Resources/Assets.xcassets/noteStrip.imageset/Contents.json new file mode 100644 index 0000000..7b9b44e --- /dev/null +++ b/GAMSS/Resources/Assets.xcassets/noteStrip.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "note_strip.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "note_strip@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "note_strip@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/GAMSS/Resources/Assets.xcassets/noteStrip.imageset/note_strip.png b/GAMSS/Resources/Assets.xcassets/noteStrip.imageset/note_strip.png new file mode 100644 index 0000000000000000000000000000000000000000..9436a28bba7a346e1ea3cf6b4a2dfc9f10030516 GIT binary patch literal 10278 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 literal 0 HcmV?d00001 diff --git a/GAMSS/Resources/Assets.xcassets/noteStrip.imageset/note_strip@2x.png b/GAMSS/Resources/Assets.xcassets/noteStrip.imageset/note_strip@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..716674614fc8d0d7dace2ee83d968110e9e2a86a GIT binary patch literal 26776 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%0A%ghQFPM#p;UPQfHucaV|!UzV!2)mmS zwp&RTj1@mpZ%&0_4&ucg*G;%1SWg_a4!VsL+sBMZ9|A!<&9{}IeJ1zX5;<~rj?Wz1 zje!m!@rMRUF}w~e3e)+IPE?n%#v5hVbbCfmINw%DlfFRHpX!y=hxP~n9B0u*K}2kc z?Fj9+gW#16FAiYNC~{qr`ZABZf!srZPJ`v!h%j_GjT*|kJMY{XNY0*FM3`RXWd&GZ z0Zif8s_TMt1dh;r)(H7d?@_T7lWAoH7>-IN{Vc2-oIdgI(b+8t-2TyL&z=p?6FMtk zXBjq?7qB&A83XD+A^2Oi4%4EL)XRG77cx8%n!OA{KiJcv4BDX_vNLa9HTbZWIDkDw zrgsT{4aH}aQ$7CKAEgTz+S>ZR_xJt_`1^nVzs@?99l~5w!NEw`Pvei*>5$Uc7EJms zNk~5TfhUJ@TqtLU$vl(nxN}I8aJsBJIog>KwXXl^KmA|fpZt^mNtA-uPk#BY{=@Wi zQ7ht~gV;pyFaE{)DSV|Ls3Hh|T}%KzU;2WIol%wGvQoldkaB0D5Xe!Ae1zgAJOG_sF|6 z?zMw2@)SvSs+&C1d-|fp%X6MrU{;T3ToM2Ip(X!EduQXnH}L-hjo+=`uZvP_00000 LNkvXXu0mjf>uSZ_ literal 0 HcmV?d00001 diff --git a/GAMSS/Resources/Assets.xcassets/noteStrip.imageset/note_strip@3x.png b/GAMSS/Resources/Assets.xcassets/noteStrip.imageset/note_strip@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..88e76a87258074cbddf3f0c78a044891f3f67ad7 GIT binary patch literal 46021 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 V=njMATHXKv002ovPDHLkV1n@f0H*)| literal 0 HcmV?d00001 From e8a135cde206dbc844aa3681dc84bc677c055166 Mon Sep 17 00:00:00 2001 From: dlrjswns Date: Fri, 21 Aug 2026 02:33:42 +0900 Subject: [PATCH 7/7] =?UTF-8?q?[FEAT]=20=EC=B9=B4=EB=93=9C=EB=B6=84?= =?UTF-8?q?=EC=87=84=ED=99=94=EB=A9=B4=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CardDetail/CardDetailView.swift | 25 ++- .../CardShred/CardShredView.swift | 205 ++++++++++++++++++ .../CardShred/CardShredViewModel.swift | 58 +++++ 3 files changed, 285 insertions(+), 3 deletions(-) create mode 100644 GAMSS/Sources/Presentation/CardShred/CardShredView.swift create mode 100644 GAMSS/Sources/Presentation/CardShred/CardShredViewModel.swift diff --git a/GAMSS/Sources/Presentation/CardDetail/CardDetailView.swift b/GAMSS/Sources/Presentation/CardDetail/CardDetailView.swift index c19a87d..926b458 100644 --- a/GAMSS/Sources/Presentation/CardDetail/CardDetailView.swift +++ b/GAMSS/Sources/Presentation/CardDetail/CardDetailView.swift @@ -13,6 +13,7 @@ struct CardDetailView: View { @StateObject private var viewModel: CardDetailViewModel @StateObject private var conversationHistoryViewModel: ConversationHistoryViewModel @State private var isShowingConversation = false + @State private var isShredPresented = false private let transitionDuration = 0.22 @@ -73,8 +74,6 @@ struct CardDetailView: View { Task { if isLoadFailure { await viewModel.loadCard() - } else { - } } } @@ -84,13 +83,33 @@ struct CardDetailView: View { Button("확인", role: .cancel) {} } } + .fullScreenCover(isPresented: $isShredPresented) { + if let card = viewModel.card { + CardShredView( + viewModel: CardShredViewModel( + cardId: card.id, + deleteCardUseCase: DeleteCardUseCase( + cardRepository: DefaultCardRepository(networkManager: NetworkManager.shared) + ) + ), + stripImageName: "noteStrip", + onBack: { + isShredPresented = false + }, + onComplete: { + isShredPresented = false + onClose() + } + ) + } + } } private var bottomActions: some View { VStack(spacing: Spacing.spacing200) { HStack(spacing: Spacing.spacing050) { OutlineButton(title: "기록 버리기") { - + isShredPresented = true } .frame(width: 97) diff --git a/GAMSS/Sources/Presentation/CardShred/CardShredView.swift b/GAMSS/Sources/Presentation/CardShred/CardShredView.swift new file mode 100644 index 0000000..10fb82a --- /dev/null +++ b/GAMSS/Sources/Presentation/CardShred/CardShredView.swift @@ -0,0 +1,205 @@ +// +// CardShredView.swift +// GAMSS +// +// Created by 이건준 on 8/21/26. +// + +import SwiftUI + +struct CardShredView: View { + let onBack: () -> Void + let onComplete: () -> Void + let stripImageName: String + + @StateObject private var viewModel: CardShredViewModel + + private let strips: [ShredStrip] = [ + .init(xRatio: 0.06, width: 36, height: 420), + .init(xRatio: 0.18, width: 32, height: 360), + .init(xRatio: 0.29, width: 38, height: 480), + .init(xRatio: 0.42, width: 34, height: 400), + .init(xRatio: 0.53, width: 40, height: 450), + .init(xRatio: 0.66, width: 33, height: 380), + .init(xRatio: 0.77, width: 37, height: 470), + .init(xRatio: 0.89, width: 31, height: 390) + ] + + init( + viewModel: CardShredViewModel, + stripImageName: String, + onBack: @escaping () -> Void, + onComplete: @escaping () -> Void + ) { + _viewModel = StateObject(wrappedValue: viewModel) + self.stripImageName = stripImageName + self.onBack = onBack + self.onComplete = onComplete + } + + var body: some View { + VStack(spacing: 0) { + header + .padding(.horizontal, 18) + .padding(.vertical, Spacing.spacing400) + + powerToggle + + paperArea + .frame(maxWidth: .infinity, maxHeight: .infinity) + .padding(.horizontal, 27) + + shredButton + .padding(.horizontal, 18) + .padding(.top, Spacing.spacing300) + .padding(.bottom, 42) + } + .frame(maxWidth: .infinity, maxHeight: .infinity) + .background(Color.colorWhite) + .toolbar(.hidden, for: .navigationBar) + .alert( + viewModel.alertMessage ?? "", + isPresented: Binding( + get: { viewModel.alertMessage != nil }, + set: { if !$0 { viewModel.alertMessage = nil } } + ) + ) { + Button("확인", role: .cancel) {} + } + } + + private var header: some View { + HStack(spacing: Spacing.spacing200) { + Button(action: onBack) { + Image(systemName: "chevron.left") + .foregroundStyle(Color.colorGray900) + } + + Text("비우기") + .typography(.subtitle2) + .foregroundStyle(Color.colorGray900) + + Spacer() + } + } + + private var powerToggle: some View { + HStack { + HStack(spacing: 0) { + Text("OFF") + .typography(.body4Medium) + .foregroundStyle(viewModel.isPowerOn ? Color.colorGray500 : Color.colorWhite) + .padding(.horizontal, 8) + .frame(maxHeight: .infinity) + .background(viewModel.isPowerOn ? Color.clear : Color.colorApricot) + .clipShape(Capsule()) + + Text("ON") + .typography(.body4Medium) + .foregroundStyle(viewModel.isPowerOn ? Color.colorWhite : Color.colorGray500) + .padding(.horizontal, 8) + .frame(maxHeight: .infinity) + .background(viewModel.isPowerOn ? Color.colorGreen : Color.clear) + .clipShape(Capsule()) + } + .padding(4) + .frame(height: 40) + .background(Color.colorGray300) + .clipShape(Capsule()) + .overlay( + Capsule() + .strokeBorder(Color.colorGray400, lineWidth: 1) + ) + + Spacer() + + ZStack { + Circle() + .fill(Color.colorGray400) + Circle() + .fill(viewModel.isPowerOn ? Color.colorGreen : Color.colorApricot) + .padding(6) + } + .frame(width: 30, height: 30) + } + .padding(.horizontal, 20) + .frame(maxWidth: .infinity) + .frame(height: 90) + .background(Color.colorGray100) + .allowsHitTesting(false) + } + + private var paperArea: some View { + GeometryReader { proxy in + ZStack(alignment: .topLeading) { + Color.colorWhite + + ForEach(strips) { strip in + Image(stripImageName) + .resizable() + .scaledToFit() + .frame(width: strip.width, height: strip.height, alignment: .top) + .offset( + x: proxy.size.width * strip.xRatio - strip.width * 0.5, + y: paperOffset(in: proxy.size.height, stripHeight: strip.height) + ) + } + } + .clipped() + } + } + + private var shredButton: some View { + Button { + if viewModel.isShredEnabled { + Task { + let succeeded = await viewModel.shred() + if succeeded { + onComplete() + } + } + } else { + withAnimation(.easeInOut(duration: 0.45)) { + viewModel.advance() + } + } + } label: { + Text("파쇄하기") + .typography(.title5) + .foregroundStyle(Color.colorWhite) + .frame(maxWidth: .infinity) + .frame(height: 52) + .background(viewModel.isShredEnabled ? Color.colorApricot : Color.colorGray900) + .clipShape(RoundedRectangle(cornerRadius: Radius.radius200)) + } + .disabled(viewModel.isSubmitting) + .buttonStyle(.plain) + } + + private func paperOffset(in areaHeight: CGFloat, stripHeight: CGFloat) -> CGFloat { + let startY = -stripHeight + 28 + let endY = areaHeight + 20 + return startY + (endY - startY) * viewModel.progress + } +} + +private struct ShredStrip: Identifiable { + let id = UUID() + let xRatio: CGFloat + let width: CGFloat + let height: CGFloat +} + +#Preview { + CardShredView( + viewModel: CardShredViewModel( + cardId: 1, + deleteCardUseCase: DeleteCardUseCase( + cardRepository: DefaultCardRepository(networkManager: NetworkManager.shared) + ) + ), + stripImageName: "noteStrip", + onBack: {}, + onComplete: {} + ) +} diff --git a/GAMSS/Sources/Presentation/CardShred/CardShredViewModel.swift b/GAMSS/Sources/Presentation/CardShred/CardShredViewModel.swift new file mode 100644 index 0000000..074b31a --- /dev/null +++ b/GAMSS/Sources/Presentation/CardShred/CardShredViewModel.swift @@ -0,0 +1,58 @@ +// +// CardShredViewModel.swift +// GAMSS +// +// Created by 이건준 on 8/21/26. +// + +import Combine +import Foundation + +@MainActor +final class CardShredViewModel: ObservableObject { + @Published private(set) var step = 0 + @Published private(set) var isSubmitting = false + @Published var alertMessage: String? + + private let cardId: Int + private let deleteCardUseCase: DeleteCardUseCase + private let requiredSteps = 4 + + init(cardId: Int, deleteCardUseCase: DeleteCardUseCase) { + self.cardId = cardId + self.deleteCardUseCase = deleteCardUseCase + } + + var isPowerOn: Bool { + step > 0 && step < requiredSteps + } + + var isShredEnabled: Bool { + step >= requiredSteps + } + + var progress: CGFloat { + CGFloat(step) / CGFloat(requiredSteps) + } + + func advance() { + guard step < requiredSteps else { return } + step += 1 + } + + @discardableResult + func shred() async -> Bool { + guard isShredEnabled, !isSubmitting else { return false } + + isSubmitting = true + defer { isSubmitting = false } + + do { + try await deleteCardUseCase.execute(cardId: cardId) + return true + } catch { + alertMessage = "기록을 파쇄하지 못했어요" + return false + } + } +}