Skip to content

Commit

Permalink
Merge pull request #153 from boostcampwm-2022/develop
Browse files Browse the repository at this point in the history
Develop
  • Loading branch information
jinwoong16 committed Dec 14, 2022
2 parents f28b89a + 7c85e9b commit 934fe6f
Show file tree
Hide file tree
Showing 175 changed files with 11,499 additions and 143 deletions.
1,530 changes: 1,460 additions & 70 deletions DailyQuest/DailyQuest.xcodeproj/project.pbxproj

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,15 @@
"version" : "3.0.0"
}
},
{
"identity" : "kingfisher",
"kind" : "remoteSourceControl",
"location" : "https://github.com/onevcat/Kingfisher",
"state" : {
"branch" : "master",
"revision" : "3e091ee962391a2ddcae5b18e17bc625f9d88d6e"
}
},
{
"identity" : "leveldb",
"kind" : "remoteSourceControl",
Expand All @@ -81,6 +90,15 @@
"version" : "1.22.2"
}
},
{
"identity" : "lottie-ios",
"kind" : "remoteSourceControl",
"location" : "https://github.com/airbnb/lottie-ios.git",
"state" : {
"revision" : "b4bd0604ded9574807f41b4004b57dd1226a30a4",
"version" : "3.5.0"
}
},
{
"identity" : "nanopb",
"kind" : "remoteSourceControl",
Expand Down Expand Up @@ -117,13 +135,22 @@
"revision" : "66cf2fc246f87c06940e6c3a6dc5908c316fa5d6"
}
},
{
"identity" : "rxgesture",
"kind" : "remoteSourceControl",
"location" : "https://github.com/RxSwiftCommunity/RxGesture.git",
"state" : {
"revision" : "1b137c576b4aaaab949235752278956697c9e4a0",
"version" : "4.0.4"
}
},
{
"identity" : "rxswift",
"kind" : "remoteSourceControl",
"location" : "https://github.com/ReactiveX/RxSwift",
"state" : {
"revision" : "b4307ba0b6425c0ba4178e138799946c3da594f8",
"version" : "6.5.0"
"branch" : "main",
"revision" : "91a36920b1ec069004fef9dc41b7c5dbcaa5fffe"
}
},
{
Expand Down
21 changes: 21 additions & 0 deletions DailyQuest/DailyQuest/Application/AppAppearance.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
//
// AppAppearance.swift
// DailyQuest
//
// Created by jinwoong Kim on 2022/11/16.
//

import UIKit

final class AppAppearance {
static func setupAppearance() {
UITabBar.appearance().backgroundColor = .white
UITabBar.appearance().tintColor = .maxGreen

UITableViewCell.appearance().selectionStyle = .none
UITableView.appearance().separatorStyle = .none

UISwitch.appearance().tintColor = .maxLightGrey
UISwitch.appearance().onTintColor = .maxYellow
}
}
75 changes: 75 additions & 0 deletions DailyQuest/DailyQuest/Application/AppCoordinator.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
//
// AppCoordinator.swift
// DailyQuest
//
// Created by jinwoong Kim on 2022/11/16.
//

import UIKit

final class AppCoordinator: NSObject, TabCoordinator, UITabBarControllerDelegate {
weak var finishDelegate: CoordinatorFinishDelegate?
var tabBarController: UITabBarController
var childCoordinators: [Coordinator] = []
let appDIContainer: AppDIContainer

init(tabBarController: UITabBarController,
appDIContainer: AppDIContainer) {
self.tabBarController = tabBarController
self.appDIContainer = appDIContainer
}

func start() {
let pages: [TabBarPage] = [.home, .browse, .settings]
let controllers: [UINavigationController] = pages.map(getTabController(_:))

prepareTabBarController(withTabControllers: controllers)
}

private func prepareTabBarController(withTabControllers tabControllers: [UIViewController]) {
tabBarController.delegate = self
tabBarController.setViewControllers(tabControllers, animated: true)
tabBarController.selectedIndex = TabBarPage.home.pageOrderNumber
tabBarController.tabBar.isTranslucent = false

}

private func getTabController(_ page: TabBarPage) -> UINavigationController {
let navController = UINavigationController()
navController.setNavigationBarHidden(false, animated: false)

navController.tabBarItem = UITabBarItem.init(title: page.pageTitleValue,
image: page.pageIcon,
tag: page.pageOrderNumber)

switch page {
case .home:
let homeSceneDIContainer = appDIContainer.makeHomeSceneDIContainer()
let homeCoordinator = homeSceneDIContainer.makeHomeCoordinator(navigationController: navController,
homeSceneDIContainer: homeSceneDIContainer)
homeCoordinator.start()
childCoordinators.append(homeCoordinator)
break
case .browse:
let browseSceneDIContainer = appDIContainer.makeBrowseSceneDIContainer()
let browseCoordinator = browseSceneDIContainer.makeBrowseCoordinator(navigationController: navController,
browseSceneDIContainer: browseSceneDIContainer)
browseCoordinator.start()
childCoordinators.append(browseCoordinator)
case .settings:
let settingsSceneDIContainer = appDIContainer.makeSettingsSceneDIContainer()
let settingsCoordinator = settingsSceneDIContainer.makeSettingsCoordinator(navigationController: navController,
settingsSceneDIContainer: settingsSceneDIContainer)
settingsCoordinator.start()
childCoordinators.append(settingsCoordinator)
}

return navController
}
}

extension AppCoordinator: CoordinatorFinishDelegate {
func coordinatorDidFinish(childCoordinator: Coordinator) {

}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
//
// RepositoryKey.swift
// DailyQuest
//
// Created by jinwoong Kim on 2022/12/12.
//

import Foundation
import DailyContainer

struct QuestRepositoryKey: InjectionKey {
typealias Value = QuestsRepository
}

struct AuthRepositoryKey: InjectionKey {
typealias Value = AuthRepository
}

struct BrowseRepositoryKey: InjectionKey {
typealias Value = BrowseRepository
}

struct UserRepositoryKey: InjectionKey {
typealias Value = UserRepository
}

struct ProtectedUserRepositoryKey: InjectionKey {
typealias Value = ProtectedUserRepository
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
//
// ServiceKey.swift
// DailyQuest
//
// Created by jinwoong Kim on 2022/12/12.
//

import Foundation
import DailyContainer

struct ServiceKey: InjectionKey {
typealias Value = NetworkService
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
//
// StroageKey.swift
// DailyQuest
//
// Created by jinwoong Kim on 2022/12/12.
//

import Foundation
import DailyContainer

struct QuestStorageKey: InjectionKey {
typealias Value = QuestsStorage
}

struct BrowseQuestStorageKey: InjectionKey {
typealias Value = BrowseQuestsStorage
}

struct UserInfoStorageKey: InjectionKey {
typealias Value = UserInfoStorage
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
//
// UseCaseKey.swift
// DailyQuest
//
// Created by jinwoong Kim on 2022/12/12.
//

import Foundation
import DailyContainer

// MARK: - Home Scene
struct QuestUseCaseKey: InjectionKey {
typealias Value = QuestUseCase
}

struct EnrollUseCaseKey: InjectionKey {
typealias Value = EnrollUseCase
}

struct UserUseCaseKey: InjectionKey {
typealias Value = UserUseCase
}

struct CalendarUseCaseKey: InjectionKey {
typealias Value = CalendarUseCase
}

// MARK: - Browse Scene

// MARK: - Settings Scene
94 changes: 94 additions & 0 deletions DailyQuest/DailyQuest/Application/DIContainer/AppDIContainer.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
//
// AppDIContainer.swift
// DailyQuest
//
// Created by jinwoong Kim on 2022/11/16.
//

import Foundation
import DailyContainer

final class AppDIContainer {

init() {
registerService()
registerStorage()
registerRepository()
}

func makeHomeSceneDIContainer() -> HomeSceneDIContainer {
return HomeSceneDIContainer()
}

func makeBrowseSceneDIContainer() -> BrowseSceneDIContainer {
return BrowseSceneDIContainer()
}

func makeSettingsSceneDIContainer() -> SettingsSceneDIContainer {
return SettingsSceneDIContainer()
}
}

private extension AppDIContainer {
func registerService() {
Container.shared.register {
Module(ServiceKey.self) { FirebaseService.shared }
}
}

func registerStorage() {
Container.shared.register {
Module(QuestStorageKey.self) { RealmQuestsStorage() }
Module(BrowseQuestStorageKey.self) { RealmBrowseQuestsStorage() }
Module(UserInfoStorageKey.self) { RealmUserInfoStorage() }
}
}

func registerRepository() {
Container.shared.register {
Module(QuestRepositoryKey.self) {
@Injected(QuestStorageKey.self)
var questStorage: QuestsStorage
return DefaultQuestsRepository(persistentStorage: questStorage)
}

Module(AuthRepositoryKey.self) {
@Injected(QuestStorageKey.self)
var questStorage: QuestsStorage

@Injected(UserInfoStorageKey.self)
var userInfoStorage: UserInfoStorage

return DefaultAuthRepository(persistentQuestsStorage: questStorage,
persistentUserStorage: userInfoStorage)
}

Module(BrowseRepositoryKey.self) {
@Injected(BrowseQuestStorageKey.self)
var browseQuestStroage: BrowseQuestsStorage

@Injected(ServiceKey.self)
var networkService: NetworkService

return DefaultBrowseRepository(persistentStorage: browseQuestStroage,
networkService: networkService)
}

/**
Networ service instance needed.
*/
Module(UserRepositoryKey.self) {
@Injected(UserInfoStorageKey.self)
var userInfoStorage: UserInfoStorage

return DefaultUserRepository(persistentStorage: userInfoStorage)
}

/**
Protected User Repository Injection
goes here.
*/
}
}

}
Loading

0 comments on commit 934fe6f

Please sign in to comment.