Skip to content
Merged
6 changes: 6 additions & 0 deletions app/src/main/java/com/flint/core/common/util/Constants.kt
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,10 @@ object DataStoreKey {
const val REFRESH_TOKEN = "refreshToken"
const val USER_ID = "userId"
const val USER_NAME = "userName"
const val USER_EMAIL = "userEmail"
}

object ExternalLinks {
const val PRIVACY_POLICY_URL = "https://artistic-bacon-a40.notion.site/35650cdb714e804cb642eb2cc576a62c"
const val TERMS_OF_SERVICE_URL = "https://artistic-bacon-a40.notion.site/35650cdb714e8054a69bcbd110ed19dd?source=copy_link"
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.Brush
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import com.flint.R
Expand All @@ -36,6 +37,7 @@ fun FlintBasicButton(
state: FlintButtonState,
onClick: () -> Unit,
modifier: Modifier = Modifier,
textStyle: TextStyle = if (state == FlintButtonState.Able) FlintTheme.typography.body1Sb16 else FlintTheme.typography.body1M16,
enabled: Boolean = true,
contentPadding: PaddingValues,
@DrawableRes leadingIconRes: Int? = null,
Expand Down Expand Up @@ -76,7 +78,7 @@ fun FlintBasicButton(
Text(
text = text,
color = contentColor,
style = if (state == FlintButtonState.Able) FlintTheme.typography.body1Sb16 else FlintTheme.typography.body1M16,
style = textStyle,
)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,23 @@ enum class FlintButtonState() {
@ReadOnlyComposable
get() = BorderStroke(2.dp, FlintTheme.colors.primary400)
},

Destructive {
override val background: Brush
@Composable
@ReadOnlyComposable
get() = SolidColor(FlintTheme.colors.error500)

override val contentColor: Color
@Composable
@ReadOnlyComposable
get() = FlintTheme.colors.white

override val border: BorderStroke?
@Composable
@ReadOnlyComposable
get() = null
},
;

abstract val background: Brush
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.width
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import com.flint.core.designsystem.theme.FlintTheme
Expand All @@ -21,12 +22,14 @@ fun FlintMediumButton(
state: FlintButtonState,
onClick: () -> Unit,
modifier: Modifier = Modifier,
textStyle: TextStyle = if (state == FlintButtonState.Able) FlintTheme.typography.body1Sb16 else FlintTheme.typography.body1M16,
enabled: Boolean = true,
) {
FlintBasicButton(
text = text,
state = state,
onClick = onClick,
textStyle = textStyle,
enabled = enabled,
contentPadding = PaddingValues(10.dp),
modifier =
Expand Down
12 changes: 12 additions & 0 deletions app/src/main/java/com/flint/core/navigation/Route.kt
Original file line number Diff line number Diff line change
Expand Up @@ -58,4 +58,16 @@ interface Route {
data class Profile(
val userId: String? = null,
) : Route

@Serializable
data object Setting : Route

@Serializable
data object EditProfile : Route

@Serializable
data object Withdraw : Route

@Serializable
data object WithdrawComplete : Route
}
17 changes: 17 additions & 0 deletions app/src/main/java/com/flint/data/api/UserApi.kt
Original file line number Diff line number Diff line change
@@ -1,13 +1,18 @@
package com.flint.data.api

import com.flint.data.dto.base.BaseEmptyResponse
import com.flint.data.dto.base.BaseResponse
import com.flint.data.dto.content.response.BookmarkedContentListResponseDto
import com.flint.data.dto.user.request.UpdateNicknameRequestDto
import com.flint.data.dto.user.request.UpdateProfileImageRequestDto
import com.flint.data.dto.user.response.NicknameCheckResponseDto
import com.flint.data.dto.user.response.BookmarkedCollectionListResponseDto
import com.flint.data.dto.user.response.CreatedCollectionListResponseDto
import com.flint.data.dto.user.response.UserKeywordsResponseDto
import com.flint.data.dto.user.response.UserProfileResponseDto
import retrofit2.http.Body
import retrofit2.http.GET
import retrofit2.http.PUT
import retrofit2.http.Path
import retrofit2.http.Query

Expand Down Expand Up @@ -57,4 +62,16 @@ interface UserApi {
): BaseResponse<UserKeywordsResponseDto>

// 취향 키워드 재계산

// 닉네임 수정
@PUT("/api/v1/users/me/nickname")
suspend fun updateNickname(
@Body requestDto: UpdateNicknameRequestDto,
): BaseEmptyResponse

// 프로필 이미지 수정
@PUT("/api/v1/users/me/profile-image")
suspend fun updateProfileImage(
@Body requestDto: UpdateProfileImageRequestDto,
): BaseEmptyResponse
}
12 changes: 12 additions & 0 deletions app/src/main/java/com/flint/data/dto/base/BaseEmptyResponse.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.flint.data.dto.base

import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

@Serializable
data class BaseEmptyResponse(
@SerialName("status")
val status: Int,
@SerialName("message")
val message: String,
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.flint.data.dto.user.request

import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

@Serializable
data class UpdateNicknameRequestDto(
@SerialName("nickname")
val nickname: String,
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.flint.data.dto.user.request

import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

@Serializable
data class UpdateProfileImageRequestDto(
@SerialName("profileImage")
val profileImage: String,
)
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,11 @@ class AuthRepository @Inject constructor(
result
}

suspend fun logout(): Result<Unit> =
suspendRunCatching {
preferencesManager.clearAll()
}

// :TODO 일단 10으로 고정해둠 수정예정
suspend fun withdraw(agreedTermsIds: List<String> = listOf("10")): Result<Unit> =
suspendRunCatching {
Expand Down
16 changes: 16 additions & 0 deletions app/src/main/java/com/flint/domain/repository/UserRepository.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ package com.flint.domain.repository
import com.flint.core.common.util.DataStoreKey.USER_ID
import com.flint.core.common.util.suspendRunCatching
import com.flint.data.api.UserApi
import com.flint.data.dto.user.request.UpdateNicknameRequestDto
import com.flint.data.dto.user.request.UpdateProfileImageRequestDto
import com.flint.data.local.PreferencesManager
import com.flint.domain.mapper.collection.toModel
import com.flint.domain.mapper.content.toModel
Expand Down Expand Up @@ -64,4 +66,18 @@ class UserRepository @Inject constructor(
suspendRunCatching {
apiService.checkNickname(nickname).data.toModel()
}

// 닉네임 수정
suspend fun updateNickname(nickname: String): Result<Unit> =
suspendRunCatching {
apiService.updateNickname(UpdateNicknameRequestDto(nickname = nickname))
Unit
}

// 프로필 이미지 수정
suspend fun updateProfileImage(imageKey: String): Result<Unit> =
suspendRunCatching {
apiService.updateProfileImage(UpdateProfileImageRequestDto(profileImage = imageKey))
Unit
}
}
25 changes: 25 additions & 0 deletions app/src/main/java/com/flint/presentation/main/MainNavHost.kt
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,10 @@ import com.flint.presentation.onboarding.navigation.onBoardingNavGraph
import com.flint.presentation.profile.navigation.myProfileNavGraph
import com.flint.presentation.profile.navigation.profileNavGraph
import com.flint.presentation.savedcontent.navigation.savedContentListNavGraph
import com.flint.presentation.setting.editprofile.navigation.editProfileNavGraph
import com.flint.presentation.setting.navigation.settingNavGraph
import com.flint.presentation.setting.withdraw.navigation.withdrawCompleteNavGraph
import com.flint.presentation.setting.withdraw.navigation.withdrawNavGraph
import com.flint.presentation.splash.navigation.splashNavGraph

@Composable
Expand Down Expand Up @@ -96,6 +100,7 @@ fun MainNavHost(
navigateToCollectionList = navigator::navigateToCollectionList,
navigateToSavedContentList = navigator::navigateToSavedContent,
navigateToCollectionDetail = navigator::navigateToCollectionDetail,
navigateToSetting = navigator::navigateToSetting,
)

profileNavGraph(
Expand All @@ -105,6 +110,26 @@ fun MainNavHost(
navigateToSavedContentList = navigator::navigateToSavedContent,
navigateToCollectionDetail = navigator::navigateToCollectionDetail,
)

settingNavGraph(
navigateUp = navigator::navigateUp,
navigateToLogin = navigator::navigateToLogin,
navigateToEditProfile = navigator::navigateToEditProfile,
navigateToWithdraw = navigator::navigateToWithdraw,
)

editProfileNavGraph(
navigateUp = navigator::navigateUp,
)

withdrawNavGraph(
navigateUp = navigator::navigateUp,
navigateToWithdrawComplete = navigator::navigateToWithdrawComplete,
)

withdrawCompleteNavGraph(
navigateToLogin = navigator::navigateToLogin,
)
}
}
}
20 changes: 20 additions & 0 deletions app/src/main/java/com/flint/presentation/main/MainNavigator.kt
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,10 @@ import com.flint.presentation.onboarding.navigation.navigateToOnboarding
import com.flint.presentation.profile.navigation.navigateToMyProfile
import com.flint.presentation.profile.navigation.navigateToProfile
import com.flint.presentation.savedcontent.navigation.navigateToSavedContentList
import com.flint.presentation.setting.editprofile.navigation.navigateToEditProfile
import com.flint.presentation.setting.navigation.navigateToSetting
import com.flint.presentation.setting.withdraw.navigation.navigateToWithdraw
import com.flint.presentation.setting.withdraw.navigation.navigateToWithdrawComplete
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.StateFlow
Expand Down Expand Up @@ -155,6 +159,22 @@ class MainNavigator(
navController.navigateToProfile(userId, navOptions)
}

fun navigateToSetting(navOptions: NavOptions? = null) {
navController.navigateToSetting(navOptions)
}

fun navigateToEditProfile(navOptions: NavOptions? = null) {
navController.navigateToEditProfile(navOptions)
}

fun navigateToWithdraw(navOptions: NavOptions? = null) {
navController.navigateToWithdraw(navOptions)
}

fun navigateToWithdrawComplete(navOptions: NavOptions? = clearStackNavOptions) {
navController.navigateToWithdrawComplete(navOptions)
}

fun navigateUp() {
navController.navigateUp()
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ fun ProfileRoute(
navigateToCollectionList: (routeType: CollectionListRouteType, userId: String?) -> Unit,
navigateToSavedContentList: () -> Unit, // TODO: 스프린트에서 구현
navigateToCollectionDetail: (collectionId: String) -> Unit,
navigateToSetting: () -> Unit = {},
viewModel: ProfileViewModel = hiltViewModel(),
) {
val uiState by viewModel.uiState.collectAsStateWithLifecycle()
Expand Down Expand Up @@ -105,6 +106,7 @@ fun ProfileRoute(
uiState = uiState,
onBackClick = navigateUp,
onCollectionItemClick = navigateToCollectionDetail,
onSettingsClick = navigateToSetting,
onContentItemClick = { contentId ->
viewModel.getOttListPerContent(contentId)
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ fun NavGraphBuilder.myProfileNavGraph(
navigateToCollectionList: (routeType: CollectionListRouteType, userId: String?) -> Unit,
navigateToSavedContentList: () -> Unit,
navigateToCollectionDetail: (collectionId: String) -> Unit,
navigateToSetting: () -> Unit = {},
) {
composable<MainTabRoute.Profile> {
ProfileRoute(
Expand All @@ -36,6 +37,7 @@ fun NavGraphBuilder.myProfileNavGraph(
navigateToCollectionList = navigateToCollectionList,
navigateToSavedContentList = navigateToSavedContentList,
navigateToCollectionDetail = navigateToCollectionDetail,
navigateToSetting = navigateToSetting,
)
}
}
Expand Down
Loading
Loading