Skip to content

Commit ac9696f

Browse files
authored
Merge pull request #29 from boostcampwm-2022/feature/QuestRepositoryProtocol
Feature/quest repository protocol
2 parents 078c39e + 72ecc1f commit ac9696f

File tree

8 files changed

+96
-26
lines changed

8 files changed

+96
-26
lines changed

.github/workflows/slack-notify.yml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
on: push
2+
name: Slack Notification Demo
3+
jobs:
4+
slackNotification:
5+
name: Slack Notification
6+
runs-on: ubuntu-latest
7+
steps:
8+
- uses: actions/checkout@v2
9+
- name: Slack Notification
10+
uses: rtCamp/action-slack-notify@v2
11+
env:
12+
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }}

DailyQuest/DailyQuest.xcodeproj/project.pbxproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
34ACC364291DEF6100741371 /* FirebaseFirestore in Frameworks */ = {isa = PBXBuildFile; productRef = 34ACC363291DEF6100741371 /* FirebaseFirestore */; };
4949
34ACC366291DEF6100741371 /* FirebaseStorage in Frameworks */ = {isa = PBXBuildFile; productRef = 34ACC365291DEF6100741371 /* FirebaseStorage */; };
5050
34ACC36C291DF0DD00741371 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 34ACC36B291DF0DD00741371 /* GoogleService-Info.plist */; };
51+
34CAE318292B19A3007653AD /* QuestsRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34CAE317292B19A3007653AD /* QuestsRepository.swift */; };
5152
34EE6EB72924C674005AF583 /* QuestView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34EE6EB62924C674005AF583 /* QuestView.swift */; };
5253
34EE6EB92924CAA1005AF583 /* QuestViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34EE6EB82924CAA1005AF583 /* QuestViewModel.swift */; };
5354
A50F9A3429266F45005C00FE /* NetworkService.swift in Sources */ = {isa = PBXBuildFile; fileRef = A50F9A3329266F45005C00FE /* NetworkService.swift */; };
@@ -129,6 +130,7 @@
129130
34ACC34D291DE9C100741371 /* DailyQuestUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DailyQuestUITests.swift; sourceTree = "<group>"; };
130131
34ACC34F291DE9C100741371 /* DailyQuestUITestsLaunchTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DailyQuestUITestsLaunchTests.swift; sourceTree = "<group>"; };
131132
34ACC36B291DF0DD00741371 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = "<group>"; };
133+
34CAE317292B19A3007653AD /* QuestsRepository.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QuestsRepository.swift; sourceTree = "<group>"; };
132134
34EE6EB62924C674005AF583 /* QuestView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QuestView.swift; sourceTree = "<group>"; };
133135
34EE6EB82924CAA1005AF583 /* QuestViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QuestViewModel.swift; sourceTree = "<group>"; };
134136
A50F9A3329266F45005C00FE /* NetworkService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkService.swift; sourceTree = "<group>"; };
@@ -255,6 +257,7 @@
255257
3499551829232A05007AB99E /* Repositories */ = {
256258
isa = PBXGroup;
257259
children = (
260+
34CAE317292B19A3007653AD /* QuestsRepository.swift */,
258261
);
259262
path = Repositories;
260263
sourceTree = "<group>";
@@ -764,6 +767,7 @@
764767
34A529E7292481E1001BAD34 /* BrowseCoordinator.swift in Sources */,
765768
34A529D329247903001BAD34 /* TabCoordinator.swift in Sources */,
766769
34EE6EB92924CAA1005AF583 /* QuestViewModel.swift in Sources */,
770+
34CAE318292B19A3007653AD /* QuestsRepository.swift in Sources */,
767771
3449AD5D2922197000B87619 /* User.swift in Sources */,
768772
A51F01CD29233ABB0031ECA2 /* RealmUserInfoStorage.swift in Sources */,
769773
A50F9A3429266F45005C00FE /* NetworkService.swift in Sources */,

DailyQuest/DailyQuest/Data/PersistentStorages/UserQuestsStorage/RealmStorage/EntityMapping/UserQuestEntity+Mapping.swift

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,20 +11,18 @@ extension UserQuestEntity {
1111
convenience init(quest: Quest) {
1212
self.init(uuid: quest.uuid,
1313
title: quest.title,
14-
startDay: quest.startDay,
15-
endDay: quest.endDay,
14+
startDay: Date(), // no more use
15+
endDay: Date(), // no more use
1616
currentCount: quest.currentCount,
1717
totalCount: quest.totalCount)
1818
}
1919
}
2020

2121
extension UserQuestEntity {
2222
func toDomain() -> Quest {
23-
return Quest(uuid: uuid,
23+
return Quest(groupId: UUID(), // update here
24+
uuid: uuid,
2425
title: title,
25-
startDay: startDay,
26-
endDay: endDay,
27-
repeat: `repeat`,
2826
currentCount: currentCount,
2927
totalCount: totalCount)
3028
}

DailyQuest/DailyQuest/Domain/Entities/Quest.swift

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,9 @@
88
import Foundation
99

1010
struct Quest {
11+
let groupId: UUID
1112
let uuid: UUID
1213
let title: String
13-
let startDay: Date
14-
let endDay: Date
15-
let `repeat`: Int
1614
var currentCount: Int
1715
let totalCount: Int
1816

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
//
2+
// QuestsRepository.swift
3+
// DailyQuest
4+
//
5+
// Created by jinwoong Kim on 2022/11/21.
6+
//
7+
8+
import Foundation
9+
10+
import RxSwift
11+
12+
protocol QuestsRepository {
13+
/**
14+
해당 퀘스트를 저장합니다.
15+
16+
- Parameters:
17+
- quest: 저장할 퀘스트입니다.
18+
- Returns: 성공시 Quest를, 실패시, error를 방출하는 Observable입니다.
19+
*/
20+
func save(with quest: [Quest]) -> Single<[Quest]>
21+
22+
/**
23+
해당 날짜의 퀘스트 배열을 받아옵니다.
24+
25+
- Parameters:
26+
- date: 받아오길 원하는 날짜입니다.
27+
- Returns: Quest의 배열을 방출하는 Observable입니다. 비어있다면 비어있는 배열을 방출합니다.
28+
*/
29+
func fetch(by date: Date) -> Observable<[Quest]>
30+
31+
/**
32+
해당 날짜의 퀘스트 값(`currentCount`)을 업데이트 합니다.
33+
34+
- Parameters:
35+
- quest: 업데이트될 퀘스트입니다.
36+
- Returns: 성공시 Quest를, 실패시 error를 방출하는 Observable입니다.
37+
*/
38+
func update(with quest: Quest) -> Single<Quest>
39+
40+
/**
41+
해당 날짜에 해당하는 퀘스트의 값을 업데이트 합니다.
42+
43+
- Parameters:
44+
- questId: 삭제하고자 하는 퀘스트의 id입니다.
45+
- Returns: 성공시 해당 Quest를, 실패시 error를 방출하는 Observable입니다.
46+
*/
47+
func delete(with questId: UUID) -> Single<Quest>
48+
49+
/**
50+
해당 group의 Quest를 모두 삭제합니다.
51+
52+
53+
- Parameters:
54+
- groupId: 삭제하고자 하는 퀘스트 그룹의 id입니다.
55+
- Returns: 성공시 해당 Quest 배열을, 실패시 error를 방출하는 Observable입니다.
56+
*/
57+
func deleteAll(with groupId: UUID) -> Single<[Quest]>
58+
}

DailyQuest/DailyQuest/Presentation/Browse/ViewModel/BrowseViewModel.swift

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -12,26 +12,26 @@ import RxSwift
1212
final class BrowseViewModel {
1313
let user1 = User(uuid: "", nickName: "jinwoong", profile: Data(), backgroundImage: Data(), description: "")
1414
let quests1 = [
15-
Quest(uuid: UUID(), title: "물마시기", startDay: Date(), endDay: Date(), repeat: 1, currentCount: 2, totalCount: 5),
16-
Quest(uuid: UUID(), title: "코딩하기", startDay: Date(), endDay: Date(), repeat: 1, currentCount: 0, totalCount: 10)
15+
Quest(groupId: UUID(), uuid: UUID(), title: "물마시기", currentCount: 2, totalCount: 5),
16+
Quest(groupId: UUID(),uuid: UUID(), title: "코딩하기", currentCount: 0, totalCount: 10)
1717
]
1818

1919
let user2 = User(uuid: "", nickName: "someone", profile: Data(), backgroundImage: Data(), description: "")
2020
let quests2 = [
21-
Quest(uuid: UUID(), title: "물마시기", startDay: Date(), endDay: Date(), repeat: 1, currentCount: 4, totalCount: 5),
22-
Quest(uuid: UUID(), title: "책읽기", startDay: Date(), endDay: Date(), repeat: 1, currentCount: 9, totalCount: 20),
23-
Quest(uuid: UUID(), title: "달리기", startDay: Date(), endDay: Date(), repeat: 1, currentCount: 4, totalCount: 9),
24-
Quest(uuid: UUID(), title: "잠자기", startDay: Date(), endDay: Date(), repeat: 1, currentCount: 1, totalCount: 1)
21+
Quest(groupId: UUID(),uuid: UUID(), title: "물마시기", currentCount: 4, totalCount: 5),
22+
Quest(groupId: UUID(),uuid: UUID(), title: "책읽기", currentCount: 9, totalCount: 20),
23+
Quest(groupId: UUID(),uuid: UUID(), title: "달리기", currentCount: 4, totalCount: 9),
24+
Quest(groupId: UUID(),uuid: UUID(), title: "잠자기", currentCount: 1, totalCount: 1)
2525
]
2626

2727
let user3 = User(uuid: "", nickName: "Max...", profile: Data(), backgroundImage: Data(), description: "")
2828
let quests3 = [
29-
Quest(uuid: UUID(), title: "물마시기", startDay: Date(), endDay: Date(), repeat: 1, currentCount: 4, totalCount: 5),
30-
Quest(uuid: UUID(), title: "그림 그리기", startDay: Date(), endDay: Date(), repeat: 1, currentCount: 1, totalCount: 2),
31-
Quest(uuid: UUID(), title: "달리기", startDay: Date(), endDay: Date(), repeat: 1, currentCount: 4, totalCount: 9),
32-
Quest(uuid: UUID(), title: "책읽기", startDay: Date(), endDay: Date(), repeat: 1, currentCount: 1, totalCount: 1),
33-
Quest(uuid: UUID(), title: "잠자기", startDay: Date(), endDay: Date(), repeat: 1, currentCount: 1, totalCount: 1),
34-
Quest(uuid: UUID(), title: "행복하기", startDay: Date(), endDay: Date(), repeat: 1, currentCount: 0, totalCount: 1)
29+
Quest(groupId: UUID(),uuid: UUID(), title: "물마시기", currentCount: 4, totalCount: 5),
30+
Quest(groupId: UUID(),uuid: UUID(), title: "그림 그리기", currentCount: 1, totalCount: 2),
31+
Quest(groupId: UUID(),uuid: UUID(), title: "달리기", currentCount: 4, totalCount: 9),
32+
Quest(groupId: UUID(),uuid: UUID(), title: "책읽기", currentCount: 1, totalCount: 1),
33+
Quest(groupId: UUID(),uuid: UUID(), title: "잠자기", currentCount: 1, totalCount: 1),
34+
Quest(groupId: UUID(),uuid: UUID(), title: "행복하기", currentCount: 0, totalCount: 1)
3535
]
3636

3737
let data: Observable<[(User, [Quest])]>

DailyQuest/DailyQuest/Presentation/Common/Cells/QuestCell.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ struct QuestCellPreview: PreviewProvider{
111111
static var previews: some View {
112112
UIViewPreview {
113113
let cell = QuestCell(frame: .zero)
114-
let quest = Quest(uuid: UUID(), title: "my quest", startDay: Date(), endDay: Date(), repeat: 1, currentCount: 2, totalCount: 5)
114+
let quest = Quest(groupId: UUID(), uuid: UUID(), title: "my quest", currentCount: 2, totalCount: 5)
115115

116116
cell.setup(with: quest)
117117
return cell

DailyQuest/DailyQuest/Presentation/Home/ViewModel/QuestViewModel.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,10 @@ import RxSwift
1111

1212
final class QuestViewModel {
1313
let quests = [
14-
Quest(uuid: UUID(), title: "물마시기", startDay: Date(), endDay: Date(), repeat: 1, currentCount: 4, totalCount: 5),
15-
Quest(uuid: UUID(), title: "책읽기", startDay: Date(), endDay: Date(), repeat: 1, currentCount: 9, totalCount: 20),
16-
Quest(uuid: UUID(), title: "달리기", startDay: Date(), endDay: Date(), repeat: 1, currentCount: 4, totalCount: 9),
17-
Quest(uuid: UUID(), title: "잠자기", startDay: Date(), endDay: Date(), repeat: 1, currentCount: 1, totalCount: 1)
14+
Quest(groupId: UUID(), uuid: UUID(), title: "물마시기", currentCount: 4, totalCount: 5),
15+
Quest(groupId: UUID(), uuid: UUID(), title: "책읽기", currentCount: 9, totalCount: 20),
16+
Quest(groupId: UUID(), uuid: UUID(), title: "달리기", currentCount: 4, totalCount: 9),
17+
Quest(groupId: UUID(), uuid: UUID(), title: "잠자기", currentCount: 1, totalCount: 1)
1818
]
1919

2020
let data: Observable<[Quest]>

0 commit comments

Comments
 (0)