Skip to content

Commit

Permalink
Merge pull request #86 from PawWithU/feature/mypage
Browse files Browse the repository at this point in the history
feature/mypage: 프로필 정보 수정 기능 구현 및 API 연결
  • Loading branch information
kang9366 authored Mar 22, 2024
2 parents 270ffee + 4e39281 commit fd14aad
Show file tree
Hide file tree
Showing 28 changed files with 538 additions and 106 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.kusitms.connectdog.core.data.api

import com.kusitms.connectdog.core.data.api.model.AdditionalAuthBody
import com.kusitms.connectdog.core.data.api.model.DeleteAccountResponse
import com.kusitms.connectdog.core.data.api.model.IsDuplicateNicknameResponse
import com.kusitms.connectdog.core.data.api.model.LoginResponseItem
Expand Down Expand Up @@ -29,6 +30,7 @@ import retrofit2.http.Body
import retrofit2.http.DELETE
import retrofit2.http.GET
import retrofit2.http.Headers
import retrofit2.http.PATCH
import retrofit2.http.POST
import retrofit2.http.Path
import retrofit2.http.Query
Expand Down Expand Up @@ -157,6 +159,11 @@ internal interface ApiService {
@DELETE("/volunteers/my/delete")
suspend fun deleteAccount(): DeleteAccountResponse

@PATCH("/volunteers/my/profile")
suspend fun updateUserInfo(
@Body userInfo: UserInfoResponse
)

/**
* 이동봉사자 > 공고 상세조회
*/
Expand All @@ -175,6 +182,14 @@ internal interface ApiService {
@Path("postId") postId: Long
)

@POST("/volunteers/additional-auth")
suspend fun postAdditionalAuth(
@Body additionalAuthBody: AdditionalAuthBody
)

@GET("/volunteers/applications/my-info")
suspend fun getAdditionalAuth(): AdditionalAuthBody

/**
* 이동봉사자 > 공고 상세조회 > 중개자 프로필 조회
*/
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.kusitms.connectdog.core.data.api.model

data class AdditionalAuthBody(
val name: String,
val phone: String
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.kusitms.connectdog.core.data.api.model

data class DeleteAccountResponse(
val code: Int,
val isSuccess: Boolean,
val message: String,
val result: Result
)

data class Result(
val userId: Long
)
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
package com.kusitms.connectdog.core.data.repository

import com.kusitms.connectdog.core.data.api.model.AdditionalAuthBody
import com.kusitms.connectdog.core.data.api.model.volunteer.ApplyBody

interface ApplyRepository {
suspend fun postApplyVolunteer(postId: Long, applyBody: ApplyBody)
suspend fun postAdditionalAuth(additionalAuthBody: AdditionalAuthBody)
suspend fun getAdditionalAuth(): AdditionalAuthBody
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.kusitms.connectdog.core.data.repository

import com.kusitms.connectdog.core.data.api.ApiService
import com.kusitms.connectdog.core.data.api.model.AdditionalAuthBody
import com.kusitms.connectdog.core.data.api.model.volunteer.ApplyBody
import javax.inject.Inject

Expand All @@ -10,4 +11,12 @@ internal class ApplyRepositoryImpl @Inject constructor(
override suspend fun postApplyVolunteer(postId: Long, applyBody: ApplyBody) {
api.postApplyVolunteer(postId, applyBody)
}

override suspend fun postAdditionalAuth(additionalAuthBody: AdditionalAuthBody) {
api.postAdditionalAuth(additionalAuthBody)
}

override suspend fun getAdditionalAuth(): AdditionalAuthBody {
return api.getAdditionalAuth()
}
}
Original file line number Diff line number Diff line change
@@ -1,13 +1,19 @@
package com.kusitms.connectdog.core.data.repository

import com.kusitms.connectdog.core.data.api.model.DeleteAccountResponse
import com.kusitms.connectdog.core.data.api.model.IsDuplicateNicknameResponse
import com.kusitms.connectdog.core.data.api.model.MyInfoResponseItem
import com.kusitms.connectdog.core.data.api.model.volunteer.BadgeResponse
import com.kusitms.connectdog.core.data.api.model.volunteer.BookmarkResponseItem
import com.kusitms.connectdog.core.data.api.model.volunteer.IsDuplicateNicknameBody
import com.kusitms.connectdog.core.data.api.model.volunteer.UserInfoResponse

interface MyPageRepository {
suspend fun getMyInfo(): MyInfoResponseItem
suspend fun getUserInfo(): UserInfoResponse
suspend fun getBadge(): List<BadgeResponse>
suspend fun getBookmarkData(): List<BookmarkResponseItem>
suspend fun deleteAccount(): DeleteAccountResponse
suspend fun postNickname(nickname: IsDuplicateNicknameBody): IsDuplicateNicknameResponse
suspend fun updateUserInfo(userInfo: UserInfoResponse)
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
package com.kusitms.connectdog.core.data.repository

import com.kusitms.connectdog.core.data.api.ApiService
import com.kusitms.connectdog.core.data.api.model.DeleteAccountResponse
import com.kusitms.connectdog.core.data.api.model.IsDuplicateNicknameResponse
import com.kusitms.connectdog.core.data.api.model.MyInfoResponseItem
import com.kusitms.connectdog.core.data.api.model.volunteer.BadgeResponse
import com.kusitms.connectdog.core.data.api.model.volunteer.BookmarkResponseItem
import com.kusitms.connectdog.core.data.api.model.volunteer.IsDuplicateNicknameBody
import com.kusitms.connectdog.core.data.api.model.volunteer.UserInfoResponse
import javax.inject.Inject

Expand All @@ -25,4 +28,16 @@ internal class MyPageRepositoryImpl @Inject constructor(
override suspend fun getBookmarkData(): List<BookmarkResponseItem> {
return api.getBookmarkData()
}

override suspend fun deleteAccount(): DeleteAccountResponse {
return api.deleteAccount()
}

override suspend fun postNickname(nickname: IsDuplicateNicknameBody): IsDuplicateNicknameResponse {
return api.postNickname(nickname)
}

override suspend fun updateUserInfo(userInfo: UserInfoResponse) {
return api.updateUserInfo(userInfo)
}
}
Binary file not shown.
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package com.kusitms.connectdog.core.designsystem.component

import android.annotation.SuppressLint
import android.util.Log
import androidx.annotation.StringRes
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxWidth
Expand All @@ -20,6 +19,8 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.Modifier
import androidx.compose.ui.R
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalSoftwareKeyboardController
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
Expand All @@ -40,11 +41,12 @@ fun ConnectDogTextField(
label: String,
enabled: Boolean = true,
placeholder: String,
borderColor: Color = Gray5,
@StringRes supportingText: Int? = null,
imeAction: ImeAction = ImeAction.Next,
keyboardType: KeyboardType = KeyboardType.Text,
isError: Boolean = false,
@SuppressLint("PrivateResource") @StringRes errorMessageRes: Int = androidx.compose.ui.R.string.default_error_message,
@SuppressLint("PrivateResource") @StringRes errorMessageRes: Int = R.string.default_error_message,
height: Int = 65
) {
val visualTransformation =
Expand Down Expand Up @@ -99,7 +101,7 @@ fun ConnectDogTextField(
},
colors =
OutlinedTextFieldDefaults.colors(
unfocusedBorderColor = Gray5,
unfocusedBorderColor = borderColor,
errorBorderColor = MaterialTheme.colorScheme.error
)
// textStyle = LocalTextStyle.current.copy(
Expand Down Expand Up @@ -166,6 +168,7 @@ fun ConnectDogTextFieldWithButton(
textFieldLabel: String,
placeholder: String,
buttonLabel: String,
borderColor: Color = Gray5,
keyboardType: KeyboardType = KeyboardType.Text,
padding: Int,
onClick: (String) -> Unit = {},
Expand All @@ -177,9 +180,8 @@ fun ConnectDogTextFieldWithButton(
label = textFieldLabel,
placeholder = placeholder,
keyboardType = keyboardType,
onTextChanged = {
onTextChanged(it)
},
onTextChanged = { onTextChanged(it) },
borderColor = borderColor,
isError = isError
)

Expand All @@ -192,7 +194,6 @@ fun ConnectDogTextFieldWithButton(
.padding(top = 6.dp, end = 16.dp)
.align(Alignment.CenterEnd),
onClick = {
Log.d("testts", text)
onClick(text)
}
)
Expand Down
1 change: 1 addition & 0 deletions core/designsystem/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
<string name="end_recruit">모집마감</string>
<string name="login">로그인</string>
<string name="volunteer_signup">이동봉사자 회원가입</string>
<string name="select_image">이미지 선택</string>
<string name="intermediator_signup">이동봉사 중개 회원가입</string>
<string name="apply_volunter">이동봉사 신청하기</string>
<string name="management">봉사관리</string>
Expand Down
Binary file not shown.
Binary file not shown.
Original file line number Diff line number Diff line change
Expand Up @@ -17,15 +17,6 @@ import javax.inject.Inject
class ApplyViewModel @Inject constructor(
private val applyRepository: ApplyRepository
) : ViewModel() {
private val _isCertified: MutableStateFlow<Boolean> = MutableStateFlow(false)
val isCertified: StateFlow<Boolean> = _isCertified

private val _isSendNumber: MutableStateFlow<Boolean> = MutableStateFlow(false)
val isSendNumber: StateFlow<Boolean> = _isSendNumber

private val _isChecked = MutableStateFlow(true)
val isChecked: StateFlow<Boolean> = _isChecked

private val _name: MutableState<String> = mutableStateOf("")
val name: String
get() = if (_isChecked.value) { _name.value } else { "" }
Expand All @@ -34,9 +25,8 @@ class ApplyViewModel @Inject constructor(
val phoneNumber: String
get() = if (_isChecked.value) { _phoneNumber.value } else { "" }

private val _certificationNumber: MutableState<String> = mutableStateOf("")
val certificationNumber: String
get() = _certificationNumber.value
private val _isChecked = MutableStateFlow(true)
val isChecked: StateFlow<Boolean> = _isChecked

private val _transportation: MutableState<String> = mutableStateOf("")
val transportation: String
Expand All @@ -46,17 +36,9 @@ class ApplyViewModel @Inject constructor(
val content: String
get() = _content.value

fun updateName(name: String) {
_name.value = name
}

fun updatePhoneNumber(phoneNumber: String) {
_phoneNumber.value = phoneNumber
}

fun updateCertificationNumber(certificationNumber: String) {
_certificationNumber.value = certificationNumber
}
private val _isNextEnabled: MutableState<Boolean> = mutableStateOf(false)
val isNextEnabled: Boolean
get() = _isNextEnabled.value

fun updateTransportation(transportation: String) {
_transportation.value = transportation
Expand All @@ -66,16 +48,16 @@ class ApplyViewModel @Inject constructor(
_content.value = content
}

fun updateIsCertified(isCertified: Boolean) {
_isCertified.value = isCertified
fun updateIsChecked() {
_isChecked.value = !_isChecked.value
}

fun updateIsSendNumber(value: Boolean) {
_isSendNumber.value = value
fun updateName(name: String) {
_name.value = name
}

fun updateIsChecked() {
_isChecked.value = !_isChecked.value
fun updatePhoneNumber(phoneNumber: String) {
_phoneNumber.value = phoneNumber
}

fun postApplyVolunteer(postId: Long, applyBody: ApplyBody) {
Expand All @@ -88,4 +70,16 @@ class ApplyViewModel @Inject constructor(
}
}
}

fun getAdditionalAuth() {
viewModelScope.launch {
try {
val response = applyRepository.getAdditionalAuth()
_name.value = response.name
_phoneNumber.value = response.phone
} catch (e: Exception) {
Log.d("testttserror", e.message.toString())
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
package com.kusitms.connectdog.feature.home

import android.util.Log
import androidx.compose.runtime.MutableState
import androidx.compose.runtime.mutableStateOf
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.kusitms.connectdog.core.data.api.model.AdditionalAuthBody
import com.kusitms.connectdog.core.data.repository.ApplyRepository
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.launch
import javax.inject.Inject

@HiltViewModel
class CertificationViewModel @Inject constructor(
private val applyRepository: ApplyRepository
) : ViewModel() {
private val _isCertified: MutableStateFlow<Boolean> = MutableStateFlow(false)
val isCertified: StateFlow<Boolean> = _isCertified

private val _isSendNumber: MutableStateFlow<Boolean> = MutableStateFlow(false)
val isSendNumber: StateFlow<Boolean> = _isSendNumber

private val _name: MutableState<String> = mutableStateOf("")
val name: String
get() = _name.value

private val _phoneNumber: MutableState<String> = mutableStateOf("")
val phoneNumber: String
get() = _phoneNumber.value

private val _certificationNumber: MutableState<String> = mutableStateOf("")
val certificationNumber: String
get() = _certificationNumber.value

fun updateName(name: String) {
_name.value = name
}

fun updatePhoneNumber(phoneNumber: String) {
_phoneNumber.value = phoneNumber
}

fun updateCertificationNumber(certificationNumber: String) {
_certificationNumber.value = certificationNumber
}

fun updateIsCertified(isCertified: Boolean) {
_isCertified.value = isCertified
}

fun updateIsSendNumber(value: Boolean) {
_isSendNumber.value = value
}

fun postAdditionalAuth() {
val body = AdditionalAuthBody(name = _name.value, phone = _phoneNumber.value)
viewModelScope.launch {
try {
val response = applyRepository.postAdditionalAuth(body)
Log.d("testtts", response.toString())
} catch (e: Exception) {
Log.d("testttserror", e.message.toString())
}
}
}
}
Loading

0 comments on commit fd14aad

Please sign in to comment.