Skip to content

Commit

Permalink
[Refacotr] #495 - UserRepository 의존성 분리
Browse files Browse the repository at this point in the history
  • Loading branch information
ena-isme committed Mar 6, 2025
1 parent 45f09d1 commit 2c46a61
Show file tree
Hide file tree
Showing 20 changed files with 145 additions and 112 deletions.
49 changes: 24 additions & 25 deletions WSSiOS/WSSiOS/Resource/Extensions/UIViewController+.swift
Original file line number Diff line number Diff line change
Expand Up @@ -158,9 +158,8 @@ extension UIViewController {

func pushToMyPageDeleteIDWarningViewController() {
let viewController = MyPageDeleteIDWarningViewController(
userRepository: DefaultUserRepository(
userService: DefaultUserService(),
blocksService: DefaultBlocksService()
userRepository: DefaultUserInfoRepository(
userService: DefaultUserService()
)
)
self.navigationController?.pushViewController(viewController, animated: true)
Expand All @@ -180,9 +179,8 @@ extension UIViewController {
func pushToMyPageInfoViewController() {
let viewController = MyPageInfoViewController(
viewModel: MyPageInfoViewModel(
userRepository: DefaultUserRepository(
userService: DefaultUserService(),
blocksService: DefaultBlocksService()),
userRepository: DefaultUserInfoRepository(
userService: DefaultUserService()),
authRepository: DefaultAuthRepository(
authService: DefaultAuthService())))
self.navigationController?.pushViewController(viewController, animated: true)
Expand Down Expand Up @@ -230,8 +228,7 @@ extension UIViewController {

func pushToBlockUserViewController() {
let viewController = MyPageBlockUserViewController(
userRepository: DefaultUserRepository(
userService: DefaultUserService(),
userRepository: DefaultUserBlockRepository(
blocksService: DefaultBlocksService()
)
)
Expand Down Expand Up @@ -285,9 +282,8 @@ extension UIViewController {
viewModel: FeedDetailViewModel(
feedDetailRepository: DefaultFeedDetailRepository(
feedDetailService: DefaultFeedDetailService()
), userRepository: DefaultUserRepository(
userService: DefaultUserService(),
blocksService: DefaultBlocksService()
), userRepository: DefaultUserInfoRepository(
userService: DefaultUserService()
),
feedId: feedId
)
Expand All @@ -308,8 +304,10 @@ extension UIViewController {
let viewController = MyPageViewController(
viewModel: MyPageViewModel(
userRepository: DefaultUserRepository(
userService: DefaultUserService(),
blocksService: DefaultBlocksService()),
userInfoRepository: DefaultUserInfoRepository(
userService: DefaultUserService()),
userBlockRepository: DefaultUserBlockRepository(
blocksService: DefaultBlocksService())),
profileId: userId))

viewController.hidesBottomBarWhenPushed = true
Expand All @@ -319,9 +317,9 @@ extension UIViewController {
func pushToMyPageEditViewController(entryType: MyPageEditEntryType, profile: MyProfileResult?) {
let viewController = MyPageEditProfileViewController(
viewModel: MyPageEditProfileViewModel(
userRepository: DefaultUserRepository(
userService: DefaultUserService(),
blocksService: DefaultBlocksService()),
userRepository: DefaultUserInfoRepository(
userService: DefaultUserService()
),
entryType: entryType,
profileData: profile))

Expand Down Expand Up @@ -363,9 +361,8 @@ extension UIViewController {
func pushToMyPageProfileVisibilityViewController() {
let viewController = MyPageProfileVisibilityViewController(
viewModel: MyPageProfileVisibilityViewModel(
userRepository: DefaultUserRepository(
userService: DefaultUserService(),
blocksService: DefaultBlocksService()
userRepository: DefaultUserInfoRepository(
userService: DefaultUserService()
)
)
)
Expand All @@ -386,9 +383,11 @@ extension UIViewController {
func pushToChangeUserInfoViewController() {
let viewController = MyPageChangeUserInfoViewController(
viewModel: MyPageChangeUserInfoViewModel(
userRepository: DefaultUserRepository(
userService: DefaultUserService(),
blocksService: DefaultBlocksService())))
userRepository: DefaultUserInfoRepository(
userService: DefaultUserService()
)
)
)
viewController.hidesBottomBarWhenPushed = true

self.navigationController?.pushViewController(viewController, animated: true)
Expand All @@ -405,9 +404,9 @@ extension UIViewController {
func pushToMyPageFeedDetailViewController(userId: Int, useData: MyProfileResult) {
let viewController = MyPageFeedDetailViewController(
viewModel: MyPageFeedDetailViewModel(
userRepository: DefaultUserRepository(
userService: DefaultUserService(),
blocksService: DefaultBlocksService()),
userRepository: DefaultUserInfoRepository(
userService: DefaultUserService()
),
profileId: userId,
profileData: useData))
self.navigationController?.pushViewController(viewController, animated: true)
Expand Down
6 changes: 2 additions & 4 deletions WSSiOS/WSSiOS/Resource/Helper/ModuleFactory.swift
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,7 @@ extension ModuleFactory: OnboardingModuleFactory {

func makeOnboardingViewController() -> UIViewController {
return OnboardingViewController(viewModel: OnboardingViewModel(onboardingRepository: DefaultOnboardingRepository(onboardingService: DefaultOnboardingService()),
userRepository: DefaultUserRepository(userService: DefaultUserService(),
blocksService: DefaultBlocksService())))
userRepository: DefaultUserInfoRepository(userService: DefaultUserService())))
}

func makeOnboardingSuccessViewController(nickname: String) -> UIViewController {
Expand All @@ -54,7 +53,6 @@ extension ModuleFactory: OnboardingModuleFactory {

extension ModuleFactory: ServiceTermAgreementFactory {
func makeServiceTermAgreementViewController() -> UIViewController {
return ServiceTermAgreementViewController(repository: DefaultUserRepository(userService: DefaultUserService(),
blocksService: DefaultBlocksService()))
return ServiceTermAgreementViewController(repository: DefaultUserInfoRepository(userService: DefaultUserService()))
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
//
// UserBlockRepository.swift
// WSSiOS
//
// Created by 신지원 on 3/6/25.
//

import Foundation

import RxSwift

protocol UserBlockRepository {
func getBlocksList() -> Observable<BlockUserEntity>
func deleteBlockUser(blockID: Int) -> Observable<Void>
func postBlockUser(userId: Int) -> Observable<Void>
}

struct DefaultUserBlockRepository: UserBlockRepository {
private var blocksService: BlocksService

init(blocksService: BlocksService) {
self.blocksService = blocksService
}

//MARK: - BlockService

func getBlocksList() -> Observable<BlockUserEntity> {
return blocksService.getBlocksList()
.map { $0.toEntity() }
.asObservable()
}

func deleteBlockUser(blockID: Int) -> Observable<Void> {
return blocksService.deleteBlockUser(blockID: blockID)
.asObservable()
}

func postBlockUser(userId: Int) -> Observable<Void> {
return blocksService.postBlockUser(blockID: userId)
.asObservable()
}
}
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
//
// UserRepository.swift
// UserInfoRepository.swift
// WSSiOS
//
// Created by 신지원 on 1/5/24.
// Created by 신지원 on 3/6/25.
//

import Foundation

import RxSwift

protocol UserRepositoryWithUserService {
protocol UserInfoRepository {
func getUserMeData() -> Observable<UserMeResult>
func getMyProfileData() -> Observable<MyProfileResult>
func getOtherProfile(userId: Int) -> Observable<OtherProfileResult>
Expand All @@ -34,23 +34,14 @@ protocol UserRepositoryWithUserService {
func patchTermSetting(serviceAgreed: Bool, privacyAgreed: Bool, marketingAgreed: Bool) -> Single<Void>
}

protocol UserRepositoryWithBlockService {
func getBlocksList() -> Observable<BlockUserEntity>
func deleteBlockUser(blockID: Int) -> Observable<Void>
func postBlockUser(userId: Int) -> Observable<Void>
}

struct DefaultUserRepository: UserRepositoryWithUserService, UserRepositoryWithBlockService {
private var userService: UserService
private var blocksService: BlocksService
struct DefaultUserInfoRepository: UserInfoRepository {

init(userService: UserService, blocksService: BlocksService) {
private let userService: UserService

init(userService: UserService) {
self.userService = userService
self.blocksService = blocksService
}

//MARK: - UserService


func getUserMeData() -> Observable<UserMeResult> {
return userService.getUserData()
.asObservable()
Expand Down Expand Up @@ -151,22 +142,4 @@ struct DefaultUserRepository: UserRepositoryWithUserService, UserRepositoryWithB
marketingAgreed: marketingAgreed)
return userService.patchTermSetting(requestBody)
}

//MARK: - BlockService

func getBlocksList() -> Observable<BlockUserEntity> {
return blocksService.getBlocksList()
.map { $0.toEntity() }
.asObservable()
}

func deleteBlockUser(blockID: Int) -> Observable<Void> {
return blocksService.deleteBlockUser(blockID: blockID)
.asObservable()
}

func postBlockUser(userId: Int) -> Observable<Void> {
return blocksService.postBlockUser(blockID: userId)
.asObservable()
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
//
// UserRepository.swift
// WSSiOS
//
// Created by 신지원 on 1/5/24.
//

import Foundation

import RxSwift

protocol UserRepository {
var userInfoRepository: UserInfoRepository { get }
var userBlockRepository: UserBlockRepository { get }
}

struct DefaultUserRepository: UserRepository {
var userInfoRepository: any UserInfoRepository
var userBlockRepository: any UserBlockRepository
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ final class ServiceTermAgreementViewController: UIViewController {

//MARK: - Properties

private let userRepository: UserRepositoryWithUserService
private let userRepository: UserInfoRepository
private let disposeBag = DisposeBag()

private let agreedTerms = BehaviorRelay<Set<ServiceTerm>>(value: [])
Expand All @@ -26,7 +26,7 @@ final class ServiceTermAgreementViewController: UIViewController {

//MARK: - Life Cycle

init(repository: UserRepositoryWithUserService) {
init(repository: UserInfoRepository) {
self.userRepository = repository

super.init(nibName: nil, bundle: nil)
Expand Down
12 changes: 7 additions & 5 deletions WSSiOS/WSSiOS/Source/Presentation/Base/WSSTabBarItem.swift
Original file line number Diff line number Diff line change
Expand Up @@ -57,9 +57,8 @@ enum WSSTabBarItem: CaseIterable {
recommendRepository: DefaultRecommendRepository(
recommendService: DefaultRecommendService()
),
userRepository: DefaultUserRepository(
userService: DefaultUserService(),
blocksService: DefaultBlocksService()
userRepository: DefaultUserInfoRepository(
userService: DefaultUserService()
),
notificationRepository: DefaultNotificationRepository(
notificationService: DefaultNotificationService())
Expand All @@ -76,8 +75,11 @@ enum WSSTabBarItem: CaseIterable {
let myPageVC = MyPageViewController(
viewModel: MyPageViewModel(
userRepository: DefaultUserRepository(
userService: DefaultUserService(),
blocksService: DefaultBlocksService()), profileId: userId))
userInfoRepository: DefaultUserInfoRepository(
userService: DefaultUserService()),
userBlockRepository: DefaultUserBlockRepository(
blocksService: DefaultBlocksService())),
profileId: userId))
myPageVC.entryType = .tabBar
return myPageVC
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ final class FeedDetailViewModel: ViewModelType {
//MARK: - Properties

private let feedDetailRepository: FeedDetailRepository
private let userRepository: UserRepositoryWithUserService
private let userRepository: UserInfoRepository
private let disposeBag = DisposeBag()

let feedId: Int
Expand Down Expand Up @@ -77,7 +77,7 @@ final class FeedDetailViewModel: ViewModelType {
//MARK: - Life Cycle

init(feedDetailRepository: FeedDetailRepository,
userRepository: UserRepositoryWithUserService,
userRepository: UserInfoRepository,
feedId: Int) {
self.feedDetailRepository = feedDetailRepository
self.userRepository = userRepository
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ final class HomeViewModel: ViewModelType {
//MARK: - Properties

private let recommendRepository: RecommendRepository
private let userRepository: UserRepositoryWithUserService
private let userRepository: UserInfoRepository
private let notificationRepository: NotificationRepository
private let disposeBag = DisposeBag()

Expand Down Expand Up @@ -91,7 +91,7 @@ final class HomeViewModel: ViewModelType {
//MARK: - init

init(recommendRepository: RecommendRepository,
userRepository: UserRepositoryWithUserService,
userRepository: UserInfoRepository,
notificationRepository: NotificationRepository) {
self.recommendRepository = recommendRepository
self.userRepository = userRepository
Expand Down Expand Up @@ -269,7 +269,7 @@ extension HomeViewModel {
//MARK: - API

// 유저 정보 조회
func getUserMeData() -> Observable<UserMeResponse> {
func getUserMeData() -> Observable<UserMeResult> {
return userRepository.getUserMeData()
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -182,9 +182,9 @@ extension LibraryViewController {
private func setLibraryChildViewController(userId: Int, data: UserNovelNovelStatus) -> LibraryChildViewController {
return LibraryChildViewController(
libraryViewModel: LibraryChildViewModel(
userRepository: DefaultUserRepository(
userService: DefaultUserService(),
blocksService: DefaultBlocksService()),
userRepository: DefaultUserInfoRepository(
userService: DefaultUserService()
),
initData: data,
userId: userId))
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ final class LibraryChildViewModel: ViewModelType {

// MARK: - Properties

private let userRepository: UserRepositoryWithUserService
private let userRepository: UserInfoRepository
private let initData: UserNovelNovelStatus
private let userId: Int

Expand Down Expand Up @@ -49,7 +49,7 @@ final class LibraryChildViewModel: ViewModelType {

// MARK: - Life Cycle

init(userRepository: UserRepositoryWithUserService, initData: UserNovelNovelStatus, userId: Int) {
init(userRepository: UserInfoRepository, initData: UserNovelNovelStatus, userId: Int) {
self.userRepository = userRepository
self.initData = initData
self.userId = userId
Expand Down
Loading

0 comments on commit 2c46a61

Please sign in to comment.