Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ dependencies {
implementation(projects.data.search)
implementation(projects.local.main)
implementation(projects.local.oauth)
implementation(projects.local.mypage)
implementation(projects.local.place)
implementation(projects.remote.oauth)
implementation(projects.remote.onboarding)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material3.Icon
import androidx.compose.material3.Text
Expand Down
1 change: 1 addition & 0 deletions data/mypage/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,6 @@ android {
}

dependencies {
implementation(projects.core.datastore)
implementation(projects.domain.mypage)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package com.teamsolply.solply.mypage.datasource

interface MypageLocalDataSource {
suspend fun saveAutoSignIn(autoSignIn: Boolean)
}
Original file line number Diff line number Diff line change
@@ -1,13 +1,19 @@
package com.teamsolply.solply.mypage.datasource

import com.teamsolply.solply.mypage.dto.request.DeleteUserRequestDto
import com.teamsolply.solply.mypage.dto.response.GetPersonaListResponseDto
import com.teamsolply.solply.mypage.dto.response.GetUserInfoResponseDto
import com.teamsolply.solply.mypage.dto.response.GetWithdrawListResponseDto
import com.teamsolply.solply.mypage.dto.response.NicknameDuplicateResponseDto
import com.teamsolply.solply.mypage.dto.response.PlaceListResponseDto
import com.teamsolply.solply.network.model.NullableBaseResponse

interface MypageRemoteDataSource {
suspend fun getUserInfo(): GetUserInfoResponseDto
suspend fun getPlaceList(townId: Long): PlaceListResponseDto
suspend fun getPersonaList(): GetPersonaListResponseDto
suspend fun checkNicknameDuplicate(nickname: String): NicknameDuplicateResponseDto
suspend fun getWithdrawList(): GetWithdrawListResponseDto
suspend fun deleteUser(deleteUserRequestDto: DeleteUserRequestDto): NullableBaseResponse<Unit>
suspend fun getReportPlaceList(userId: Long): PlaceListResponseDto
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.teamsolply.solply.mypage.dto.request

import com.teamsolply.solply.mypage.model.WithdrawType
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

@Serializable
data class DeleteUserRequestDto(
@SerialName("withdrawReason")
val withdrawType: WithdrawType,

@SerialName("reasonText")
val reasonText: String
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.teamsolply.solply.mypage.dto.response

import com.teamsolply.solply.mypage.model.WithdrawType
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

@Serializable
data class GetWithdrawListResponseDto(
@SerialName("description")
val withdrawList: List<WithdrawResponseDto>
)

@Serializable
data class WithdrawResponseDto(
@SerialName("withdrawType")
val withdrawType: WithdrawType,

@SerialName("description")
val description: String
)
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,9 @@ data class PlaceResponseDto(
@SerialName("placeName")
val placeName: String,

@SerialName("townId")
val townId: Long,

@SerialName("thumbnailImageUrl")
val imageUrl: String,

Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,19 @@
package com.teamsolply.solply.mypage.repository

import android.util.Log
import com.teamsolply.solply.mypage.datasource.MypageLocalDataSource
import com.teamsolply.solply.mypage.datasource.MypageRemoteDataSource
import com.teamsolply.solply.mypage.dto.request.DeleteUserRequestDto
import com.teamsolply.solply.mypage.dto.response.toDomain
import com.teamsolply.solply.mypage.model.PersonaEntity
import com.teamsolply.solply.mypage.model.PlaceInfoEntity
import com.teamsolply.solply.mypage.model.UserInfo
import com.teamsolply.solply.mypage.model.WithdrawEntity
import com.teamsolply.solply.mypage.model.WithdrawType
import javax.inject.Inject

class MypageRepositoryImpl @Inject constructor(
private val mypageRemoteDataSource: MypageRemoteDataSource
private val mypageRemoteDataSource: MypageRemoteDataSource,
private val mypageLocalDataSource: MypageLocalDataSource
) : MypageRepository {
override suspend fun getUserInfo(): Result<UserInfo> = runCatching {
mypageRemoteDataSource.getUserInfo()
Expand All @@ -26,15 +30,31 @@ class MypageRepositoryImpl @Inject constructor(
placeName = place.placeName,
placeType = place.tag,
imageUrls = place.imageUrl,
isSaved = place.isSaved
isSaved = place.isSaved,
townId = place.townId
)
}
}

override suspend fun getReportPlaceList(userId: Long): Result<List<PlaceInfoEntity>> =
runCatching {
mypageRemoteDataSource.getReportPlaceList(userId = userId).placeList
}.mapCatching { placeList ->
placeList.map { place ->
PlaceInfoEntity(
placeId = place.placeId,
placeName = place.placeName,
placeType = place.tag,
imageUrls = place.imageUrl,
isSaved = place.isSaved,
townId = place.townId
)
}
}

override suspend fun getPersonaList(): Result<List<PersonaEntity>> = runCatching {
mypageRemoteDataSource.getPersonaList().personaDtoList
}.mapCatching { personaList ->
Log.d("persona: ", "repo impl start")
personaList.map { persona ->
PersonaEntity(
personaType = persona.personaType,
Expand All @@ -46,4 +66,30 @@ class MypageRepositoryImpl @Inject constructor(
override suspend fun checkNicknameDuplicate(nickname: String): Result<Boolean> = runCatching {
mypageRemoteDataSource.checkNicknameDuplicate(nickname = nickname).isDuplicated
}

override suspend fun getWithdrawList(): Result<List<WithdrawEntity>> = runCatching {
mypageRemoteDataSource.getWithdrawList().withdrawList
}.mapCatching { list ->
list.map { reason ->
WithdrawEntity(
withdrawType = reason.withdrawType,
description = reason.description
)
}
}

override suspend fun deleteUser(withdrawType: WithdrawType, reason: String): Result<Unit> =
runCatching {
mypageRemoteDataSource.deleteUser(
DeleteUserRequestDto(
withdrawType = withdrawType,
reasonText = reason
)
)
}

override suspend fun saveAutoSignIn(autoSignIn: Boolean): Result<Unit> =
runCatching {
mypageLocalDataSource.saveAutoSignIn(autoSignIn)
}
}
2 changes: 2 additions & 0 deletions domain/mypage/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
plugins {
alias(libs.plugins.solply.java.library)
alias(libs.plugins.kotlin.serialization)
}

dependencies {
implementation(projects.core.model)
implementation(libs.bundles.coroutine)
implementation(libs.kotlinx.serialization.json)
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ data class PlaceInfoEntity(
val placeId: Long,
val placeName: String,
val placeType: PlaceType,
val townId: Long,
val imageUrls: String,
val isSaved: Boolean,
val isSelected: Boolean = false
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.teamsolply.solply.mypage.model

data class WithdrawEntity(
val withdrawType: WithdrawType,
val description: String
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.teamsolply.solply.mypage.model

import kotlinx.serialization.Serializable

@Serializable
enum class WithdrawType(
val description: String
) {
NOT_USE("자주 사용하지 않아서"),
DEFICIENT_INFO("원하는 지역과 장소가 부족해서"),
INCONVENIENT("앱 기능이 불편해서"),
HATE_RECOMMEND("추천 콘텐츠가 나와 맞지 않아서"),
USE_OTHER_SERVICE("다른 서비스를 사용하고 있습니다."),
OTHERS("기타")
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,16 @@ package com.teamsolply.solply.mypage.repository
import com.teamsolply.solply.mypage.model.PersonaEntity
import com.teamsolply.solply.mypage.model.PlaceInfoEntity
import com.teamsolply.solply.mypage.model.UserInfo
import com.teamsolply.solply.mypage.model.WithdrawEntity
import com.teamsolply.solply.mypage.model.WithdrawType

interface MypageRepository {
suspend fun getUserInfo(): Result<UserInfo>
suspend fun getPlaceList(townId: Long): Result<List<PlaceInfoEntity>>
suspend fun getReportPlaceList(userId: Long): Result<List<PlaceInfoEntity>>
suspend fun getPersonaList(): Result<List<PersonaEntity>>
suspend fun checkNicknameDuplicate(nickname: String): Result<Boolean>
suspend fun getWithdrawList(): Result<List<WithdrawEntity>>
suspend fun saveAutoSignIn(autoSignIn: Boolean): Result<Unit>
suspend fun deleteUser(withdrawType: WithdrawType, reason: String): Result<Unit>
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,14 @@ import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.lazy.grid.GridCells
import androidx.compose.foundation.lazy.grid.GridItemSpan
import androidx.compose.foundation.lazy.grid.LazyGridScope
import androidx.compose.foundation.lazy.grid.LazyVerticalGrid
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import com.teamsolply.solply.collection.R
import com.teamsolply.solply.designsystem.component.dialog.SolplyConfirmDialog
Expand All @@ -24,10 +26,6 @@ fun CollectionScreen(
onBackButtonClick: () -> Unit,
onDialogConfirmClick: () -> Unit,
onDialogDismissClick: () -> Unit,
selectMode: Boolean,
onSelectButtonClick: () -> Unit,
onDeleteButtonClick: () -> Unit,
onCancelButtonClick: () -> Unit,
dialogState: Boolean,
content: LazyGridScope.() -> Unit,
modifier: Modifier = Modifier
Expand All @@ -52,20 +50,38 @@ fun CollectionScreen(
barText = town,
onBackButtonClick = { onBackButtonClick() }
)
SelectModeBar(
selectMode = selectMode,
onSelectButtonClick = onSelectButtonClick,
onDeleteButtonClick = onDeleteButtonClick,
onCancelButtonClick = onCancelButtonClick
)
LazyVerticalGrid(
modifier = modifier
modifier = Modifier
.fillMaxSize(),
columns = GridCells.Fixed(2),
verticalArrangement = Arrangement.spacedBy(10.dp),
horizontalArrangement = Arrangement.Center,
contentPadding = PaddingValues(top = 16.dp, start = 16.dp, end = 16.dp),
contentPadding = PaddingValues(start = 16.dp, end = 16.dp),
content = content
)
}
}

@Preview
@Composable
private fun CollectionScreenPreview() {
SolplyTheme {
CollectionScreen(
town = "",
onBackButtonClick = {},
onDialogConfirmClick = {},
onDialogDismissClick = {},
content = {
item(span = { GridItemSpan(maxLineSpan) }) {
SelectModeBar(
selectMode = false,
onSelectButtonClick = { },
onDeleteButtonClick = { },
onCancelButtonClick = { }
)
}
},
dialogState = false
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.teamsolply.solply.collection.R
import com.teamsolply.solply.collection.collection.component.CollectionScreen
import com.teamsolply.solply.collection.collection.component.SelectModeBar
import com.teamsolply.solply.designsystem.component.card.SolplyCourseCard
import com.teamsolply.solply.model.MapsType
import com.teamsolply.solply.ui.extension.customClickable
Expand Down Expand Up @@ -61,12 +62,16 @@ fun CourseCollectionRoute(
onBackButtonClick = { viewModel.sendIntent(CourseCollectionIntent.BackButtonClick) },
onDialogConfirmClick = { viewModel.sendIntent(CourseCollectionIntent.DialogConfirmClick) },
onDialogDismissClick = { viewModel.sendIntent(CourseCollectionIntent.DialogDismissClick) },
selectMode = uiState.selectMode,
onSelectButtonClick = { viewModel.sendIntent(CourseCollectionIntent.SelectButtonClick) },
onDeleteButtonClick = { viewModel.sendIntent(CourseCollectionIntent.DeleteButtonClick) },
onCancelButtonClick = { viewModel.sendIntent(CourseCollectionIntent.CancelButtonClick) },
dialogState = uiState.dialogState,
content = {
item(span = { GridItemSpan(maxLineSpan) }) {
SelectModeBar(
selectMode = uiState.selectMode,
onSelectButtonClick = { viewModel.sendIntent(CourseCollectionIntent.SelectButtonClick) },
onDeleteButtonClick = { viewModel.sendIntent(CourseCollectionIntent.DeleteButtonClick) },
onCancelButtonClick = { viewModel.sendIntent(CourseCollectionIntent.CancelButtonClick) }
)
}
itemsIndexed(uiState.courses) { index, it ->
Box(
modifier = Modifier
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.teamsolply.solply.collection.R
import com.teamsolply.solply.collection.collection.component.CollectionScreen
import com.teamsolply.solply.collection.collection.component.SelectModeBar
import com.teamsolply.solply.designsystem.component.card.SolplyPlaceCard
import com.teamsolply.solply.model.MapsType
import com.teamsolply.solply.ui.extension.customClickable
Expand Down Expand Up @@ -61,12 +62,16 @@ fun PlaceCollectionRoute(
onBackButtonClick = { viewModel.sendIntent(PlaceCollectionIntent.BackButtonClick) },
onDialogConfirmClick = { viewModel.sendIntent(PlaceCollectionIntent.DialogConfirmClick) },
onDialogDismissClick = { viewModel.sendIntent(PlaceCollectionIntent.DialogDismissClick) },
selectMode = uiState.selectMode,
onSelectButtonClick = { viewModel.sendIntent(PlaceCollectionIntent.SelectButtonClick) },
onDeleteButtonClick = { viewModel.sendIntent(PlaceCollectionIntent.DeleteButtonClick) },
onCancelButtonClick = { viewModel.sendIntent(PlaceCollectionIntent.CancelButtonClick) },
dialogState = uiState.dialogState,
content = {
item(span = { GridItemSpan(maxLineSpan) }) {
SelectModeBar(
selectMode = uiState.selectMode,
onSelectButtonClick = { viewModel.sendIntent(PlaceCollectionIntent.SelectButtonClick) },
onDeleteButtonClick = { viewModel.sendIntent(PlaceCollectionIntent.DeleteButtonClick) },
onCancelButtonClick = { viewModel.sendIntent(PlaceCollectionIntent.CancelButtonClick) }
)
}
itemsIndexed(uiState.places) { index, it ->
Box(
modifier = Modifier
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import com.teamsolply.solply.main.splash.Splash
import com.teamsolply.solply.maps.navigation.navigateMaps
import com.teamsolply.solply.mypage.navigation.navigateMypage
import com.teamsolply.solply.mypage.profile.navigation.navigateProfile
import com.teamsolply.solply.mypage.withdraw.navigation.navigateWithdraw
import com.teamsolply.solply.oauth.navigation.navigateOauth
import com.teamsolply.solply.onboarding.navigation.navigateOnBoarding
import com.teamsolply.solply.place.navigation.navigatePlace
Expand Down Expand Up @@ -154,6 +155,12 @@ internal class MainNavigator(
)
}

fun navigateToWithdraw(
navOptions: NavOptions
) {
navController.navigateWithdraw(navOptions)
}

fun navigateToFavoriteTown(navOptions: NavOptions = navOptions {}) {
navController.navigateFavoriteTown(navOptions)
}
Expand Down
Loading