Skip to content

Commit 934fe6f

Browse files
authored
Merge pull request #153 from boostcampwm-2022/develop
Develop
2 parents f28b89a + 7c85e9b commit 934fe6f

File tree

175 files changed

+11499
-143
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

175 files changed

+11499
-143
lines changed

DailyQuest/DailyQuest.xcodeproj/project.pbxproj

Lines changed: 1460 additions & 70 deletions
Large diffs are not rendered by default.

DailyQuest/DailyQuest.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved

Lines changed: 29 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
//
2+
// AppAppearance.swift
3+
// DailyQuest
4+
//
5+
// Created by jinwoong Kim on 2022/11/16.
6+
//
7+
8+
import UIKit
9+
10+
final class AppAppearance {
11+
static func setupAppearance() {
12+
UITabBar.appearance().backgroundColor = .white
13+
UITabBar.appearance().tintColor = .maxGreen
14+
15+
UITableViewCell.appearance().selectionStyle = .none
16+
UITableView.appearance().separatorStyle = .none
17+
18+
UISwitch.appearance().tintColor = .maxLightGrey
19+
UISwitch.appearance().onTintColor = .maxYellow
20+
}
21+
}
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
//
2+
// AppCoordinator.swift
3+
// DailyQuest
4+
//
5+
// Created by jinwoong Kim on 2022/11/16.
6+
//
7+
8+
import UIKit
9+
10+
final class AppCoordinator: NSObject, TabCoordinator, UITabBarControllerDelegate {
11+
weak var finishDelegate: CoordinatorFinishDelegate?
12+
var tabBarController: UITabBarController
13+
var childCoordinators: [Coordinator] = []
14+
let appDIContainer: AppDIContainer
15+
16+
init(tabBarController: UITabBarController,
17+
appDIContainer: AppDIContainer) {
18+
self.tabBarController = tabBarController
19+
self.appDIContainer = appDIContainer
20+
}
21+
22+
func start() {
23+
let pages: [TabBarPage] = [.home, .browse, .settings]
24+
let controllers: [UINavigationController] = pages.map(getTabController(_:))
25+
26+
prepareTabBarController(withTabControllers: controllers)
27+
}
28+
29+
private func prepareTabBarController(withTabControllers tabControllers: [UIViewController]) {
30+
tabBarController.delegate = self
31+
tabBarController.setViewControllers(tabControllers, animated: true)
32+
tabBarController.selectedIndex = TabBarPage.home.pageOrderNumber
33+
tabBarController.tabBar.isTranslucent = false
34+
35+
}
36+
37+
private func getTabController(_ page: TabBarPage) -> UINavigationController {
38+
let navController = UINavigationController()
39+
navController.setNavigationBarHidden(false, animated: false)
40+
41+
navController.tabBarItem = UITabBarItem.init(title: page.pageTitleValue,
42+
image: page.pageIcon,
43+
tag: page.pageOrderNumber)
44+
45+
switch page {
46+
case .home:
47+
let homeSceneDIContainer = appDIContainer.makeHomeSceneDIContainer()
48+
let homeCoordinator = homeSceneDIContainer.makeHomeCoordinator(navigationController: navController,
49+
homeSceneDIContainer: homeSceneDIContainer)
50+
homeCoordinator.start()
51+
childCoordinators.append(homeCoordinator)
52+
break
53+
case .browse:
54+
let browseSceneDIContainer = appDIContainer.makeBrowseSceneDIContainer()
55+
let browseCoordinator = browseSceneDIContainer.makeBrowseCoordinator(navigationController: navController,
56+
browseSceneDIContainer: browseSceneDIContainer)
57+
browseCoordinator.start()
58+
childCoordinators.append(browseCoordinator)
59+
case .settings:
60+
let settingsSceneDIContainer = appDIContainer.makeSettingsSceneDIContainer()
61+
let settingsCoordinator = settingsSceneDIContainer.makeSettingsCoordinator(navigationController: navController,
62+
settingsSceneDIContainer: settingsSceneDIContainer)
63+
settingsCoordinator.start()
64+
childCoordinators.append(settingsCoordinator)
65+
}
66+
67+
return navController
68+
}
69+
}
70+
71+
extension AppCoordinator: CoordinatorFinishDelegate {
72+
func coordinatorDidFinish(childCoordinator: Coordinator) {
73+
74+
}
75+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
//
2+
// RepositoryKey.swift
3+
// DailyQuest
4+
//
5+
// Created by jinwoong Kim on 2022/12/12.
6+
//
7+
8+
import Foundation
9+
import DailyContainer
10+
11+
struct QuestRepositoryKey: InjectionKey {
12+
typealias Value = QuestsRepository
13+
}
14+
15+
struct AuthRepositoryKey: InjectionKey {
16+
typealias Value = AuthRepository
17+
}
18+
19+
struct BrowseRepositoryKey: InjectionKey {
20+
typealias Value = BrowseRepository
21+
}
22+
23+
struct UserRepositoryKey: InjectionKey {
24+
typealias Value = UserRepository
25+
}
26+
27+
struct ProtectedUserRepositoryKey: InjectionKey {
28+
typealias Value = ProtectedUserRepository
29+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
//
2+
// ServiceKey.swift
3+
// DailyQuest
4+
//
5+
// Created by jinwoong Kim on 2022/12/12.
6+
//
7+
8+
import Foundation
9+
import DailyContainer
10+
11+
struct ServiceKey: InjectionKey {
12+
typealias Value = NetworkService
13+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
//
2+
// StroageKey.swift
3+
// DailyQuest
4+
//
5+
// Created by jinwoong Kim on 2022/12/12.
6+
//
7+
8+
import Foundation
9+
import DailyContainer
10+
11+
struct QuestStorageKey: InjectionKey {
12+
typealias Value = QuestsStorage
13+
}
14+
15+
struct BrowseQuestStorageKey: InjectionKey {
16+
typealias Value = BrowseQuestsStorage
17+
}
18+
19+
struct UserInfoStorageKey: InjectionKey {
20+
typealias Value = UserInfoStorage
21+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
//
2+
// UseCaseKey.swift
3+
// DailyQuest
4+
//
5+
// Created by jinwoong Kim on 2022/12/12.
6+
//
7+
8+
import Foundation
9+
import DailyContainer
10+
11+
// MARK: - Home Scene
12+
struct QuestUseCaseKey: InjectionKey {
13+
typealias Value = QuestUseCase
14+
}
15+
16+
struct EnrollUseCaseKey: InjectionKey {
17+
typealias Value = EnrollUseCase
18+
}
19+
20+
struct UserUseCaseKey: InjectionKey {
21+
typealias Value = UserUseCase
22+
}
23+
24+
struct CalendarUseCaseKey: InjectionKey {
25+
typealias Value = CalendarUseCase
26+
}
27+
28+
// MARK: - Browse Scene
29+
30+
// MARK: - Settings Scene
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
//
2+
// AppDIContainer.swift
3+
// DailyQuest
4+
//
5+
// Created by jinwoong Kim on 2022/11/16.
6+
//
7+
8+
import Foundation
9+
import DailyContainer
10+
11+
final class AppDIContainer {
12+
13+
init() {
14+
registerService()
15+
registerStorage()
16+
registerRepository()
17+
}
18+
19+
func makeHomeSceneDIContainer() -> HomeSceneDIContainer {
20+
return HomeSceneDIContainer()
21+
}
22+
23+
func makeBrowseSceneDIContainer() -> BrowseSceneDIContainer {
24+
return BrowseSceneDIContainer()
25+
}
26+
27+
func makeSettingsSceneDIContainer() -> SettingsSceneDIContainer {
28+
return SettingsSceneDIContainer()
29+
}
30+
}
31+
32+
private extension AppDIContainer {
33+
func registerService() {
34+
Container.shared.register {
35+
Module(ServiceKey.self) { FirebaseService.shared }
36+
}
37+
}
38+
39+
func registerStorage() {
40+
Container.shared.register {
41+
Module(QuestStorageKey.self) { RealmQuestsStorage() }
42+
Module(BrowseQuestStorageKey.self) { RealmBrowseQuestsStorage() }
43+
Module(UserInfoStorageKey.self) { RealmUserInfoStorage() }
44+
}
45+
}
46+
47+
func registerRepository() {
48+
Container.shared.register {
49+
Module(QuestRepositoryKey.self) {
50+
@Injected(QuestStorageKey.self)
51+
var questStorage: QuestsStorage
52+
return DefaultQuestsRepository(persistentStorage: questStorage)
53+
}
54+
55+
Module(AuthRepositoryKey.self) {
56+
@Injected(QuestStorageKey.self)
57+
var questStorage: QuestsStorage
58+
59+
@Injected(UserInfoStorageKey.self)
60+
var userInfoStorage: UserInfoStorage
61+
62+
return DefaultAuthRepository(persistentQuestsStorage: questStorage,
63+
persistentUserStorage: userInfoStorage)
64+
}
65+
66+
Module(BrowseRepositoryKey.self) {
67+
@Injected(BrowseQuestStorageKey.self)
68+
var browseQuestStroage: BrowseQuestsStorage
69+
70+
@Injected(ServiceKey.self)
71+
var networkService: NetworkService
72+
73+
return DefaultBrowseRepository(persistentStorage: browseQuestStroage,
74+
networkService: networkService)
75+
}
76+
77+
/**
78+
Networ service instance needed.
79+
*/
80+
Module(UserRepositoryKey.self) {
81+
@Injected(UserInfoStorageKey.self)
82+
var userInfoStorage: UserInfoStorage
83+
84+
return DefaultUserRepository(persistentStorage: userInfoStorage)
85+
}
86+
87+
/**
88+
Protected User Repository Injection
89+
goes here.
90+
*/
91+
}
92+
}
93+
94+
}

0 commit comments

Comments
 (0)