Skip to content

Commit

Permalink
Merge pull request #52 from TeamHY2/Feature/#51-timer-post-record
Browse files Browse the repository at this point in the history
[Feature] 타이머를 종료할 때 StudyDay 기록을 firebase에 전송합니다.
  • Loading branch information
librarywon authored Aug 31, 2024
2 parents 7de5a00 + 08ee8d6 commit 9e73b8f
Show file tree
Hide file tree
Showing 8 changed files with 106 additions and 4 deletions.
4 changes: 2 additions & 2 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
<resources>
<string name="app_name">HongikYeolgong2</string>
</resources>
<string name="app_name">홍익열공이</string>
</resources>
6 changes: 4 additions & 2 deletions core/designsystem/src/main/res/values/themes.xml
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<resources xmlns:tools="http://schemas.android.com/tools">

<style name="Theme.HongikYeolgong2" parent="Theme.AppCompat.DayNight.NoActionBar" />
<style name="Theme.HongikYeolgong2" parent="Theme.AppCompat.DayNight.NoActionBar">
<item name="android:windowSplashScreenBackground" tools:ignore="NewApi">#0C0D11</item>
</style>
</resources>
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package com.teamhy2.main.data.di

import com.teamhy2.main.data.repository.DefaultStudyDayRepository
import com.teamhy2.main.data.repository.DefaultWebViewRepository
import com.teamhy2.main.data.repository.DefaultWiseSayingRepository
import com.teamhy2.main.domain.StudyDayRepository
import com.teamhy2.main.domain.WebViewRepository
import com.teamhy2.main.domain.WiseSayingRepository
import dagger.Binds
Expand All @@ -20,4 +22,8 @@ abstract class MainModule {
@Binds
@Singleton
abstract fun bindWiseSayingRepository(impl: DefaultWiseSayingRepository): WiseSayingRepository

@Binds
@Singleton
abstract fun bindStudyDayRepository(impl: DefaultStudyDayRepository): StudyDayRepository
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package com.teamhy2.main.data.repository

import com.google.firebase.firestore.CollectionReference
import com.google.firebase.firestore.DocumentReference
import com.google.firebase.firestore.FirebaseFirestore
import com.teamhy2.main.domain.StudyDayRepository
import com.teamhy2.main.model.StudyDay
import com.teamhy2.main.model.toMap
import kotlinx.coroutines.tasks.await
import java.time.LocalDate
import java.time.LocalDateTime
import java.time.LocalTime
import java.time.temporal.ChronoUnit
import javax.inject.Inject

class DefaultStudyDayRepository
@Inject
constructor() : StudyDayRepository {
private val firestore = FirebaseFirestore.getInstance()

override suspend fun addStudyDay(
uid: String,
startTime: String,
) {
val now = LocalDateTime.now()
var startTimeParsed = LocalDateTime.of(now.toLocalDate(), LocalTime.parse(startTime))

if (startTimeParsed.isAfter(now)) {
startTimeParsed = startTimeParsed.minusDays(1)
}

val duration: Long = ChronoUnit.SECONDS.between(startTimeParsed, now)

val studyDay =
StudyDay(
date = LocalDate.now(),
secondDuration = duration,
)

val userDocumentReference: DocumentReference =
firestore.collection(USERS_COLLECTION).document(uid)
val studyDayCollection: CollectionReference =
userDocumentReference.collection(STUDYDAY_COLLECTION)
studyDayCollection.add(studyDay.toMap()).await()
}

companion object {
private const val USERS_COLLECTION = "User"
private const val STUDYDAY_COLLECTION = "StudyDay"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.teamhy2.main.domain

interface StudyDayRepository {
suspend fun addStudyDay(
uid: String,
startTime: String,
)
}
15 changes: 15 additions & 0 deletions main-domain/src/main/java/com/teamhy2/main/model/StudyDay.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.teamhy2.main.model

import java.time.LocalDate

data class StudyDay(
val date: LocalDate,
val secondDuration: Long,
)

fun StudyDay.toMap(): Map<String, Any> {
return mapOf(
"date" to this.date.toString(),
"secondDuration" to this.secondDuration,
)
}
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,7 @@ fun MainRoute(
onRightButtonClick = {
mainViewModel.updateStudyRoomEndDialogVisibility(false)
mainViewModel.updateTimerRunning(false)
mainViewModel.addStudyDay()
},
onDismiss = {
mainViewModel.updateStudyRoomEndDialogVisibility(false)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,15 @@ import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.google.firebase.Firebase
import com.google.firebase.auth.auth
import com.hongikyeolgong2.calendar.model.Calendar
import com.hongikyeolgong2.calendar.model.StudyDay
import com.hongikyeolgong2.calendar.model.StudyRoomUsage
import com.teamhy2.feature.main.model.MainUiState
import com.teamhy2.hongikyeolgong2.notification.NotificationHandler
import com.teamhy2.hongikyeolgong2.timer.prsentation.model.TimerUiModel
import com.teamhy2.main.domain.StudyDayRepository
import com.teamhy2.main.domain.WebViewRepository
import com.teamhy2.main.domain.WiseSayingRepository
import com.teamhy2.onboarding.domain.repository.UserRepository
Expand All @@ -30,6 +33,7 @@ class MainViewModel
private val webViewRepository: WebViewRepository,
private val wiseSayingRepository: WiseSayingRepository,
private val userRepository: UserRepository,
private val studyDayRepository: StudyDayRepository,
val notificationHandler: NotificationHandler,
) : ViewModel() {
private val _mainUiState = MutableStateFlow(MainUiState())
Expand All @@ -38,6 +42,10 @@ class MainViewModel
var urls by mutableStateOf<Map<String, String>>(emptyMap())
private set

val userUid: String by lazy {
Firebase.auth.currentUser?.uid ?: ""
}

private val _userExists: MutableStateFlow<Boolean> = MutableStateFlow(true)
val userExists: StateFlow<Boolean> = _userExists.asStateFlow()

Expand Down Expand Up @@ -128,4 +136,15 @@ class MainViewModel
leftTime = timerState.leftTime,
)
}

fun addStudyDay() {
val uid = userUid
val startTime = mainUiState.value.startTime

if (uid.isNotEmpty() && startTime != null) {
viewModelScope.launch {
studyDayRepository.addStudyDay(uid, startTime)
}
}
}
}

0 comments on commit 9e73b8f

Please sign in to comment.