@@ -23,17 +23,20 @@ import com.yapp.alarm.pendingIntent.interaction.createAlarmAlertPendingIntent
2323import com.yapp.alarm.pendingIntent.interaction.createAlarmDismissPendingIntent
2424import com.yapp.alarm.pendingIntent.interaction.createAlarmSnoozePendingIntent
2525import com.yapp.alarm.pendingIntent.interaction.createNavigateToMissionPendingIntent
26- import com.yapp.alarm.scheduler.PostFortuneTaskScheduler
2726import com.yapp.domain.model.Alarm
2827import com.yapp.domain.model.AlarmDay
2928import com.yapp.domain.model.MissionType
3029import com.yapp.domain.repository.AlarmRepository
30+ import com.yapp.domain.repository.FortuneRepository
31+ import com.yapp.domain.repository.UserInfoRepository
32+ import com.yapp.domain.tracker.FortuneCreationTracker
3133import com.yapp.media.sound.SoundPlayer
3234import dagger.hilt.android.AndroidEntryPoint
3335import kotlinx.coroutines.CoroutineScope
3436import kotlinx.coroutines.Dispatchers
3537import kotlinx.coroutines.SupervisorJob
3638import kotlinx.coroutines.cancel
39+ import kotlinx.coroutines.flow.first
3740import kotlinx.coroutines.launch
3841import javax.inject.Inject
3942
@@ -52,7 +55,13 @@ class AlarmService : Service() {
5255 lateinit var androidAlarmScheduler: AndroidAlarmScheduler
5356
5457 @Inject
55- lateinit var postFortuneTaskScheduler: PostFortuneTaskScheduler
58+ lateinit var fortuneRepository: FortuneRepository
59+
60+ @Inject
61+ lateinit var userInfoRepository: UserInfoRepository
62+
63+ @Inject
64+ lateinit var fortuneCreationTracker: FortuneCreationTracker
5665
5766 private val serviceScope = CoroutineScope (Dispatchers .IO + SupervisorJob ())
5867
@@ -79,7 +88,7 @@ class AlarmService : Service() {
7988 super .onDestroy()
8089 }
8190
82- private fun handleIntent (intent : Intent ) {
91+ private suspend fun handleIntent (intent : Intent ) {
8392 val alarm: Alarm ? = intent.getStringExtra(AlarmConstants .EXTRA_ALARM )?.let (Alarm ::fromJson)
8493
8594 if (alarm == null ) {
@@ -117,7 +126,19 @@ class AlarmService : Service() {
117126 turnOffAlarm(alarmId = notificationId)
118127 }
119128
120- postFortuneTaskScheduler.enqueueOnceForToday()
129+ val shouldPostFortune = ! fortuneRepository.hasTodayFortune()
130+ if (shouldPostFortune) {
131+ val userId = userInfoRepository.userIdFlow.first()
132+ userId?.let {
133+ fortuneCreationTracker.start()
134+ fortuneRepository.postFortune(userId).onSuccess { fortune ->
135+ fortuneCreationTracker.succeed(fortune.id)
136+ fortuneRepository.markFortuneAsCreated(fortune.id)
137+ }.onFailure {
138+ fortuneCreationTracker.fail()
139+ }
140+ }
141+ }
121142 }
122143
123144 private fun shouldNavigateToMission (
0 commit comments