Skip to content

Commit

Permalink
[ITDS-75] feat: #61 - UpdateBannerUseCase 적용
Browse files Browse the repository at this point in the history
  • Loading branch information
wongbingg committed Feb 18, 2025
1 parent 8921c90 commit d9ba113
Show file tree
Hide file tree
Showing 3 changed files with 72 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -63,9 +63,13 @@ private extension PostRecommendCoordinator {
guard let fetchBannerUseCase = DIContainer.shared.resolve(type: FetchBannerUseCaseType.self) else {
fatalError()
}
guard let updateBannerUseCase = DIContainer.shared.resolve(type: UpdateBannerUseCaseType.self) else {
fatalError()
}
let reactor = PostRecommendReactor(
recommendedPostStream: mutableRecommendedPostStream,
fetchBannerUseCase: fetchBannerUseCase
fetchBannerUseCase: fetchBannerUseCase,
updateBannerUseCase: updateBannerUseCase
)
let viewController = PostRecommendViewController(reactor: reactor)
viewController.coordinator = self
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,15 +24,18 @@ final class PostRecommendReactor: Reactor {
var initialState: State = .init()
private let recommendedPostStream: MutableRecommendedPostStream
private let fetchBannerUseCase: FetchBannerUseCaseType
private let updateBannerUseCase: UpdateBannerUseCaseType
private let disposeBag = DisposeBag()

// MARK: - Initializer
init(
recommendedPostStream: MutableRecommendedPostStream,
fetchBannerUseCase: FetchBannerUseCaseType
fetchBannerUseCase: FetchBannerUseCaseType,
updateBannerUseCase: UpdateBannerUseCaseType
) {
self.recommendedPostStream = recommendedPostStream
self.fetchBannerUseCase = fetchBannerUseCase
self.updateBannerUseCase = updateBannerUseCase
bindStream()
}

Expand All @@ -44,16 +47,21 @@ final class PostRecommendReactor: Reactor {
case imageViewDidTap(Int)
case inputImage(Data)
case setUploadableTrue
case completeButtonDidTap
}

enum Mutation {
case setLoading(Bool)
case setPosts([RecommendCellData])
case setUploadableTrue
case setAlertHistoryDataTrue
case setIsUploadComplete
}

struct State {
var isUploadable = false
var isLoading = false
var isUploadComplete = false
var alertHistoryData = false
var posts: [RecommendCellData] = []
}
Expand Down Expand Up @@ -92,6 +100,7 @@ final class PostRecommendReactor: Reactor {
case let .refreshData(data): refreshDataMutation(with: data)
case let .inputImage(imageData): inputImageMutation(with: imageData)
case let .imageViewDidTap(index): imageViewDidTapMutation(at: index)
case .completeButtonDidTap: completeButtonDidTapMutation()
}
}

Expand Down Expand Up @@ -137,13 +146,47 @@ final class PostRecommendReactor: Reactor {
recommendedPostStream.setTargetIndex(index)
return .empty()
}

func completeButtonDidTapMutation() -> Observable<Mutation> {

let bannerForUpdate = recommendedPostStream.data.value.filter { $0.isUploadAvailable }
var streams: [Observable<Mutation>] = []
for banner in bannerForUpdate {
guard let imageData = banner.imageData else { continue }

let requestDTO = BannerUpdateRequestDTO.init(
featuredPostId: banner.featuredPostID,
infoPostId: banner.infoID,
imgFile: imageData
)
let requestStream = updateBannerUseCase.execute(requestDTO: requestDTO)
.do(onError: {
print($0.localizedDescription)
})
.flatMap { _ in
return Observable<Mutation>.empty()
}
streams.append(requestStream)
}

let mergedStream: Observable<Mutation> = .merge(streams)

return .concat([
.just(.setLoading(true)),
mergedStream,
.just(.setLoading(false)),
.just(.setIsUploadComplete)
])
}

func reduce(state: State, mutation: Mutation) -> State {
var newState = state
switch mutation {
case let .setPosts(data): newState.posts = data
case let .setLoading(bool): newState.isLoading = bool
case .setUploadableTrue: newState.isUploadable = true
case .setAlertHistoryDataTrue: newState.alertHistoryData = true
case .setIsUploadComplete: newState.isUploadComplete = true ; PostRecommendCache.cachedRecommendPost = []
}
return newState
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -106,10 +106,33 @@ private extension PostRecommendViewController {
.bind(to: reactor.action)
.disposed(by: disposeBag)

completeButton.rx.tap
.map { Action.completeButtonDidTap }
.bind(to: reactor.action)
.disposed(by: disposeBag)
}

func bindState(reactor: PostRecommendReactor) {

reactor.state
.map(\.isLoading)
.distinctUntilChanged()
.asDriver(onErrorJustReturn: false)
.drive {
$0 ? LoadingIndicator.start(withDimming: true) : LoadingIndicator.stop()
}
.disposed(by: disposeBag)

reactor.state
.map(\.isUploadComplete)
.distinctUntilChanged()
.filter { $0 }
.asSignal(onErrorJustReturn: true)
.emit(with: self) { owner, _ in
owner.coordinator?.didFinish()
}
.disposed(by: disposeBag)

reactor.state
.map(\.posts)
.distinctUntilChanged()
Expand Down Expand Up @@ -159,14 +182,6 @@ private extension PostRecommendViewController {
owner.checkPhotoLibraryPermission()
}
.disposed(by: disposeBag)

completeButton.rx.tap
.asSignal()
.emit(with: self) { owner, _ in
print("업로드 고고")

}
.disposed(by: disposeBag)
}

func showHistoryAlert() {
Expand Down

0 comments on commit d9ba113

Please sign in to comment.