diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index bf4e15eb..4ec1b6ff 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,3 +1,3 @@ - HongikYeolgong2 - \ No newline at end of file + 홍익열공이 + diff --git a/core/designsystem/src/main/res/values/themes.xml b/core/designsystem/src/main/res/values/themes.xml index 290e34ed..3064db19 100644 --- a/core/designsystem/src/main/res/values/themes.xml +++ b/core/designsystem/src/main/res/values/themes.xml @@ -1,5 +1,7 @@ - + - diff --git a/main-data/src/main/java/com/teamhy2/main/data/di/MainModule.kt b/main-data/src/main/java/com/teamhy2/main/data/di/MainModule.kt index 23d72aff..98094c53 100644 --- a/main-data/src/main/java/com/teamhy2/main/data/di/MainModule.kt +++ b/main-data/src/main/java/com/teamhy2/main/data/di/MainModule.kt @@ -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 @@ -20,4 +22,8 @@ abstract class MainModule { @Binds @Singleton abstract fun bindWiseSayingRepository(impl: DefaultWiseSayingRepository): WiseSayingRepository + + @Binds + @Singleton + abstract fun bindStudyDayRepository(impl: DefaultStudyDayRepository): StudyDayRepository } diff --git a/main-data/src/main/java/com/teamhy2/main/data/repository/DefaultStudyDayRepository.kt b/main-data/src/main/java/com/teamhy2/main/data/repository/DefaultStudyDayRepository.kt new file mode 100644 index 00000000..f37d51a0 --- /dev/null +++ b/main-data/src/main/java/com/teamhy2/main/data/repository/DefaultStudyDayRepository.kt @@ -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" + } + } diff --git a/main-domain/src/main/java/com/teamhy2/main/domain/StudyDayRepository.kt b/main-domain/src/main/java/com/teamhy2/main/domain/StudyDayRepository.kt new file mode 100644 index 00000000..39fb8e46 --- /dev/null +++ b/main-domain/src/main/java/com/teamhy2/main/domain/StudyDayRepository.kt @@ -0,0 +1,8 @@ +package com.teamhy2.main.domain + +interface StudyDayRepository { + suspend fun addStudyDay( + uid: String, + startTime: String, + ) +} diff --git a/main-domain/src/main/java/com/teamhy2/main/model/StudyDay.kt b/main-domain/src/main/java/com/teamhy2/main/model/StudyDay.kt new file mode 100644 index 00000000..019ef26f --- /dev/null +++ b/main-domain/src/main/java/com/teamhy2/main/model/StudyDay.kt @@ -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 { + return mapOf( + "date" to this.date.toString(), + "secondDuration" to this.secondDuration, + ) +} diff --git a/main-presentation/src/main/java/com/teamhy2/feature/main/MainScreen.kt b/main-presentation/src/main/java/com/teamhy2/feature/main/MainScreen.kt index ef6c3225..f608dd58 100644 --- a/main-presentation/src/main/java/com/teamhy2/feature/main/MainScreen.kt +++ b/main-presentation/src/main/java/com/teamhy2/feature/main/MainScreen.kt @@ -107,6 +107,7 @@ fun MainRoute( onRightButtonClick = { mainViewModel.updateStudyRoomEndDialogVisibility(false) mainViewModel.updateTimerRunning(false) + mainViewModel.addStudyDay() }, onDismiss = { mainViewModel.updateStudyRoomEndDialogVisibility(false) diff --git a/main-presentation/src/main/java/com/teamhy2/feature/main/MainViewModel.kt b/main-presentation/src/main/java/com/teamhy2/feature/main/MainViewModel.kt index c31dc5cf..e0f866f4 100644 --- a/main-presentation/src/main/java/com/teamhy2/feature/main/MainViewModel.kt +++ b/main-presentation/src/main/java/com/teamhy2/feature/main/MainViewModel.kt @@ -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 @@ -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()) @@ -38,6 +42,10 @@ class MainViewModel var urls by mutableStateOf>(emptyMap()) private set + val userUid: String by lazy { + Firebase.auth.currentUser?.uid ?: "" + } + private val _userExists: MutableStateFlow = MutableStateFlow(true) val userExists: StateFlow = _userExists.asStateFlow() @@ -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) + } + } + } }