From c16ec7c1f94ba1954c3db7075d1ef3e656a5fd29 Mon Sep 17 00:00:00 2001 From: librarywon Date: Thu, 29 Aug 2024 03:40:32 +0900 Subject: [PATCH 1/7] =?UTF-8?q?feat:=20StudyDay=20=EB=AA=A8=EB=8D=B8=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/teamhy2/main/model/StudyDay.kt | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 main-domain/src/main/java/com/teamhy2/main/model/StudyDay.kt 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..f6a25d64 --- /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 minuteDuration: Long, +) + +fun StudyDay.toMap(): Map { + return mapOf( + "date" to this.date.toString(), + "minuteDuration" to this.minuteDuration, + ) +} From d9f91282f394313913073832c4ce19744349f04d Mon Sep 17 00:00:00 2001 From: librarywon Date: Thu, 29 Aug 2024 03:42:01 +0900 Subject: [PATCH 2/7] =?UTF-8?q?feat:=20StudyDay=20Repository=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/teamhy2/main/data/di/MainModule.kt | 6 +++ .../repository/DefaultStudyDayRepository.kt | 47 +++++++++++++++++++ .../teamhy2/main/domain/StudyDayRepository.kt | 8 ++++ 3 files changed, 61 insertions(+) create mode 100644 main-data/src/main/java/com/teamhy2/main/data/repository/DefaultStudyDayRepository.kt create mode 100644 main-domain/src/main/java/com/teamhy2/main/domain/StudyDayRepository.kt 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..63aeb5b4 --- /dev/null +++ b/main-data/src/main/java/com/teamhy2/main/data/repository/DefaultStudyDayRepository.kt @@ -0,0 +1,47 @@ +package com.teamhy2.main.data.repository + +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 = ChronoUnit.MINUTES.between(startTimeParsed, now) + + val studyDay = + StudyDay( + date = LocalDate.now(), + minuteDuration = duration, + ) + + val userDocRef = firestore.collection(USERS_COLLECTION).document(uid) + val studyDayCollection = userDocRef.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, + ) +} From 28527fb58fa338d46f7f138cd87ed837c4ac3fc5 Mon Sep 17 00:00:00 2001 From: librarywon Date: Thu, 29 Aug 2024 03:44:14 +0900 Subject: [PATCH 3/7] =?UTF-8?q?feat:=20addStudyDay=20=EB=A1=9C=EC=A7=81=20?= =?UTF-8?q?=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/teamhy2/feature/main/MainScreen.kt | 1 + .../com/teamhy2/feature/main/MainViewModel.kt | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+) 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) + } + } + } } From 33e0b16b44c18a86595973684dff68fc1f4bb469 Mon Sep 17 00:00:00 2001 From: librarywon Date: Thu, 29 Aug 2024 15:52:51 +0900 Subject: [PATCH 4/7] =?UTF-8?q?refactor:=20=EA=B3=B5=EB=B6=80=EC=8B=9C?= =?UTF-8?q?=EA=B0=84=20=EB=8B=A8=EC=9C=84=20=EB=B3=80=EA=B2=BD=20minute=20?= =?UTF-8?q?->=20second?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../teamhy2/main/data/repository/DefaultStudyDayRepository.kt | 4 ++-- main-domain/src/main/java/com/teamhy2/main/model/StudyDay.kt | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) 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 index 63aeb5b4..189c24e1 100644 --- 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 @@ -27,12 +27,12 @@ class DefaultStudyDayRepository startTimeParsed = startTimeParsed.minusDays(1) } - val duration = ChronoUnit.MINUTES.between(startTimeParsed, now) + val duration = ChronoUnit.SECONDS.between(startTimeParsed, now) val studyDay = StudyDay( date = LocalDate.now(), - minuteDuration = duration, + secondDuration = duration, ) val userDocRef = firestore.collection(USERS_COLLECTION).document(uid) 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 index f6a25d64..019ef26f 100644 --- a/main-domain/src/main/java/com/teamhy2/main/model/StudyDay.kt +++ b/main-domain/src/main/java/com/teamhy2/main/model/StudyDay.kt @@ -4,12 +4,12 @@ import java.time.LocalDate data class StudyDay( val date: LocalDate, - val minuteDuration: Long, + val secondDuration: Long, ) fun StudyDay.toMap(): Map { return mapOf( "date" to this.date.toString(), - "minuteDuration" to this.minuteDuration, + "secondDuration" to this.secondDuration, ) } From c53b9fab3b8bf1ccf33fffdbdfd96505c8ac149c Mon Sep 17 00:00:00 2001 From: librarywon Date: Sat, 31 Aug 2024 14:54:43 +0900 Subject: [PATCH 5/7] =?UTF-8?q?refactor:=20=EB=B3=80=EC=88=98=20=EC=9E=90?= =?UTF-8?q?=EB=A3=8C=ED=98=95=20=EB=AA=85=EC=8B=9C,=20=EB=B3=80=EC=88=98?= =?UTF-8?q?=EB=AA=85=20=EA=B5=AC=EC=B2=B4=EC=A0=81=EC=9C=BC=EB=A1=9C=20?= =?UTF-8?q?=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/data/repository/DefaultStudyDayRepository.kt | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) 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 index 189c24e1..f37d51a0 100644 --- 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 @@ -1,5 +1,7 @@ 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 @@ -27,7 +29,7 @@ class DefaultStudyDayRepository startTimeParsed = startTimeParsed.minusDays(1) } - val duration = ChronoUnit.SECONDS.between(startTimeParsed, now) + val duration: Long = ChronoUnit.SECONDS.between(startTimeParsed, now) val studyDay = StudyDay( @@ -35,8 +37,10 @@ class DefaultStudyDayRepository secondDuration = duration, ) - val userDocRef = firestore.collection(USERS_COLLECTION).document(uid) - val studyDayCollection = userDocRef.collection(STUDYDAY_COLLECTION) + val userDocumentReference: DocumentReference = + firestore.collection(USERS_COLLECTION).document(uid) + val studyDayCollection: CollectionReference = + userDocumentReference.collection(STUDYDAY_COLLECTION) studyDayCollection.add(studyDay.toMap()).await() } From b2819eb0d09a0f86334bb286c3d1836b7d6cbce3 Mon Sep 17 00:00:00 2001 From: librarywon Date: Sat, 31 Aug 2024 16:55:39 +0900 Subject: [PATCH 6/7] =?UTF-8?q?feat:=20=EC=8A=A4=ED=94=8C=EB=9E=98?= =?UTF-8?q?=EC=8B=9C=20=EC=95=84=EC=9D=B4=EC=BD=98=20=EB=B0=B0=EA=B2=BD=20?= =?UTF-8?q?=EC=83=89=EC=83=81=20=EC=A7=80=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/designsystem/src/main/res/values/themes.xml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) 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 @@ - + - From 08ee8d6cd521e7a0273c1b66c682356b970aede2 Mon Sep 17 00:00:00 2001 From: librarywon Date: Sat, 31 Aug 2024 16:55:54 +0900 Subject: [PATCH 7/7] =?UTF-8?q?feat:=20=EC=95=B1=20=EC=9D=B4=EB=A6=84=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/res/values/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 + 홍익열공이 +