Skip to content

Commit 6ecb05c

Browse files
committed
[REFACTOR/#222] UserLocalDataSource 관심사별로 분리 및 repository 구현체를 repositoryimpl 디렉토리로 통합하여 도메인 중심 구조로 정리
1 parent 3ac3caf commit 6ecb05c

File tree

32 files changed

+249
-221
lines changed

32 files changed

+249
-221
lines changed

core/alarm/src/main/java/com/yapp/alarm/receivers/AlarmInteractionActivityReceiver.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import android.content.Intent
66
import androidx.activity.ComponentActivity
77
import androidx.core.net.toUri
88
import com.yapp.alarm.AlarmConstants
9-
import com.yapp.domain.repository.UserDataRepository
9+
import com.yapp.domain.repository.FortuneRepository
1010
import dagger.hilt.android.AndroidEntryPoint
1111
import kotlinx.coroutines.CoroutineScope
1212
import kotlinx.coroutines.Dispatchers
@@ -20,7 +20,7 @@ import javax.inject.Inject
2020
class AlarmInteractionActivityReceiver(private val activity: ComponentActivity) : BroadcastReceiver() {
2121

2222
@Inject
23-
lateinit var userDataRepository: UserDataRepository
23+
lateinit var fortuneRepository: FortuneRepository
2424

2525
override fun onReceive(context: Context?, intent: Intent?) {
2626
val isSnoozed = intent?.getBooleanExtra(AlarmConstants.EXTRA_IS_SNOOZED, false) ?: false
@@ -30,7 +30,7 @@ class AlarmInteractionActivityReceiver(private val activity: ComponentActivity)
3030

3131
if (!isSnoozed) {
3232
CoroutineScope(Dispatchers.IO).launch {
33-
val fortuneDate = userDataRepository.fortuneDateFlow.firstOrNull()
33+
val fortuneDate = fortuneRepository.fortuneDateFlow.firstOrNull()
3434
val todayDate = LocalDate.now().format(DateTimeFormatter.ISO_DATE)
3535

3636
if (fortuneDate != todayDate) {

core/alarm/src/main/java/com/yapp/alarm/receivers/AlarmReceiver.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import com.yapp.analytics.AnalyticsEvent
1313
import com.yapp.analytics.AnalyticsHelper
1414
import com.yapp.domain.model.Alarm
1515
import com.yapp.domain.model.toTimeString
16-
import com.yapp.domain.repository.UserDataRepository
16+
import com.yapp.domain.repository.FortuneRepository
1717
import com.yapp.domain.usecase.AlarmUseCase
1818
import dagger.hilt.android.AndroidEntryPoint
1919
import kotlinx.coroutines.CoroutineScope
@@ -34,7 +34,7 @@ class AlarmReceiver : BroadcastReceiver() {
3434
lateinit var androidAlarmScheduler: AndroidAlarmScheduler
3535

3636
@Inject
37-
lateinit var userDataRepository: UserDataRepository
37+
lateinit var fortuneRepository: FortuneRepository
3838

3939
@Inject
4040
lateinit var alarmUseCase: AlarmUseCase
@@ -107,13 +107,13 @@ class AlarmReceiver : BroadcastReceiver() {
107107
),
108108
),
109109
)
110-
val existingId = userDataRepository.firstDismissedAlarmIdFlow.firstOrNull()
110+
val existingId = fortuneRepository.firstDismissedAlarmIdFlow.firstOrNull()
111111
if (existingId == null) {
112112
// 첫 번째 알람 해제 기록
113-
userDataRepository.saveFirstDismissedAlarmId(alarmId)
113+
fortuneRepository.saveFirstDismissedAlarmId(alarmId)
114114
} else if (existingId != alarmId) {
115115
// 두 번째 알람 해제 감지 - 기존 기록 삭제
116-
userDataRepository.clearDismissedAlarmId()
116+
fortuneRepository.clearDismissedAlarmId()
117117
}
118118
}
119119

core/alarm/src/main/java/com/yapp/alarm/services/AlarmService.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ import com.yapp.alarm.pendingIntent.interaction.createAlarmSnoozePendingIntent
2525
import com.yapp.alarm.pendingIntent.interaction.createNavigateToMissionPendingIntent
2626
import com.yapp.domain.model.Alarm
2727
import com.yapp.domain.model.AlarmDay
28-
import com.yapp.domain.repository.UserDataRepository
28+
import com.yapp.domain.repository.FortuneRepository
2929
import com.yapp.domain.usecase.AlarmUseCase
3030
import com.yapp.media.sound.SoundPlayer
3131
import dagger.hilt.android.AndroidEntryPoint
@@ -54,7 +54,7 @@ class AlarmService : Service() {
5454
lateinit var androidAlarmScheduler: AndroidAlarmScheduler
5555

5656
@Inject
57-
lateinit var userDataRepository: UserDataRepository
57+
lateinit var fortuneRepository: FortuneRepository
5858

5959
private val serviceScope = CoroutineScope(Dispatchers.IO + SupervisorJob())
6060

@@ -126,7 +126,7 @@ class AlarmService : Service() {
126126
}
127127

128128
private suspend fun shouldNavigateToMission(): Boolean {
129-
val fortuneDate = userDataRepository.fortuneDateFlow.firstOrNull()
129+
val fortuneDate = fortuneRepository.fortuneDateFlow.firstOrNull()
130130
val todayDate = LocalDate.now().format(DateTimeFormatter.ISO_DATE)
131131
return fortuneDate != todayDate
132132
}

data/src/main/java/com/yapp/data/remote/di/RepositoryModule.kt renamed to data/src/main/java/com/yapp/data/di/RepositoryModule.kt

Lines changed: 27 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
1-
package com.yapp.data.remote.di
1+
package com.yapp.data.di
22

3-
import com.yapp.data.remote.repositoryimpl.FortuneRepositoryImpl
4-
import com.yapp.data.remote.repositoryimpl.RemoteConfigRepositoryImpl
5-
import com.yapp.data.remote.repositoryimpl.SignUpRepositoryImpl
6-
import com.yapp.data.remote.repositoryimpl.UserInfoRepositoryImpl
3+
import com.yapp.data.repositoryimpl.AlarmRepositoryImpl
4+
import com.yapp.data.repositoryimpl.FortuneRepositoryImpl
5+
import com.yapp.data.repositoryimpl.ImageRepositoryImpl
6+
import com.yapp.data.repositoryimpl.RemoteConfigRepositoryImpl
7+
import com.yapp.data.repositoryimpl.SignUpRepositoryImpl
8+
import com.yapp.data.repositoryimpl.UserInfoRepositoryImpl
9+
import com.yapp.domain.repository.AlarmRepository
710
import com.yapp.domain.repository.FortuneRepository
11+
import com.yapp.domain.repository.ImageRepository
812
import com.yapp.domain.repository.RemoteConfigRepository
913
import com.yapp.domain.repository.SignUpRepository
1014
import com.yapp.domain.repository.UserInfoRepository
@@ -19,9 +23,21 @@ import javax.inject.Singleton
1923
abstract class RepositoryModule {
2024
@Binds
2125
@Singleton
22-
abstract fun bindsSignUpRepository(
23-
signUpRepository: SignUpRepositoryImpl,
24-
): SignUpRepository
26+
abstract fun bindsAlarmRepository(
27+
alarmRepository: AlarmRepositoryImpl,
28+
): AlarmRepository
29+
30+
@Binds
31+
@Singleton
32+
abstract fun bindsFortuneRepository(
33+
fortuneRepository: FortuneRepositoryImpl,
34+
): FortuneRepository
35+
36+
@Binds
37+
@Singleton
38+
abstract fun bindsImageRepository(
39+
imageRepository: ImageRepositoryImpl,
40+
): ImageRepository
2541

2642
@Binds
2743
@Singleton
@@ -31,9 +47,9 @@ abstract class RepositoryModule {
3147

3248
@Binds
3349
@Singleton
34-
abstract fun bindsFortuneRepository(
35-
fortuneRepository: FortuneRepositoryImpl,
36-
): FortuneRepository
50+
abstract fun bindsSignUpRepository(
51+
signUpRepository: SignUpRepositoryImpl,
52+
): SignUpRepository
3753

3854
@Binds
3955
@Singleton

data/src/main/java/com/yapp/data/local/datasource/AlarmLocalDataSource.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ import com.yapp.domain.model.Alarm
55
import kotlinx.coroutines.flow.Flow
66

77
interface AlarmLocalDataSource {
8+
val firstDismissedAlarmIdFlow: Flow<Long?>
9+
810
fun getAllAlarms(): Flow<List<Alarm>>
911
fun getPagedAlarms(limit: Int, offset: Int): Flow<List<Alarm>>
1012
fun getAlarmsByTime(hour: Int, minute: Int, isAm: Boolean): Flow<List<Alarm>>
@@ -14,4 +16,6 @@ interface AlarmLocalDataSource {
1416
suspend fun updateAlarmActive(id: Long, active: Boolean): Int
1517
suspend fun getAlarm(id: Long): Alarm?
1618
suspend fun deleteAlarm(id: Long): Int
19+
suspend fun saveFirstDismissedAlarmId(alarmId: Long)
20+
suspend fun clearDismissedAlarmId()
1721
}

data/src/main/java/com/yapp/data/local/datasource/AlarmLocalDataSourceImpl.kt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,18 @@ package com.yapp.data.local.datasource
33
import com.yapp.data.local.AlarmDao
44
import com.yapp.data.local.AlarmEntity
55
import com.yapp.data.local.toDomain
6+
import com.yapp.datastore.UserPreferences
67
import com.yapp.domain.model.Alarm
78
import kotlinx.coroutines.flow.Flow
89
import kotlinx.coroutines.flow.map
910
import javax.inject.Inject
1011

1112
class AlarmLocalDataSourceImpl @Inject constructor(
1213
private val alarmDao: AlarmDao,
14+
private val userPreferences: UserPreferences,
1315
) : AlarmLocalDataSource {
16+
override val firstDismissedAlarmIdFlow: Flow<Long?> = userPreferences.firstDismissedAlarmIdFlow
17+
1418
override fun getAllAlarms(): Flow<List<Alarm>> {
1519
return alarmDao.getAllAlarms()
1620
.map { alarmEntities -> alarmEntities.map { it.toDomain() } }
@@ -53,4 +57,12 @@ class AlarmLocalDataSourceImpl @Inject constructor(
5357
override suspend fun deleteAlarm(id: Long): Int {
5458
return alarmDao.deleteAlarm(id)
5559
}
60+
61+
override suspend fun saveFirstDismissedAlarmId(alarmId: Long) {
62+
userPreferences.saveFirstDismissedAlarmId(alarmId)
63+
}
64+
65+
override suspend fun clearDismissedAlarmId() {
66+
userPreferences.clearDismissedAlarmId()
67+
}
5668
}

domain/src/main/java/com/yapp/domain/repository/UserDataRepository.kt renamed to data/src/main/java/com/yapp/data/local/datasource/FortuneLocalDataSource.kt

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,20 @@
1-
package com.yapp.domain.repository
1+
package com.yapp.data.local.datasource
22

33
import kotlinx.coroutines.flow.Flow
44

5-
interface UserDataRepository {
6-
val userIdFlow: Flow<Long?>
7-
val userNameFlow: Flow<String?>
8-
val onboardingCompletedFlow: Flow<Boolean>
5+
interface FortuneLocalDataSource {
96
val fortuneIdFlow: Flow<Long?>
107
val fortuneDateFlow: Flow<String?>
118
val fortuneImageIdFlow: Flow<Int?>
129
val fortuneScoreFlow: Flow<Int?>
1310
val hasNewFortuneFlow: Flow<Boolean>
1411
val firstDismissedAlarmIdFlow: Flow<Long?>
1512

16-
suspend fun saveUserId(userId: Long)
17-
suspend fun saveUserName(userName: String)
18-
suspend fun setOnboardingCompleted()
1913
suspend fun saveFortuneId(fortuneId: Long)
2014
suspend fun markFortuneAsChecked()
2115
suspend fun saveFortuneImageId(imageResId: Int)
2216
suspend fun saveFortuneScore(score: Int)
2317
suspend fun saveFirstDismissedAlarmId(alarmId: Long)
2418
suspend fun clearDismissedAlarmId()
25-
suspend fun clearUserData()
2619
suspend fun clearFortuneId()
2720
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package com.yapp.data.local.datasource
2+
3+
import com.yapp.datastore.UserPreferences
4+
import javax.inject.Inject
5+
6+
class FortuneLocalDataSourceImpl @Inject constructor(
7+
private val userPreferences: UserPreferences,
8+
) : FortuneLocalDataSource {
9+
10+
override val fortuneIdFlow = userPreferences.fortuneIdFlow
11+
override val fortuneDateFlow = userPreferences.fortuneDateFlow
12+
override val fortuneImageIdFlow = userPreferences.fortuneImageIdFlow
13+
override val fortuneScoreFlow = userPreferences.fortuneScoreFlow
14+
override val hasNewFortuneFlow = userPreferences.hasNewFortuneFlow
15+
override val firstDismissedAlarmIdFlow = userPreferences.firstDismissedAlarmIdFlow
16+
17+
override suspend fun saveFortuneId(fortuneId: Long) {
18+
userPreferences.saveFortuneId(fortuneId)
19+
}
20+
21+
override suspend fun markFortuneAsChecked() {
22+
userPreferences.markFortuneAsChecked()
23+
}
24+
25+
override suspend fun saveFortuneImageId(imageResId: Int) {
26+
userPreferences.saveFortuneImageId(imageResId)
27+
}
28+
29+
override suspend fun saveFortuneScore(score: Int) {
30+
userPreferences.saveFortuneScore(score)
31+
}
32+
33+
override suspend fun saveFirstDismissedAlarmId(alarmId: Long) {
34+
userPreferences.saveFirstDismissedAlarmId(alarmId)
35+
}
36+
37+
override suspend fun clearDismissedAlarmId() {
38+
userPreferences.clearDismissedAlarmId()
39+
}
40+
41+
override suspend fun clearFortuneId() {
42+
userPreferences.clearFortuneId()
43+
}
44+
}

data/src/main/java/com/yapp/data/local/datasource/UserLocalDataSource.kt

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,22 +6,9 @@ interface UserLocalDataSource {
66
val userIdFlow: Flow<Long?>
77
val userNameFlow: Flow<String?>
88
val onboardingCompletedFlow: Flow<Boolean>
9-
val fortuneIdFlow: Flow<Long?>
10-
val fortuneDateFlow: Flow<String?>
11-
val fortuneImageIdFlow: Flow<Int?>
12-
val fortuneScoreFlow: Flow<Int?>
13-
val hasNewFortuneFlow: Flow<Boolean>
14-
val firstDismissedAlarmIdFlow: Flow<Long?>
159

1610
suspend fun saveUserId(userId: Long)
1711
suspend fun saveUserName(userName: String)
1812
suspend fun setOnboardingCompleted()
19-
suspend fun saveFortuneId(fortuneId: Long)
20-
suspend fun markFortuneAsChecked()
21-
suspend fun saveFortuneImageId(imageResId: Int)
22-
suspend fun saveFortuneScore(score: Int)
23-
suspend fun saveFirstDismissedAlarmId(alarmId: Long)
24-
suspend fun clearDismissedAlarmId()
2513
suspend fun clearUserData()
26-
suspend fun clearFortuneId()
2714
}

data/src/main/java/com/yapp/data/local/datasource/UserLocalDataSourceImpl.kt

Lines changed: 0 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,6 @@ class UserLocalDataSourceImpl @Inject constructor(
1111
override val userIdFlow: Flow<Long?> = userPreferences.userIdFlow
1212
override val userNameFlow: Flow<String?> = userPreferences.userNameFlow
1313
override val onboardingCompletedFlow: Flow<Boolean> = userPreferences.onboardingCompletedFlow
14-
override val fortuneIdFlow: Flow<Long?> = userPreferences.fortuneIdFlow
15-
override val fortuneDateFlow: Flow<String?> = userPreferences.fortuneDateFlow
16-
override val fortuneImageIdFlow: Flow<Int?> = userPreferences.fortuneImageIdFlow
17-
override val fortuneScoreFlow: Flow<Int?> = userPreferences.fortuneScoreFlow
18-
override val hasNewFortuneFlow: Flow<Boolean> = userPreferences.hasNewFortuneFlow
19-
override val firstDismissedAlarmIdFlow: Flow<Long?> = userPreferences.firstDismissedAlarmIdFlow
2014

2115
override suspend fun saveUserId(userId: Long) {
2216
userPreferences.saveUserId(userId)
@@ -30,35 +24,7 @@ class UserLocalDataSourceImpl @Inject constructor(
3024
userPreferences.setOnboardingCompleted()
3125
}
3226

33-
override suspend fun saveFortuneId(fortuneId: Long) {
34-
userPreferences.saveFortuneId(fortuneId)
35-
}
36-
37-
override suspend fun markFortuneAsChecked() {
38-
userPreferences.markFortuneAsChecked()
39-
}
40-
41-
override suspend fun saveFortuneImageId(imageResId: Int) {
42-
userPreferences.saveFortuneImageId(imageResId)
43-
}
44-
45-
override suspend fun saveFortuneScore(score: Int) {
46-
userPreferences.saveFortuneScore(score)
47-
}
48-
49-
override suspend fun saveFirstDismissedAlarmId(alarmId: Long) {
50-
userPreferences.saveFirstDismissedAlarmId(alarmId)
51-
}
52-
53-
override suspend fun clearDismissedAlarmId() {
54-
userPreferences.clearDismissedAlarmId()
55-
}
56-
5727
override suspend fun clearUserData() {
5828
userPreferences.clearUserData()
5929
}
60-
61-
override suspend fun clearFortuneId() {
62-
userPreferences.clearFortuneId()
63-
}
6430
}

0 commit comments

Comments
 (0)