Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/quest repository protocol #29

Merged
merged 3 commits into from
Nov 21, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions .github/workflows/slack-notify.yml
Original file line number Diff line number Diff line change
@@ -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.SLACK_WEBHOOK }}
4 changes: 4 additions & 0 deletions DailyQuest/DailyQuest.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -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 */; };
Expand Down Expand Up @@ -125,6 +126,7 @@
34ACC34D291DE9C100741371 /* DailyQuestUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DailyQuestUITests.swift; sourceTree = "<group>"; };
34ACC34F291DE9C100741371 /* DailyQuestUITestsLaunchTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DailyQuestUITestsLaunchTests.swift; sourceTree = "<group>"; };
34ACC36B291DF0DD00741371 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = "<group>"; };
34CAE317292B19A3007653AD /* QuestsRepository.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QuestsRepository.swift; sourceTree = "<group>"; };
34EE6EB62924C674005AF583 /* QuestView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QuestView.swift; sourceTree = "<group>"; };
34EE6EB82924CAA1005AF583 /* QuestViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QuestViewModel.swift; sourceTree = "<group>"; };
A51189C229226E66008A9D33 /* UserQuestEntity+Mapping.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UserQuestEntity+Mapping.swift"; sourceTree = "<group>"; };
Expand Down Expand Up @@ -246,6 +248,7 @@
3499551829232A05007AB99E /* Repositories */ = {
isa = PBXGroup;
children = (
34CAE317292B19A3007653AD /* QuestsRepository.swift */,
);
path = Repositories;
sourceTree = "<group>";
Expand Down Expand Up @@ -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 */,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,20 +11,18 @@ 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)
}
}

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)
}
Expand Down
4 changes: 1 addition & 3 deletions DailyQuest/DailyQuest/Domain/Entities/Quest.swift
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
Original file line number Diff line number Diff line change
@@ -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<Quest>

/**
해당 날짜에 해당하는 퀘스트의 값을 업데이트 합니다.

- Parameters:
- questId: 삭제하고자 하는 퀘스트의 id입니다.
- Returns: 성공시 해당 Quest를, 실패시 error를 방출하는 Observable입니다.
*/
func delete(with questId: UUID) -> Single<Quest>

/**
해당 group의 Quest를 모두 삭제합니다.


- Parameters:
- groupId: 삭제하고자 하는 퀘스트 그룹의 id입니다.
- Returns: 성공시 해당 Quest 배열을, 실패시 error를 방출하는 Observable입니다.
*/
func deleteAll(with groupId: UUID) -> Single<[Quest]>
}
Original file line number Diff line number Diff line change
Expand Up @@ -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])]>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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]>
Expand Down