From 68a55ae61c59a9b5f8e48fce247aa70130466aa1 Mon Sep 17 00:00:00 2001 From: jinwoong16 Date: Fri, 18 Nov 2022 21:20:24 +0900 Subject: [PATCH 1/3] Create slack-notify.yml --- .github/workflows/slack-notify.yml | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 .github/workflows/slack-notify.yml diff --git a/.github/workflows/slack-notify.yml b/.github/workflows/slack-notify.yml new file mode 100644 index 0000000..4a7543c --- /dev/null +++ b/.github/workflows/slack-notify.yml @@ -0,0 +1,12 @@ +on: push +name: Slack Notification Demo +jobs: + slackNotification: + name: Slack Notification + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Slack Notification + uses: rtCamp/action-slack-notify@v2 + env: + SLACK_WEBHOOK: ${{ secrets.https://hooks.slack.com/services/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 }} From 0e62de7f0fa4c9e39c666e0d7d20f3e3f76942dd Mon Sep 17 00:00:00 2001 From: jinwoong16 Date: Fri, 18 Nov 2022 21:33:13 +0900 Subject: [PATCH 2/3] Update slack-notify.yml --- .github/workflows/slack-notify.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/slack-notify.yml b/.github/workflows/slack-notify.yml index 4a7543c..aaf0409 100644 --- a/.github/workflows/slack-notify.yml +++ b/.github/workflows/slack-notify.yml @@ -9,4 +9,4 @@ jobs: - name: Slack Notification uses: rtCamp/action-slack-notify@v2 env: - SLACK_WEBHOOK: ${{ secrets.https://hooks.slack.com/services/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 }} + SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }} From 72ecc1f8f2a88c5bfb2ab1769f86e920b9b57d19 Mon Sep 17 00:00:00 2001 From: jjinwoong Date: Mon, 21 Nov 2022 15:23:12 +0900 Subject: [PATCH 3/3] =?UTF-8?q?[refactor]=20=EB=B3=80=EA=B2=BD=EC=82=AC?= =?UTF-8?q?=ED=95=AD=20=ED=95=A9=EC=9D=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DailyQuest.xcodeproj/project.pbxproj | 4 ++ .../UserQuestEntity+Mapping.swift | 10 ++-- .../DailyQuest/Domain/Entities/Quest.swift | 4 +- .../Repositories/QuestsRepository.swift | 58 +++++++++++++++++++ .../Browse/ViewModel/BrowseViewModel.swift | 24 ++++---- .../Presentation/Common/Cells/QuestCell.swift | 2 +- .../Home/ViewModel/QuestViewModel.swift | 8 +-- 7 files changed, 84 insertions(+), 26 deletions(-) create mode 100644 DailyQuest/DailyQuest/Domain/Interfaces/Repositories/QuestsRepository.swift diff --git a/DailyQuest/DailyQuest.xcodeproj/project.pbxproj b/DailyQuest/DailyQuest.xcodeproj/project.pbxproj index 5f346ae..b07ea3b 100644 --- a/DailyQuest/DailyQuest.xcodeproj/project.pbxproj +++ b/DailyQuest/DailyQuest.xcodeproj/project.pbxproj @@ -48,6 +48,7 @@ 34ACC364291DEF6100741371 /* FirebaseFirestore in Frameworks */ = {isa = PBXBuildFile; productRef = 34ACC363291DEF6100741371 /* FirebaseFirestore */; }; 34ACC366291DEF6100741371 /* FirebaseStorage in Frameworks */ = {isa = PBXBuildFile; productRef = 34ACC365291DEF6100741371 /* FirebaseStorage */; }; 34ACC36C291DF0DD00741371 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 34ACC36B291DF0DD00741371 /* GoogleService-Info.plist */; }; + 34CAE318292B19A3007653AD /* QuestsRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34CAE317292B19A3007653AD /* QuestsRepository.swift */; }; 34EE6EB72924C674005AF583 /* QuestView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34EE6EB62924C674005AF583 /* QuestView.swift */; }; 34EE6EB92924CAA1005AF583 /* QuestViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34EE6EB82924CAA1005AF583 /* QuestViewModel.swift */; }; A51189C329226E66008A9D33 /* UserQuestEntity+Mapping.swift in Sources */ = {isa = PBXBuildFile; fileRef = A51189C229226E66008A9D33 /* UserQuestEntity+Mapping.swift */; }; @@ -125,6 +126,7 @@ 34ACC34D291DE9C100741371 /* DailyQuestUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DailyQuestUITests.swift; sourceTree = ""; }; 34ACC34F291DE9C100741371 /* DailyQuestUITestsLaunchTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DailyQuestUITestsLaunchTests.swift; sourceTree = ""; }; 34ACC36B291DF0DD00741371 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; }; + 34CAE317292B19A3007653AD /* QuestsRepository.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QuestsRepository.swift; sourceTree = ""; }; 34EE6EB62924C674005AF583 /* QuestView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QuestView.swift; sourceTree = ""; }; 34EE6EB82924CAA1005AF583 /* QuestViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QuestViewModel.swift; sourceTree = ""; }; A51189C229226E66008A9D33 /* UserQuestEntity+Mapping.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UserQuestEntity+Mapping.swift"; sourceTree = ""; }; @@ -246,6 +248,7 @@ 3499551829232A05007AB99E /* Repositories */ = { isa = PBXGroup; children = ( + 34CAE317292B19A3007653AD /* QuestsRepository.swift */, ); path = Repositories; sourceTree = ""; @@ -734,6 +737,7 @@ 34A529E7292481E1001BAD34 /* BrowseCoordinator.swift in Sources */, 34A529D329247903001BAD34 /* TabCoordinator.swift in Sources */, 34EE6EB92924CAA1005AF583 /* QuestViewModel.swift in Sources */, + 34CAE318292B19A3007653AD /* QuestsRepository.swift in Sources */, 3449AD5D2922197000B87619 /* User.swift in Sources */, A51F01CD29233ABB0031ECA2 /* RealmUserInfoStorage.swift in Sources */, A51F01DA292345990031ECA2 /* BrowseQuest.swift in Sources */, diff --git a/DailyQuest/DailyQuest/Data/PersistentStorages/UserQuestsStorage/RealmStorage/EntityMapping/UserQuestEntity+Mapping.swift b/DailyQuest/DailyQuest/Data/PersistentStorages/UserQuestsStorage/RealmStorage/EntityMapping/UserQuestEntity+Mapping.swift index c1339ee..01b37bf 100644 --- a/DailyQuest/DailyQuest/Data/PersistentStorages/UserQuestsStorage/RealmStorage/EntityMapping/UserQuestEntity+Mapping.swift +++ b/DailyQuest/DailyQuest/Data/PersistentStorages/UserQuestsStorage/RealmStorage/EntityMapping/UserQuestEntity+Mapping.swift @@ -11,8 +11,8 @@ extension UserQuestEntity { convenience init(quest: Quest) { self.init(uuid: quest.uuid, title: quest.title, - startDay: quest.startDay, - endDay: quest.endDay, + startDay: Date(), // no more use + endDay: Date(), // no more use currentCount: quest.currentCount, totalCount: quest.totalCount) } @@ -20,11 +20,9 @@ extension UserQuestEntity { extension UserQuestEntity { func toDomain() -> Quest { - return Quest(uuid: uuid, + return Quest(groupId: UUID(), // update here + uuid: uuid, title: title, - startDay: startDay, - endDay: endDay, - repeat: `repeat`, currentCount: currentCount, totalCount: totalCount) } diff --git a/DailyQuest/DailyQuest/Domain/Entities/Quest.swift b/DailyQuest/DailyQuest/Domain/Entities/Quest.swift index f054b45..b9b274a 100644 --- a/DailyQuest/DailyQuest/Domain/Entities/Quest.swift +++ b/DailyQuest/DailyQuest/Domain/Entities/Quest.swift @@ -8,11 +8,9 @@ import Foundation struct Quest { + let groupId: UUID let uuid: UUID let title: String - let startDay: Date - let endDay: Date - let `repeat`: Int var currentCount: Int let totalCount: Int diff --git a/DailyQuest/DailyQuest/Domain/Interfaces/Repositories/QuestsRepository.swift b/DailyQuest/DailyQuest/Domain/Interfaces/Repositories/QuestsRepository.swift new file mode 100644 index 0000000..ad6f8fa --- /dev/null +++ b/DailyQuest/DailyQuest/Domain/Interfaces/Repositories/QuestsRepository.swift @@ -0,0 +1,58 @@ +// +// QuestsRepository.swift +// DailyQuest +// +// Created by jinwoong Kim on 2022/11/21. +// + +import Foundation + +import RxSwift + +protocol QuestsRepository { + /** + 해당 퀘스트를 저장합니다. + + - Parameters: + - quest: 저장할 퀘스트입니다. + - Returns: 성공시 Quest를, 실패시, error를 방출하는 Observable입니다. + */ + func save(with quest: [Quest]) -> Single<[Quest]> + + /** + 해당 날짜의 퀘스트 배열을 받아옵니다. + + - Parameters: + - date: 받아오길 원하는 날짜입니다. + - Returns: Quest의 배열을 방출하는 Observable입니다. 비어있다면 비어있는 배열을 방출합니다. + */ + func fetch(by date: Date) -> Observable<[Quest]> + + /** + 해당 날짜의 퀘스트 값(`currentCount`)을 업데이트 합니다. + + - Parameters: + - quest: 업데이트될 퀘스트입니다. + - Returns: 성공시 Quest를, 실패시 error를 방출하는 Observable입니다. + */ + func update(with quest: Quest) -> Single + + /** + 해당 날짜에 해당하는 퀘스트의 값을 업데이트 합니다. + + - Parameters: + - questId: 삭제하고자 하는 퀘스트의 id입니다. + - Returns: 성공시 해당 Quest를, 실패시 error를 방출하는 Observable입니다. + */ + func delete(with questId: UUID) -> Single + + /** + 해당 group의 Quest를 모두 삭제합니다. + + + - Parameters: + - groupId: 삭제하고자 하는 퀘스트 그룹의 id입니다. + - Returns: 성공시 해당 Quest 배열을, 실패시 error를 방출하는 Observable입니다. + */ + func deleteAll(with groupId: UUID) -> Single<[Quest]> +} diff --git a/DailyQuest/DailyQuest/Presentation/Browse/ViewModel/BrowseViewModel.swift b/DailyQuest/DailyQuest/Presentation/Browse/ViewModel/BrowseViewModel.swift index c7bd8b6..f16e610 100644 --- a/DailyQuest/DailyQuest/Presentation/Browse/ViewModel/BrowseViewModel.swift +++ b/DailyQuest/DailyQuest/Presentation/Browse/ViewModel/BrowseViewModel.swift @@ -12,26 +12,26 @@ import RxSwift final class BrowseViewModel { let user1 = User(uuid: "", nickName: "jinwoong", profile: Data(), backgroundImage: Data(), description: "") let quests1 = [ - Quest(uuid: UUID(), title: "물마시기", startDay: Date(), endDay: Date(), repeat: 1, currentCount: 2, totalCount: 5), - Quest(uuid: UUID(), title: "코딩하기", startDay: Date(), endDay: Date(), repeat: 1, currentCount: 0, totalCount: 10) + Quest(groupId: UUID(), uuid: UUID(), title: "물마시기", currentCount: 2, totalCount: 5), + Quest(groupId: UUID(),uuid: UUID(), title: "코딩하기", currentCount: 0, totalCount: 10) ] let user2 = User(uuid: "", nickName: "someone", profile: Data(), backgroundImage: Data(), description: "") let quests2 = [ - Quest(uuid: UUID(), title: "물마시기", startDay: Date(), endDay: Date(), repeat: 1, currentCount: 4, totalCount: 5), - Quest(uuid: UUID(), title: "책읽기", startDay: Date(), endDay: Date(), repeat: 1, currentCount: 9, totalCount: 20), - Quest(uuid: UUID(), title: "달리기", startDay: Date(), endDay: Date(), repeat: 1, currentCount: 4, totalCount: 9), - Quest(uuid: UUID(), title: "잠자기", startDay: Date(), endDay: Date(), repeat: 1, currentCount: 1, totalCount: 1) + Quest(groupId: UUID(),uuid: UUID(), title: "물마시기", currentCount: 4, totalCount: 5), + Quest(groupId: UUID(),uuid: UUID(), title: "책읽기", currentCount: 9, totalCount: 20), + Quest(groupId: UUID(),uuid: UUID(), title: "달리기", currentCount: 4, totalCount: 9), + Quest(groupId: UUID(),uuid: UUID(), title: "잠자기", currentCount: 1, totalCount: 1) ] let user3 = User(uuid: "", nickName: "Max...", profile: Data(), backgroundImage: Data(), description: "") let quests3 = [ - Quest(uuid: UUID(), title: "물마시기", startDay: Date(), endDay: Date(), repeat: 1, currentCount: 4, totalCount: 5), - Quest(uuid: UUID(), title: "그림 그리기", startDay: Date(), endDay: Date(), repeat: 1, currentCount: 1, totalCount: 2), - Quest(uuid: UUID(), title: "달리기", startDay: Date(), endDay: Date(), repeat: 1, currentCount: 4, totalCount: 9), - Quest(uuid: UUID(), title: "책읽기", startDay: Date(), endDay: Date(), repeat: 1, currentCount: 1, totalCount: 1), - Quest(uuid: UUID(), title: "잠자기", startDay: Date(), endDay: Date(), repeat: 1, currentCount: 1, totalCount: 1), - Quest(uuid: UUID(), title: "행복하기", startDay: Date(), endDay: Date(), repeat: 1, currentCount: 0, totalCount: 1) + Quest(groupId: UUID(),uuid: UUID(), title: "물마시기", currentCount: 4, totalCount: 5), + Quest(groupId: UUID(),uuid: UUID(), title: "그림 그리기", currentCount: 1, totalCount: 2), + Quest(groupId: UUID(),uuid: UUID(), title: "달리기", currentCount: 4, totalCount: 9), + Quest(groupId: UUID(),uuid: UUID(), title: "책읽기", currentCount: 1, totalCount: 1), + Quest(groupId: UUID(),uuid: UUID(), title: "잠자기", currentCount: 1, totalCount: 1), + Quest(groupId: UUID(),uuid: UUID(), title: "행복하기", currentCount: 0, totalCount: 1) ] let data: Observable<[(User, [Quest])]> diff --git a/DailyQuest/DailyQuest/Presentation/Common/Cells/QuestCell.swift b/DailyQuest/DailyQuest/Presentation/Common/Cells/QuestCell.swift index 2979b03..5d94e47 100644 --- a/DailyQuest/DailyQuest/Presentation/Common/Cells/QuestCell.swift +++ b/DailyQuest/DailyQuest/Presentation/Common/Cells/QuestCell.swift @@ -111,7 +111,7 @@ struct QuestCellPreview: PreviewProvider{ static var previews: some View { UIViewPreview { let cell = QuestCell(frame: .zero) - let quest = Quest(uuid: UUID(), title: "my quest", startDay: Date(), endDay: Date(), repeat: 1, currentCount: 2, totalCount: 5) + let quest = Quest(groupId: UUID(), uuid: UUID(), title: "my quest", currentCount: 2, totalCount: 5) cell.setup(with: quest) return cell diff --git a/DailyQuest/DailyQuest/Presentation/Home/ViewModel/QuestViewModel.swift b/DailyQuest/DailyQuest/Presentation/Home/ViewModel/QuestViewModel.swift index f06a5db..48e5ef5 100644 --- a/DailyQuest/DailyQuest/Presentation/Home/ViewModel/QuestViewModel.swift +++ b/DailyQuest/DailyQuest/Presentation/Home/ViewModel/QuestViewModel.swift @@ -11,10 +11,10 @@ import RxSwift final class QuestViewModel { let quests = [ - Quest(uuid: UUID(), title: "물마시기", startDay: Date(), endDay: Date(), repeat: 1, currentCount: 4, totalCount: 5), - Quest(uuid: UUID(), title: "책읽기", startDay: Date(), endDay: Date(), repeat: 1, currentCount: 9, totalCount: 20), - Quest(uuid: UUID(), title: "달리기", startDay: Date(), endDay: Date(), repeat: 1, currentCount: 4, totalCount: 9), - Quest(uuid: UUID(), title: "잠자기", startDay: Date(), endDay: Date(), repeat: 1, currentCount: 1, totalCount: 1) + Quest(groupId: UUID(), uuid: UUID(), title: "물마시기", currentCount: 4, totalCount: 5), + Quest(groupId: UUID(), uuid: UUID(), title: "책읽기", currentCount: 9, totalCount: 20), + Quest(groupId: UUID(), uuid: UUID(), title: "달리기", currentCount: 4, totalCount: 9), + Quest(groupId: UUID(), uuid: UUID(), title: "잠자기", currentCount: 1, totalCount: 1) ] let data: Observable<[Quest]>