Skip to content

Commit a928d2e

Browse files
committed
[TOP-106] FetchToHotStateUseCase에서 UserCard/TopicSelectCard를 TopicAvailableState를 판단해서 내려주도록 변경
- ToHotViewModel에서 다음 Card를 조회할 때 FetchToHotStateUseCase를 사용하도록 변경(TopicExpiredCheck를 위함)
1 parent 93a9a05 commit a928d2e

File tree

18 files changed

+204
-151
lines changed

18 files changed

+204
-151
lines changed

data/src/main/java/com/tht/tht/data/di/RepositoryModule.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import com.tht.tht.data.repository.SignupRepositoryImpl
1313
import com.tht.tht.data.repository.TokenRepositoryImpl
1414
import com.tht.tht.data.repository.UserSettingRepositoryImpl
1515
import com.tht.tht.domain.chat.repository.ChatRepository
16-
import com.tht.tht.domain.dailyusercard.DailyUserCardRepository
16+
import com.tht.tht.domain.tohot.DailyUserCardRepository
1717
import com.tht.tht.domain.email.repository.EmailRepository
1818
import com.tht.tht.domain.image.ImageRepository
1919
import com.tht.tht.domain.login.repository.LoginRepository

data/src/main/java/com/tht/tht/data/di/UseCaseModule.kt

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@ package com.tht.tht.data.di
22

33
import com.tht.tht.domain.chat.repository.ChatRepository
44
import com.tht.tht.domain.chat.usecase.GetChatListUseCase
5-
import com.tht.tht.domain.dailyusercard.DailyUserCardRepository
6-
import com.tht.tht.domain.dailyusercard.FetchDailyUserCardUseCase
75
import com.tht.tht.domain.email.repository.EmailRepository
86
import com.tht.tht.domain.email.usecase.SendInquiryEmailUseCase
97
import com.tht.tht.domain.image.ImageRepository
@@ -19,7 +17,24 @@ import com.tht.tht.domain.setting.usecase.FetchSettingManageItemsUseCase
1917
import com.tht.tht.domain.signup.repository.LocationRepository
2018
import com.tht.tht.domain.signup.repository.RegionCodeRepository
2119
import com.tht.tht.domain.signup.repository.SignupRepository
22-
import com.tht.tht.domain.signup.usecase.*
20+
import com.tht.tht.domain.signup.usecase.CheckLoginEnableUseCase
21+
import com.tht.tht.domain.signup.usecase.CheckNicknameDuplicateUseCase
22+
import com.tht.tht.domain.signup.usecase.CreateSignupUserUseCase
23+
import com.tht.tht.domain.signup.usecase.FetchCurrentLocationUseCase
24+
import com.tht.tht.domain.signup.usecase.FetchIdealTypeUseCase
25+
import com.tht.tht.domain.signup.usecase.FetchInterestUseCase
26+
import com.tht.tht.domain.signup.usecase.FetchLocationByAddressUseCase
27+
import com.tht.tht.domain.signup.usecase.FetchRegionCodeUseCase
28+
import com.tht.tht.domain.signup.usecase.FetchSignupUserUseCase
29+
import com.tht.tht.domain.signup.usecase.FetchTermsUseCase
30+
import com.tht.tht.domain.signup.usecase.PatchLocationUseCase
31+
import com.tht.tht.domain.signup.usecase.PatchSignupDataUseCase
32+
import com.tht.tht.domain.signup.usecase.RemoveSignupUserUseCase
33+
import com.tht.tht.domain.signup.usecase.RequestAuthenticationUseCase
34+
import com.tht.tht.domain.signup.usecase.RequestPhoneVerifyUseCase
35+
import com.tht.tht.domain.signup.usecase.RequestSignupUseCase
36+
import com.tht.tht.domain.tohot.DailyUserCardRepository
37+
import com.tht.tht.domain.tohot.FetchDailyUserCardUseCase
2338
import com.tht.tht.domain.tohot.FetchToHotStateUseCase
2439
import com.tht.tht.domain.token.repository.TokenRepository
2540
import com.tht.tht.domain.token.token.CheckAndRefreshThtAccessTokenUseCase
@@ -272,10 +287,10 @@ object UseCaseModule {
272287
@Provides
273288
fun provideFetchToHotStateUseCase(
274289
topicRepository: DailyTopicRepository,
275-
userCardRepository: DailyUserCardRepository,
290+
fetchDailyUserCardUseCase: FetchDailyUserCardUseCase,
276291
fetchDailyTopicListUseCase: FetchDailyTopicListUseCase
277292
): FetchToHotStateUseCase =
278-
FetchToHotStateUseCase(topicRepository, userCardRepository, fetchDailyTopicListUseCase)
293+
FetchToHotStateUseCase(topicRepository, fetchDailyUserCardUseCase, fetchDailyTopicListUseCase)
279294

280295
@Provides
281296
fun provideReportUserUseCase(

data/src/main/java/com/tht/tht/data/remote/mapper/DailyTopicMapper.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package com.tht.tht.data.remote.mapper
22

33
import com.tht.tht.data.remote.response.topic.DailyTopicResponse
4-
import com.tht.tht.domain.topic.DailyTopicListModel
4+
import com.tht.tht.domain.tohot.DailyTopicListModel
55
import com.tht.tht.domain.topic.DailyTopicModel
66

77
fun DailyTopicResponse.toModel(): DailyTopicListModel {

data/src/main/java/com/tht/tht/data/remote/mapper/DailyUserCardMapper.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package com.tht.tht.data.remote.mapper
22

33
import com.tht.tht.data.remote.response.dailyusercard.DailyUserCardResponse
4-
import com.tht.tht.domain.dailyusercard.DailyUserCardListModel
5-
import com.tht.tht.domain.dailyusercard.DailyUserCardModel
4+
import com.tht.tht.domain.tohot.DailyUserCardListModel
5+
import com.tht.tht.domain.tohot.DailyUserCardModel
66
import com.tht.tht.domain.signup.model.IdealTypeModel
77
import com.tht.tht.domain.signup.model.InterestModel
88

data/src/main/java/com/tht/tht/data/repository/DailyTopicRepositoryImpl.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ package com.tht.tht.data.repository
33
import com.tht.tht.data.remote.datasource.topic.DailyTopicDataSource
44
import com.tht.tht.data.remote.mapper.toEntity
55
import com.tht.tht.data.remote.mapper.toModel
6-
import com.tht.tht.domain.topic.DailyTopicListModel
6+
import com.tht.tht.domain.tohot.DailyTopicListModel
77
import com.tht.tht.domain.topic.DailyTopicRepository
88
import javax.inject.Inject
99

data/src/main/java/com/tht/tht/data/repository/DailyUserCardRepositoryImpl.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ package com.tht.tht.data.repository
33
import com.tht.tht.data.remote.datasource.dailyusercard.DailyUserCardDataSource
44
import com.tht.tht.data.remote.mapper.toModel
55
import com.tht.tht.data.remote.request.dailyusercard.DailyUserCardRequest
6-
import com.tht.tht.domain.dailyusercard.DailyUserCardListModel
7-
import com.tht.tht.domain.dailyusercard.DailyUserCardRepository
6+
import com.tht.tht.domain.tohot.DailyUserCardListModel
7+
import com.tht.tht.domain.tohot.DailyUserCardRepository
88
import javax.inject.Inject
99

1010
class DailyUserCardRepositoryImpl @Inject constructor(

domain/src/main/java/com/tht/tht/domain/dailyusercard/DailyUserCardListModel.kt renamed to domain/src/main/java/com/tht/tht/domain/tohot/DailyUserCardListModel.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.tht.tht.domain.dailyusercard
1+
package com.tht.tht.domain.tohot
22

33
data class DailyUserCardListModel(
44
val selectTopicIdx: Int,

domain/src/main/java/com/tht/tht/domain/dailyusercard/DailyUserCardRepository.kt renamed to domain/src/main/java/com/tht/tht/domain/tohot/DailyUserCardRepository.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.tht.tht.domain.dailyusercard
1+
package com.tht.tht.domain.tohot
22

33
interface DailyUserCardRepository {
44
suspend fun fetchDailyUserCard(

domain/src/main/java/com/tht/tht/domain/dailyusercard/FetchDailyUserCardUseCase.kt renamed to domain/src/main/java/com/tht/tht/domain/tohot/FetchDailyUserCardUseCase.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
1-
package com.tht.tht.domain.dailyusercard
1+
package com.tht.tht.domain.tohot
22

3-
//TODO: Topic Expire Check? 그리고 알잘딱깔센 List 내려주기? -> FetchToHotStateUseCase랑 차이점은?
43
class FetchDailyUserCardUseCase(
54
private val repository: DailyUserCardRepository
65
) {

domain/src/main/java/com/tht/tht/domain/tohot/FetchToHotStateUseCase.kt

Lines changed: 34 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,51 +1,57 @@
11
package com.tht.tht.domain.tohot
22

3-
import com.tht.tht.domain.dailyusercard.DailyUserCardRepository
43
import com.tht.tht.domain.topic.DailyTopicRepository
54
import com.tht.tht.domain.topic.FetchDailyTopicListUseCase
65

76
/**
8-
* 1. DailyUserCardRepository 조회
9-
* - 금일 동일 토픽을 선택한 User 목록 조회
10-
* - 금일 내가 선택한 주제어 idx 조회 -> 주제어 목록에서 selectTopicIdx로 금일 내가 선택한 주제어 정보 확인 가능
7+
* 1. Topic 정보 조회 + 오늘 선택한 Topic 상태 확인
8+
* - FetchDailyUserCardUseCase 에서 selectTopicIdx 를 확인 가능
9+
* - FetchDailyTopicListUseCase 에서 DailyTopic 정보 확인 가능
1110
*
12-
* 2. Local에 캐싱한 주제어 목록 정보 조회
13-
* - 만료되었다면 Remote에서 새로 불러옴
14-
* - selectTopicIdx가 음수면 Remote에서 새로 불러옴
15-
* 3.
11+
* 2. SelectTopicState 에 따라서 다음 Card 데이터 리턴
12+
* - 유효 하다면 UserListCard
13+
* - 유효 하지 않다면 TopicSelectCard
1614
*/
1715
class FetchToHotStateUseCase(
1816
private val topicRepository: DailyTopicRepository,
19-
private val userCardRepository: DailyUserCardRepository,
17+
private val fetchDailyUserCardUseCase: FetchDailyUserCardUseCase,
2018
private val fetchDailyTopicListUseCase: FetchDailyTopicListUseCase
2119
) {
2220
suspend operator fun invoke(
23-
currentTimeMill: Long,
21+
passedUserIdList: List<String>,
22+
lastUserDailyFallingCourserIdx: Int?,
23+
now: Long = System.currentTimeMillis(),
2424
size: Int = 10
2525
): Result<ToHotStateModel> {
2626
return kotlin.runCatching {
27-
val userCards = userCardRepository.fetchDailyUserCard(
28-
passedUserIdList = emptyList(),
29-
lastUserDailyFallingCourserIdx = null,
30-
size = size
31-
).copy(
32-
selectTopicIdx = -1 //TODO: Remove -> TestCode
33-
)
34-
val topic = kotlin.runCatching {
35-
val localTopic = topicRepository.fetchDailyTopicFromLocal()
36-
when {
37-
currentTimeMill > localTopic.topicResetTimeMill -> throw Exception("Topic Expired")
38-
userCards.selectTopicIdx < 0 -> throw Exception("None Select Topic")
39-
}
40-
localTopic
41-
}.getOrNull() ?: kotlin.run {
27+
val topicCachedFromLocal = topicRepository.fetchDailyTopicFromLocal()
28+
val topic = if (now > topicCachedFromLocal.topicResetTimeMill) {
4229
fetchDailyTopicListUseCase().getOrThrow()
30+
} else {
31+
topicCachedFromLocal
4332
}
44-
ToHotStateModel(
45-
topic = topic,
33+
34+
val userCards = fetchDailyUserCardUseCase.invoke(
35+
passedUserIdList = passedUserIdList,
36+
lastUserDailyFallingCourserIdx = lastUserDailyFallingCourserIdx,
37+
size = size
38+
).getOrThrow()
39+
// .copy(selectTopicIdx = -1) //TODO: Remove -> TestCode
40+
41+
val topicInfo = ToHotStateModel.TopicInfo(
4642
selectTopic = topic.topics.firstOrNull { it.idx == userCards.selectTopicIdx },
4743
topicResetTimeMill = userCards.topicResetTimeMill,
48-
cards = userCards.cards
44+
)
45+
46+
val cards: List<ToHotCardModel> = if (topicInfo.isAvailableTopic(now)) {
47+
userCards.cards
48+
} else {
49+
listOf(topic)
50+
}
51+
52+
ToHotStateModel(
53+
topicInfo = topicInfo,
54+
cards = cards
4955
)
5056
}
5157
}

0 commit comments

Comments
 (0)