Skip to content

Commit 1b53433

Browse files
authored
Merge pull request #74 from YAPP-Github/feature/moneymong-232-멤버-미구현-기능-개발
Feature/moneymong 232 멤버 미구현 기능 개발
2 parents cf575bf + 686c35b commit 1b53433

11 files changed

Lines changed: 173 additions & 57 deletions

File tree

core/network/src/main/java/com/moneymong/moneymong/network/util/MoneyMongTokenAuthenticator.kt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package com.moneymong.moneymong.network.util
22

33
import com.moneymong.moneymong.domain.repository.TokenRepository
44
import com.moneymong.moneymong.network.BuildConfig
5+
import kotlinx.coroutines.flow.SharedFlow
56
import kotlinx.coroutines.runBlocking
67
import okhttp3.Authenticator
78
import okhttp3.Request
@@ -19,6 +20,7 @@ class MoneyMongTokenAuthenticator @Inject constructor(
1920
if (response.code == 401 && !isPathRefresh) {
2021
return runBlocking {
2122
var newRequest: Request? = null
23+
//로컬에서 리프레쉬 토큰 가져오기
2224
tokenRepository.getRefreshToken().onSuccess {
2325
tokenRepository.getUpdateToken(it)
2426
.onSuccess { token ->
@@ -37,6 +39,14 @@ class MoneyMongTokenAuthenticator @Inject constructor(
3739
}
3840
}
3941
.onFailure {
42+
//it
43+
//TODO 토큰 갱신 요청이 실패하거나 네트워크 문제 등으로 인해 갱신 되지 않았을 떄
44+
// 에러 화면
45+
}
46+
}
47+
.onFailure {
48+
//it
49+
//로컬에서 리프레쉬 토큰을 가져오지 못한 경우
4050
runBlocking {
4151
tokenRepository.notifyTokenUpdateFailed(true)
4252
}

data/src/main/java/com/moneymong/moneymong/data/repository/login/TokenRepositoryImpl.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import com.moneymong.moneymong.domain.entity.login.UserDataStoreInfoEntity
99
import com.moneymong.moneymong.domain.param.login.RefreshTokenParam
1010
import com.moneymong.moneymong.domain.repository.TokenRepository
1111
import kotlinx.coroutines.flow.MutableSharedFlow
12+
import kotlinx.coroutines.flow.SharedFlow
1213
import javax.inject.Inject
1314

1415
class TokenRepositoryImpl @Inject constructor(
@@ -21,6 +22,8 @@ class TokenRepositoryImpl @Inject constructor(
2122
tokenUpdateFailed.emit(failed)
2223
}
2324

25+
override val tokenUpdateFailed = MutableSharedFlow<Boolean>(replay = 1)
26+
2427
override suspend fun getRefreshToken(): Result<String> {
2528
return localDataSource.getRefreshToken()
2629
}
@@ -34,6 +37,7 @@ class TokenRepositoryImpl @Inject constructor(
3437
}
3538

3639
override suspend fun getUpdateToken(refreshToken: String): Result<RefreshTokenEntity> {
40+
tokenUpdateFailed.emit(true)
3741
return tokenRemoteDataSource.getUpdateToken(refreshToken).map { it.toEntity() }
3842
}
3943

domain/src/main/java/com/moneymong/moneymong/domain/repository/TokenRepository.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import com.moneymong.moneymong.domain.entity.login.RefreshTokenEntity
44
import com.moneymong.moneymong.domain.entity.login.UserDataStoreInfoEntity
55
import com.moneymong.moneymong.domain.param.login.RefreshTokenParam
66
import kotlinx.coroutines.flow.MutableSharedFlow
7+
import kotlinx.coroutines.flow.SharedFlow
78

89
interface TokenRepository {
910
val tokenUpdateFailed: MutableSharedFlow<Boolean>

domain/src/main/java/com/moneymong/moneymong/domain/repository/user/UserRepository.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package com.moneymong.moneymong.domain.repository.user
33
import com.moneymong.moneymong.domain.entity.user.UserEntity
44

55
interface UserRepository {
6+
67

78
suspend fun getMyInfo(): Result<UserEntity>
89

domain/src/main/java/com/moneymong/moneymong/domain/usecase/member/GetMyInfoUseCase.kt

Lines changed: 0 additions & 22 deletions
This file was deleted.

feature/home/src/main/java/com/moneymong/moneymong/home/HomeScreen.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,6 @@ import com.moneymong.moneymong.ocr_result.navigation.ocrResultScreen
5050
fun HomeScreen(
5151
expired: Boolean,
5252
onChangeExpired: (Boolean) -> Unit
53-
5453
) {
5554
val homeNavigator = rememberHomeNavigator()
5655
val homeNavController = homeNavigator.navHostController

feature/member/src/main/java/com/example/member/MemberScreen.kt

Lines changed: 86 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,15 @@ import androidx.hilt.navigation.compose.hiltViewModel
3131
import com.example.member.component.MemberCardView
3232
import com.example.member.component.MemberDialogView
3333
import com.example.member.component.MemberListView
34+
import com.moneymong.moneymong.common.ui.noRippleClickable
3435
import com.moneymong.moneymong.design_system.R
3536
import com.moneymong.moneymong.design_system.component.bottomSheet.MDSBottomSheet
3637
import com.moneymong.moneymong.design_system.component.button.MDSButton
3738
import com.moneymong.moneymong.design_system.component.button.MDSButtonSize
3839
import com.moneymong.moneymong.design_system.component.button.MDSButtonType
3940
import com.moneymong.moneymong.design_system.component.snackbar.MDSSnackbarHost
41+
import com.moneymong.moneymong.design_system.error.ErrorDialog
42+
import com.moneymong.moneymong.design_system.error.ErrorScreen
4043
import com.moneymong.moneymong.design_system.theme.Blue04
4144
import com.moneymong.moneymong.design_system.theme.Body3
4245
import com.moneymong.moneymong.design_system.theme.Body4
@@ -99,7 +102,7 @@ fun MemberScreen(
99102
LaunchedEffect(key1 = Unit) {
100103
viewModel.eventEmit(MemberSideEffect.GetInvitationCode(state.agencyId.toLong()))
101104
viewModel.eventEmit(MemberSideEffect.GetMemberLists(state.agencyId.toLong()))
102-
viewModel.eventEmit(MemberSideEffect.GetMyInfo(Unit)) //TODO - 마이몽 유저 정보 조회 연결
105+
viewModel.eventEmit(MemberSideEffect.GetMyInfo(Unit))
103106
}
104107

105108

@@ -150,7 +153,17 @@ fun MemberScreen(
150153
}
151154
}
152155
}
153-
156+
if (state.visiblePopUpError) {
157+
ErrorDialog(
158+
message = state.errorPopUpMessage,
159+
onConfirm = {
160+
viewModel.eventEmit(MemberSideEffect.GetInvitationCode(state.agencyId.toLong()))
161+
viewModel.eventEmit(MemberSideEffect.GetMemberLists(state.agencyId.toLong()))
162+
viewModel.eventEmit(MemberSideEffect.GetMyInfo(Unit))
163+
viewModel.visiblePopUpErrorChanged(false)
164+
}
165+
)
166+
}
154167
if (state.showDialog) {
155168
MemberDialogView(
156169
onDismissRequest = {
@@ -165,7 +178,6 @@ fun MemberScreen(
165178

166179
if (state.visibleBottomSheet) {
167180
viewModel.isRoleChanged(false)
168-
169181
MDSBottomSheet(
170182
onDismissRequest = {
171183
coroutineScope.launch {
@@ -188,7 +200,7 @@ fun MemberScreen(
188200
verticalArrangement = Arrangement.spacedBy(20.dp)
189201
) {
190202
Row(
191-
modifier = Modifier.clickable {
203+
modifier = Modifier.noRippleClickable {
192204
bottomSheetType.value = BottomSheetType.ADMIN_GENERAL_MEMBER
193205
}
194206
) {
@@ -208,7 +220,7 @@ fun MemberScreen(
208220
Text(
209221
modifier = Modifier
210222
.fillMaxWidth()
211-
.clickable {
223+
.noRippleClickable {
212224
viewModel.onVertClickChanged(false)
213225
viewModel.onShowDialogChanged(true)
214226
},
@@ -227,7 +239,7 @@ fun MemberScreen(
227239
Row(
228240
modifier = Modifier
229241
.fillMaxWidth()
230-
.clickable {
242+
.noRippleClickable {
231243
viewModel.isStaffCheckedChanged(true)
232244
viewModel.isMemberCheckedChanged(false)
233245
}
@@ -250,7 +262,7 @@ fun MemberScreen(
250262
Row(
251263
modifier = Modifier
252264
.fillMaxWidth()
253-
.clickable {
265+
.noRippleClickable {
254266
viewModel.isStaffCheckedChanged(false)
255267
viewModel.isMemberCheckedChanged(true)
256268
},
@@ -287,7 +299,8 @@ fun MemberScreen(
287299
"STAFF",
288300
state.vertClickedUserId
289301
)
290-
) //TODO
302+
)
303+
291304
viewModel.isStaffCheckedChanged(false)
292305

293306
} else if (!state.isStaffChecked && state.isMemberChecked) {
@@ -297,7 +310,7 @@ fun MemberScreen(
297310
"MEMBER",
298311
state.vertClickedUserId
299312
)
300-
) //TODO
313+
)
301314
viewModel.isMemberCheckedChanged(false)
302315
}
303316
},
@@ -310,6 +323,16 @@ fun MemberScreen(
310323
}
311324
}
312325

326+
if (state.visibleError) {
327+
ErrorScreen(
328+
modifier = Modifier.fillMaxSize(),
329+
message = state.errorMessage,
330+
onRetry = {
331+
viewModel.visibleErrorChanged(false)
332+
viewModel.eventEmit(MemberSideEffect.GetInvitationCode(state.agencyId.toLong()))
333+
viewModel.eventEmit(MemberSideEffect.GetMemberLists(state.agencyId.toLong()))
334+
viewModel.eventEmit(MemberSideEffect.GetMyInfo(Unit))
335+
}
313336
Column(
314337
modifier = Modifier
315338
.fillMaxSize()
@@ -353,18 +376,63 @@ fun MemberScreen(
353376
},
354377
vertClickedUserIdChanged = { userId -> viewModel.vertClickedUserIdChanged(userId) },
355378
)
356-
357-
Box(
379+
} else {
380+
Column(
358381
modifier = Modifier
359-
.fillMaxWidth()
360-
.weight(1f)
382+
.fillMaxSize()
383+
.background(White)
384+
.padding(horizontal = MMHorizontalSpacing)
361385
) {
362-
MDSSnackbarHost(
363-
hostState = snackbarHostState,
364-
modifier = Modifier
365-
.align(BottomCenter)
366-
.padding(bottom = 12.dp)
386+
Text(
387+
modifier = Modifier.padding(top = 24.dp, bottom = 8.dp),
388+
text = "",
389+
style = Body3,
390+
color = Gray07
367391
)
392+
MemberCardView(
393+
modifier = Modifier,
394+
agencyId = state.agencyId,
395+
memberList = state.memberList,
396+
memberMyInfoId = state.memberMyInfoId,
397+
memberMyInfo = state.memberMyInfo,
398+
memberMyInfoChanged = { id, userId, nickname, agencyUserRole ->
399+
viewModel.memberMyInfoChanged(
400+
id,
401+
userId,
402+
nickname,
403+
agencyUserRole
404+
)
405+
},
406+
invitationCode = state.invitationCode,
407+
isReInvitationCode = { viewModel.eventEmit(MemberSideEffect.GetReInvitationCode(it)) },
408+
onCopyChange = { onCopyClick -> viewModel.onCopyClickChanged(onCopyClick) },
409+
)
410+
411+
MemberListView(
412+
modifier = Modifier.padding(top = 24.dp),
413+
memberMyInfo = state.memberMyInfo,
414+
filteredMemberList = state.filteredMemberList,
415+
onIconClick = { vertClick -> viewModel.onVertClickChanged(vertClick) },
416+
updateFilteredMemberList = { memberMyInfoId ->
417+
viewModel.updateFilteredMemberList(
418+
memberMyInfoId
419+
)
420+
},
421+
vertClickedUserIdChanged = { userId -> viewModel.vertClickedUserIdChanged(userId) },
422+
)
423+
424+
Box(
425+
modifier = Modifier
426+
.fillMaxWidth()
427+
.weight(1f)
428+
) {
429+
MDSSnackbarHost(
430+
hostState = snackbarHostState,
431+
modifier = Modifier
432+
.align(BottomCenter)
433+
.padding(bottom = 12.dp)
434+
)
435+
}
368436
}
369437
}
370438
}

feature/member/src/main/java/com/example/member/MemberState.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,11 @@ data class MemberState(
2323
agencyUserRole = ""
2424
),
2525
val filteredMemberList: List<AgencyUserEntity> = emptyList(),
26+
val visibleError : Boolean = false,
27+
val errorMessage : String = "",
28+
val visiblePopUpError : Boolean = false,
29+
val errorPopUpMessage : String = "",
30+
val inviteCodeError : Boolean = false,
2631
val isUserAuthor: String = "",
2732
val agencyId: Int = 0
2833
) : State

0 commit comments

Comments
 (0)