Android

"좋아요" 동기화 (로컬 싱크 맞추기, Rx 이용)

그란. 2022. 3. 14. 22:55

- 상품상세 화면에서 좋아요를 하고 홈탭으로 돌아갔을때  이벤트 전파

 

- 마이페이지 탭에서 좋아요를 취소하고 홈탭으로 돌아갔을때 이벤트 전파

 

예전에 Rxbus와 같은 개념 

 

1. 모델 생성 

sealed interface WishEvent {
    data class AddWish(
        val id: Long
    ) : WishEvent

    data class RemoveWish(
        val id: Long
    ) : WishEvent
}

 

2. 도메인 레이어 :  싱글톤으로 생성된 service에 구독할 Flowable함수와 값을 전달할 Processor 변수 추가 

private val _event: FlowableProcessor<WishEvent> = PublishProcessor.create()

override fun fetchEvent(): Flowable<WishEvent> = _event.hide()

 

3. 도메인 레이어 : service에 좋아요통신을 하는 함수가 완료된 후 값 추가 

override fun create(productId: Long): Completable = wishRepository.create(productId)
        .doOnComplete { _event.onNext(WishEvent.AddWish(productId)) }

override fun delete(productId: Long): Completable = wishRepository.delete(productId)
    .doOnComplete { _event.onNext(WishEvent.RemoveWish(productId)) }

 

4. 뷰모델 : Flowable 을 구독하면서 UI이벤트 처리 

val fetchWishEvent = wishService.fetchEvent()
    .toObservable()
    .share()
    
//TODO 
fetchWishEvent를 받았을때 현재리스트 LiveData를 수정