Skip to content

Commit

Permalink
[Merge] #71 -> develop
Browse files Browse the repository at this point in the history
[Feat/#71] ์„ค์ •์ฐฝ / ๋กœ๊ทธ์•„์›ƒ, ํšŒ์›ํƒˆํ‡ด api ์—ฐ๊ฒฐ
  • Loading branch information
chattymin authored Jan 11, 2024
2 parents d36eb14 + 9826113 commit 7d67c4a
Show file tree
Hide file tree
Showing 22 changed files with 225 additions and 27 deletions.
5 changes: 5 additions & 0 deletions core-ui/src/main/java/com/going/ui/extension/EnumUiState.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package com.going.ui.extension

enum class EnumUiState {
LOADING, SUCCESS, FAILURE
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,13 @@ import com.going.data.dto.BaseResponse
import com.going.data.dto.request.SignInRequestDto
import com.going.data.dto.request.SignUpRequestDto
import com.going.data.dto.response.AuthResponseDto
import com.going.data.dto.response.SignInResponseDto

interface AuthDataSource {
suspend fun postSignIn(
Authorization: String,
platform: SignInRequestDto,
): BaseResponse<AuthResponseDto>
): BaseResponse<SignInResponseDto>

suspend fun postSignUp(
Authorization: String,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
package com.going.data.datasource

import com.going.data.dto.NonDataBaseResponse
import com.going.data.dto.response.SignOutResponseDto

interface SettingDataSource {
suspend fun patchSignOut(): SignOutResponseDto

suspend fun deleteWithDraw(): NonDataBaseResponse<Unit>
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ interface TodoDataSource {
suspend fun getTodoListData(
tripId: Long,
category: String,
progress: String
progress: String,
): BaseResponse<List<TodoResponseDto>>

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import com.going.data.dto.BaseResponse
import com.going.data.dto.request.SignInRequestDto
import com.going.data.dto.request.SignUpRequestDto
import com.going.data.dto.response.AuthResponseDto
import com.going.data.dto.response.SignInResponseDto
import com.going.data.service.AuthService
import javax.inject.Inject

Expand All @@ -14,7 +15,7 @@ class AuthDataSourceImpl @Inject constructor(
override suspend fun postSignIn(
Authorization: String,
platform: SignInRequestDto,
): BaseResponse<AuthResponseDto> =
): BaseResponse<SignInResponseDto> =
authService.postSignin(Authorization, platform)

override suspend fun postSignUp(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.going.data.datasourceImpl

import com.going.data.datasource.SettingDataSource
import com.going.data.dto.NonDataBaseResponse
import com.going.data.dto.response.SignOutResponseDto
import com.going.data.service.SettingService
import javax.inject.Inject
Expand All @@ -9,4 +10,5 @@ class SettingDataSourceImpl @Inject constructor(
private val settingService: SettingService,
) : SettingDataSource {
override suspend fun patchSignOut(): SignOutResponseDto = settingService.patchSignOut()
override suspend fun deleteWithDraw(): NonDataBaseResponse<Unit> = settingService.deleteWithDraw()
}
2 changes: 2 additions & 0 deletions data/src/main/java/com/going/data/dto/BaseResponse.kt
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ import kotlinx.serialization.Serializable
data class BaseResponse<T>(
@SerialName("status")
val status: Int,
@SerialName("code")
val code: String,
@SerialName("message")
val message: String,
@SerialName("data")
Expand Down
14 changes: 14 additions & 0 deletions data/src/main/java/com/going/data/dto/NonDataBaseResponse.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.going.data.dto

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

@Serializable
data class NonDataBaseResponse<T>(
@SerialName("status")
val status: Int,
@SerialName("code")
val code: String,
@SerialName("message")
val message: String,
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.going.data.dto.response

import com.going.domain.entity.response.SignInModel
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

@Serializable
data class SignInResponseDto(
@SerialName("accessToken")
val accessToken: String,
@SerialName("refreshToken")
val refreshToken: String,
@SerialName("isResult")
val isResult: Boolean,
) {
fun toSignInModel() =
SignInModel(accessToken, refreshToken, isResult)
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import com.going.data.dto.request.toSignUpRequestDto
import com.going.domain.entity.request.RequestSignInModel
import com.going.domain.entity.request.RequestSignUpModel
import com.going.domain.entity.response.AuthTokenModel
import com.going.domain.entity.response.SignInModel
import com.going.domain.repository.AuthRepository
import javax.inject.Inject

Expand All @@ -15,12 +16,12 @@ class AuthRepositoryImpl @Inject constructor(
override suspend fun postSignIn(
Authorization: String,
requestSignIpModel: RequestSignInModel,
): Result<AuthTokenModel> =
): Result<SignInModel> =
runCatching {
authDataSource.postSignIn(
Authorization,
requestSignIpModel.toSignInRequestDto(),
).data.toAuthTokenModel()
).data.toSignInModel()
}

override suspend fun postSignUp(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,8 @@ class SettingRepositoryImpl @Inject constructor(
override suspend fun patchSignOut(): Result<SignOutModel> = runCatching {
settingDataSource.patchSignOut().toSignOutModel()
}

override suspend fun deleteWithDraw(): Result<Unit> = runCatching {
settingDataSource.deleteWithDraw()
}
}
3 changes: 2 additions & 1 deletion data/src/main/java/com/going/data/service/AuthService.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import com.going.data.dto.BaseResponse
import com.going.data.dto.request.SignInRequestDto
import com.going.data.dto.request.SignUpRequestDto
import com.going.data.dto.response.AuthResponseDto
import com.going.data.dto.response.SignInResponseDto
import retrofit2.http.Body
import retrofit2.http.Header
import retrofit2.http.POST
Expand All @@ -13,7 +14,7 @@ interface AuthService {
suspend fun postSignin(
@Header("Authorization") Authorization: String,
@Body body: SignInRequestDto,
): BaseResponse<AuthResponseDto>
): BaseResponse<SignInResponseDto>

@POST("api/users/signup")
suspend fun postSignUp(
Expand Down
5 changes: 5 additions & 0 deletions data/src/main/java/com/going/data/service/SettingService.kt
Original file line number Diff line number Diff line change
@@ -1,9 +1,14 @@
package com.going.data.service

import com.going.data.dto.NonDataBaseResponse
import com.going.data.dto.response.SignOutResponseDto
import retrofit2.http.DELETE
import retrofit2.http.PATCH

interface SettingService {
@PATCH("api/users/signout")
suspend fun patchSignOut(): SignOutResponseDto

@DELETE("api/users/withdraw")
suspend fun deleteWithDraw(): NonDataBaseResponse<Unit>
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.going.domain.entity.response

data class SignInModel(
val accessToken: String,
val refreshToken: String,
val isResult: Boolean,
)
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,13 @@ package com.going.domain.repository
import com.going.domain.entity.request.RequestSignInModel
import com.going.domain.entity.request.RequestSignUpModel
import com.going.domain.entity.response.AuthTokenModel
import com.going.domain.entity.response.SignInModel

interface AuthRepository {
suspend fun postSignIn(
Authorization: String,
data: RequestSignInModel,
): Result<AuthTokenModel>
): Result<SignInModel>

suspend fun postSignUp(
Authorization: String,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,6 @@ import com.going.domain.entity.response.SignOutModel

interface SettingRepository {
suspend fun patchSignOut(): Result<SignOutModel>

suspend fun deleteWithDraw(): Result<Unit>
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import androidx.lifecycle.lifecycleScope
import com.going.presentation.R
import com.going.presentation.databinding.ActivitySigninBinding
import com.going.presentation.onboarding.signup.OnboardingProfileSettingActivity
import com.going.presentation.setting.SettingActivity
import com.going.presentation.tendencytest.TendencyTestActivity
import com.going.presentation.tendencytest.TendencyTestSplashActivity
import com.going.ui.base.BaseActivity
Expand Down Expand Up @@ -69,7 +70,7 @@ class SignInActivity : BaseActivity<ActivitySigninBinding>(R.layout.activity_sig

private fun navigateToMainScreen() {
// ์ถ”ํ›„ ๋Œ€์‹œ๋ณด๋“œ ์—ฐ๊ฒฐ์‹œ ์—ฐ๊ฒฐ ์˜ˆ์ •
Intent(this, OnboardingProfileSettingActivity::class.java).apply {
Intent(this, SettingActivity::class.java).apply {
addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
startActivity(this)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,13 +74,16 @@ class SignInViewModel @Inject constructor(
authRepository.postSignIn(accessToken, RequestSignInModel(platform)).onSuccess {
tokenRepository.setTokens(it.accessToken, it.refreshToken)

_postChangeTokenState.value = SignInState.SUCCESS
if (it.isResult) {
_postChangeTokenState.value = SignInState.SUCCESS
} else {
_postChangeTokenState.value = SignInState.TENDENCY
}
}.onFailure {
val errorCode = toErrorCode(it)

_postChangeTokenState.value = when (errorCode) {
SIGN_UP -> SignInState.SIGN_UP
TENDENCY -> SignInState.TENDENCY
else -> SignInState.FAIL
}
}
Expand All @@ -90,6 +93,5 @@ class SignInViewModel @Inject constructor(
companion object {
const val KAKAO = "kakao"
const val SIGN_UP = "e4041"
const val TENDENCY = "e4045"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,9 @@ import com.going.presentation.R
import com.going.presentation.databinding.ActivitySettingBinding
import com.going.ui.base.BaseActivity
import com.going.ui.extension.setOnSingleClickListener
import dagger.hilt.android.AndroidEntryPoint

@AndroidEntryPoint
class SettingActivity : BaseActivity<ActivitySettingBinding>(R.layout.activity_setting) {

private var quitDialog: SettingQuitDialogFragment? = null
Expand All @@ -21,30 +23,25 @@ class SettingActivity : BaseActivity<ActivitySettingBinding>(R.layout.activity_s
initLogoutClickListener()
initQuitClickListener()
setVersionCode()

}

private fun initProfileClickListener() {
binding.layoutSettingProfile.setOnSingleClickListener {

}
}

private fun initInquireClickListener() {
binding.layoutSettingInquire.setOnSingleClickListener {

}
}

private fun initPolicyClickListener() {
binding.layoutSettingPolicy.setOnSingleClickListener {

}
}

private fun initAboutDooripClickListener() {
binding.layoutSettingAboutDoorip.setOnSingleClickListener {

}
}

Expand Down Expand Up @@ -83,5 +80,4 @@ class SettingActivity : BaseActivity<ActivitySettingBinding>(R.layout.activity_s
companion object {
private const val VERSION_CODE = "v1.0"
}

}
}
Original file line number Diff line number Diff line change
@@ -1,22 +1,35 @@
package com.going.presentation.setting

import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.view.View
import android.view.WindowManager
import androidx.fragment.app.activityViewModels
import androidx.lifecycle.flowWithLifecycle
import androidx.lifecycle.lifecycleScope
import com.going.presentation.R
import com.going.presentation.databinding.FragmentSettingLogoutDialogBinding
import com.going.ui.base.BaseDialog
import com.going.ui.extension.EnumUiState
import com.going.ui.extension.setOnSingleClickListener
import com.going.ui.extension.toast
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach

class SettingLogoutDialogFragment :
@AndroidEntryPoint
class SettingLogoutDialogFragment() :
BaseDialog<FragmentSettingLogoutDialogBinding>(R.layout.fragment_setting_logout_dialog) {

private val viewModel by activityViewModels<SettingViewModel>()

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)

initNegativeClickListener()
initPositiveClickListener()

observeUserSignOutState()
}

override fun onStart() {
Expand All @@ -31,14 +44,31 @@ class SettingLogoutDialogFragment :

private fun initPositiveClickListener() {
binding.tvDialogPositive.setOnSingleClickListener {
// ๋กœ๊ทธ์•„์›ƒ ๋ฒ„ํŠผ ๋ˆŒ๋ €์„ ๋•Œ์˜ ๋กœ์ง
viewModel.signOutKakao()
}
}

private fun observeUserSignOutState() {
viewModel.userSignOutState.flowWithLifecycle(lifecycle).onEach { state ->
when (state) {
EnumUiState.SUCCESS -> restartApp(requireContext())
EnumUiState.FAILURE -> toast(getString(R.string.server_error))
EnumUiState.LOADING -> {}
}
}.launchIn(lifecycleScope)
}

private fun initNegativeClickListener() {
binding.btnDialogNegative.setOnSingleClickListener {
dismiss()
}
}

private fun restartApp(context: Context) {
val packageManager = context.packageManager
val packageName = context.packageName
val componentName = packageManager.getLaunchIntentForPackage(packageName)?.component
context.startActivity(Intent.makeRestartActivityTask(componentName))
Runtime.getRuntime().exit(0)
}
}
Loading

0 comments on commit 7d67c4a

Please sign in to comment.