Skip to content
This repository has been archived by the owner on Mar 8, 2024. It is now read-only.

Commit

Permalink
๐Ÿ”€ :: (#123) ๋งˆ์ดํŽ˜์ด์ง€ ๋กœ์ปฌ ์ •๋ณด ์ €์žฅ ๊ธฐ๋Šฅ ๊ตฌํ˜„
Browse files Browse the repository at this point in the history
๐Ÿ”€ :: (#123) ๋งˆ์ดํŽ˜์ด์ง€ ๋กœ์ปฌ ์ •๋ณด ์ €์žฅ ๊ธฐ๋Šฅ ๊ตฌํ˜„
  • Loading branch information
Tmdhoon2 authored Nov 26, 2023
2 parents 118c865 + 13e1868 commit 011d45c
Show file tree
Hide file tree
Showing 16 changed files with 187 additions and 15 deletions.
11 changes: 11 additions & 0 deletions data/src/main/kotlin/com/signal/data/dao/MyPageDao.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@ package com.signal.data.dao
import androidx.room.Dao
import androidx.room.Insert
import androidx.room.Query
import androidx.room.Update
import com.signal.data.model.mypage.FamousSayingModel
import com.signal.data.model.mypage.UserInformationModel

@Dao
interface MyPageDao {
Expand All @@ -12,4 +14,13 @@ interface MyPageDao {

@Query("select * from famousSaying where id = :id")
suspend fun getFamousSaying(id: Long): FamousSayingModel?

@Insert
suspend fun setUserInformation(userInformationModel: UserInformationModel)

@Update
suspend fun updateUserInformation(userInformationModel: UserInformationModel)

@Query("select * from userInformation")
suspend fun getUserInformation(): UserInformationModel
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,14 @@ import com.signal.data.dao.MyPageDao
import com.signal.data.model.diagnosis.DiagnosisHistoryModel
import com.signal.data.model.diagnosis.DiagnosisModel
import com.signal.data.model.mypage.FamousSayingModel
import com.signal.data.model.mypage.UserInformationModel

@Database(
entities = [
DiagnosisModel::class,
DiagnosisHistoryModel::class,
FamousSayingModel::class,
UserInformationModel::class,
],
version = 1,
)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.signal.data.datasource.user.local

import com.signal.data.model.mypage.FamousSayingModel
import com.signal.data.model.mypage.UserInformationModel

interface LocalUserDataSource {
fun saveTokens(
Expand All @@ -20,4 +21,8 @@ interface LocalUserDataSource {

suspend fun addFamousSaying(famousSayings: List<FamousSayingModel>)
suspend fun getFamousSaying(id: Long): FamousSayingModel?

suspend fun setUserInformation(userInformationModel: UserInformationModel)
suspend fun updateUserInformation(userInformationModel: UserInformationModel)
suspend fun getUserInformation(): UserInformationModel
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package com.signal.data.datasource.user.local

import com.signal.data.database.SignalDatabase
import com.signal.data.model.mypage.FamousSayingModel
import com.signal.data.model.mypage.UserInformationModel
import com.signal.data.util.PreferenceManager

class LocalUserDataSourceImpl(
Expand Down Expand Up @@ -58,6 +59,17 @@ class LocalUserDataSourceImpl(
}

override suspend fun getFamousSaying(id: Long) = myPageDao.getFamousSaying(id = id)

override suspend fun setUserInformation(userInformationModel: UserInformationModel) {
myPageDao.setUserInformation(userInformationModel = userInformationModel)
}

override suspend fun updateUserInformation(userInformationModel: UserInformationModel) {
myPageDao.updateUserInformation(userInformationModel = userInformationModel)
}

override suspend fun getUserInformation() =
myPageDao.getUserInformation()
}

object Keys {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package com.signal.data.model.mypage

import androidx.room.Entity
import androidx.room.PrimaryKey
import com.signal.domain.entity.UserInformationEntity
import java.util.UUID

@Entity("userInformation")
data class UserInformationModel(
@PrimaryKey val id: UUID,
val name: String,
val phone: String,
val birth: String,
val profile: String?,
)

fun UserInformationModel.toEntity() = UserInformationEntity(
name = this.name,
phone = this.phone,
birth = this.birth,
imageUrl = this.profile,
)

fun UserInformationEntity.toModel() = UserInformationModel(
id = UUID.randomUUID(),
name = this.name,
phone = this.phone,
birth = this.birth,
profile = this.imageUrl,
)
Original file line number Diff line number Diff line change
Expand Up @@ -78,4 +78,15 @@ class UserRepositoryImpl(
override suspend fun getFamousSaying(id: Long) =
localUserDataSource.getFamousSaying(id = id)?.toEntity()

override suspend fun setUserInformation(userInformationEntity: UserInformationEntity) {
localUserDataSource.setUserInformation(userInformationModel = userInformationEntity.toModel())
}

override suspend fun updateUserInformation(userInformationEntity: UserInformationEntity) {
localUserDataSource.updateUserInformation(userInformationModel = userInformationEntity.toModel())
}

override suspend fun getUserInformation() =
localUserDataSource.getUserInformation().toEntity()

}
Original file line number Diff line number Diff line change
Expand Up @@ -27,4 +27,8 @@ interface UserRepository {

suspend fun addFamousSaying(famousSayings: List<FamousSayingEntity>)
suspend fun getFamousSaying(id: Long): FamousSayingEntity?

suspend fun setUserInformation(userInformationEntity: UserInformationEntity)
suspend fun updateUserInformation(userInformationEntity: UserInformationEntity)
suspend fun getUserInformation(): UserInformationEntity
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.signal.domain.usecase.users

import com.signal.domain.repository.UserRepository

class GetUserInformationUseCase(
private val userRepository: UserRepository,
) {
suspend operator fun invoke() = kotlin.runCatching {
userRepository.getUserInformation()
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.signal.domain.usecase.users

import com.signal.domain.entity.UserInformationEntity
import com.signal.domain.repository.UserRepository

class SetUserInformationUseCase(
private val userRepository: UserRepository,
) {
suspend operator fun invoke(userInformationEntity: UserInformationEntity) = kotlin.runCatching {
userRepository.setUserInformation(userInformationEntity = userInformationEntity)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.signal.domain.usecase.users

import com.signal.domain.entity.UserInformationEntity
import com.signal.domain.repository.UserRepository

class UpdateUserInformationUseCase(
private val userRepository: UserRepository,
) {
suspend operator fun invoke(userInformationEntity: UserInformationEntity) = kotlin.runCatching {
userRepository.updateUserInformation(userInformationEntity = userInformationEntity)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -41,18 +41,21 @@ import com.signal.domain.usecase.users.FetchUserInformationUseCase
import com.signal.domain.usecase.users.GetAccountIdUseCase
import com.signal.domain.usecase.users.GetDiagnosisHistoriesUseCase
import com.signal.domain.usecase.users.GetFamousSayingUseCase
import com.signal.domain.usecase.users.GetUserInformationUseCase
import com.signal.domain.usecase.users.SaveAccountIdUseCase
import com.signal.domain.usecase.users.SecessionUseCase
import com.signal.domain.usecase.users.SetUserInformationUseCase
import com.signal.domain.usecase.users.SignInUseCase
import com.signal.domain.usecase.users.SignOutUseCase
import com.signal.domain.usecase.users.SignUpUseCase
import com.signal.domain.usecase.users.UpdateUserInformationUseCase
import com.signal.signal_android.feature.diagnosis.DiagnosisViewModel
import com.signal.signal_android.feature.file.AttachmentViewModel
import com.signal.signal_android.feature.main.diary.DiaryViewModel
import com.signal.signal_android.feature.main.feed.FeedViewModel
import com.signal.signal_android.feature.main.home.HomeViewModel
import com.signal.signal_android.feature.main.mypage.MyPageViewModel
import com.signal.signal_android.feature.main.recommend.RecommendViewModel
import com.signal.signal_android.feature.mypage.MyPageViewModel
import com.signal.signal_android.feature.reservation.ReservationViewModel
import com.signal.signal_android.feature.signin.SignInViewModel
import com.signal.signal_android.feature.signup.SignUpViewModel
Expand Down Expand Up @@ -180,6 +183,9 @@ val useCaseModule: Module
single { GetDiagnosisHistoriesUseCase(diagnosisRepository = get()) }
single { GetFamousSayingUseCase(userRepository = get()) }
single { AddFamousSayingUseCase(userRepository = get()) }
single { GetUserInformationUseCase(userRepository = get()) }
single { SetUserInformationUseCase(userRepository = get()) }
single { UpdateUserInformationUseCase(userRepository = get()) }
}

val viewModelModule: Module
Expand All @@ -197,6 +203,9 @@ val viewModelModule: Module
secessionUseCase = get(),
fetchUserInformationUseCase = get(),
getFamousSayingUseCase = get(),
getUserInformationUseCase = get(),
setUserInformationUseCase = get(),
updateUserInformationUseCase = get(),
)
}
viewModel { FeedViewModel(feedRepository = get()) }
Expand All @@ -212,6 +221,7 @@ val viewModelModule: Module
HomeViewModel(
getDiagnosisHistoriesUseCase = get(),
getAccountIdUseCase = get(),
getUserInformationUseCase = get(),
)
}
viewModel { DiaryViewModel(diaryRepository = get()) }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,8 @@ internal fun Home(
rippleEnabled = true,
onClick = {},
),
model = "https://upload.wikimedia.org/wikipedia/commons/thumb/9/95/Instagram_logo_2022.svg/640px-Instagram_logo_2022.svg.png",
model = state.profile
?: R.drawable.ic_profile_image,
contentDescription = stringResource(id = R.string.my_page_profile_image),
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,14 @@ data class HomeState(
val lastDiagnosisDate: String,
val chartViewType: ChartViewType,
val diagnosisHistoryUiModels: List<DiagnosisHistoryUiModel>,
val profile: String?,
) {
companion object {
fun getDefaultState() = HomeState(
lastDiagnosisDate = "",
chartViewType = ChartViewType.DAY,
diagnosisHistoryUiModels = emptyList(),
profile = null,
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,15 @@ import com.signal.domain.entity.DiagnosisHistoryEntity
import com.signal.domain.enums.ChartViewType
import com.signal.domain.usecase.users.GetAccountIdUseCase
import com.signal.domain.usecase.users.GetDiagnosisHistoriesUseCase
import com.signal.domain.usecase.users.GetUserInformationUseCase
import com.signal.signal_android.BaseViewModel
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch

internal class HomeViewModel(
private val getDiagnosisHistoriesUseCase: GetDiagnosisHistoriesUseCase,
private val getAccountIdUseCase: GetAccountIdUseCase,
private val getUserInformationUseCase: GetUserInformationUseCase,
) : BaseViewModel<HomeState, HomeSideEffect>(HomeState.getDefaultState()) {
private val diagnosisHistories: MutableList<DiagnosisHistoryEntity> = mutableListOf()
private val diagnosisHistoryUiModels: MutableList<DiagnosisHistoryUiModel> = mutableListOf()
Expand All @@ -20,6 +22,7 @@ internal class HomeViewModel(

init {
getAccountId()
getUserInformation()
}

private fun getAccountId() {
Expand Down Expand Up @@ -133,4 +136,12 @@ internal class HomeViewModel(
}
setDiagnosisHistoriesByChartViewType()
}

private fun getUserInformation() {
viewModelScope.launch(Dispatchers.IO) {
getUserInformationUseCase().onSuccess {
setState(state.value.copy(profile = it.imageUrl))
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ import com.signal.signal_android.designsystem.foundation.SignalColor
import com.signal.signal_android.designsystem.foundation.SubTitle
import com.signal.signal_android.designsystem.util.signalClickable
import com.signal.signal_android.feature.main.mypage.MyPageSideEffect
import com.signal.signal_android.feature.main.mypage.MyPageViewModel
import org.koin.androidx.compose.koinViewModel

@Composable
Expand Down
Loading

0 comments on commit 011d45c

Please sign in to comment.