Skip to content

Commit

Permalink
Merge pull request #194 from OMZigak/fix/#191-sprint-4th-qa
Browse files Browse the repository at this point in the history
[FIX/#191] 스프린트 4차 QA 반영
  • Loading branch information
chanubc authored Sep 24, 2024
2 parents 32d76cd + cc0181d commit 331e226
Show file tree
Hide file tree
Showing 15 changed files with 112 additions and 49 deletions.
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
package com.teamkkumul.core.data.mapper

import com.teamkkumul.core.network.dto.response.ResponseAddNewGroupDto
import com.teamkkumul.core.network.dto.response.ResponseMyGroupDto
import com.teamkkumul.core.network.dto.response.ResponseMyGroupInfoDto
import com.teamkkumul.core.network.dto.response.ResponseMyGroupMeetUpDto
import com.teamkkumul.core.network.dto.response.ResponseMyGroupMemberDto
import com.teamkkumul.model.AddNewGroupModel
import com.teamkkumul.model.MyGroupDetailMemeberSealedItem
import com.teamkkumul.model.MyGroupInfoModel
import com.teamkkumul.model.MyGroupMeetUpModel
Expand Down Expand Up @@ -80,3 +82,9 @@ internal fun ResponseMyGroupMemberDto.toMyGroupSealedItem(): List<MyGroupDetailM
}
return items
}

internal fun ResponseAddNewGroupDto.toAddNewGroupModel(): AddNewGroupModel =
AddNewGroupModel(
meetingId = meetingId,
invitationCode = invitationCode
)
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package com.teamkkumul.core.data.repository

import com.teamkkumul.model.AddNewGroupModel

interface MeetingsRepository {
suspend fun addNewGroup(request: String): Result<String>
suspend fun addNewGroup(request: String): Result<AddNewGroupModel>
suspend fun enterInvitationCode(request: String): Result<Int>
}
Original file line number Diff line number Diff line change
@@ -1,17 +1,19 @@
package com.teamkkumul.core.data.repositoryimpl

import com.teamkkumul.core.data.mapper.toAddNewGroupModel
import com.teamkkumul.core.data.repository.MeetingsRepository
import com.teamkkumul.core.data.utils.handleThrowable
import com.teamkkumul.core.network.api.MeetingsService
import com.teamkkumul.core.network.dto.request.RequestAddNewGroupDto
import com.teamkkumul.core.network.dto.request.RequestEnterInvitationCodeDto
import com.teamkkumul.model.AddNewGroupModel
import javax.inject.Inject

internal class MeetingsRepositoryImpl @Inject constructor(
private val meetingsService: MeetingsService,
) : MeetingsRepository {
override suspend fun addNewGroup(request: String): Result<String> = runCatching {
meetingsService.addNewGroup(RequestAddNewGroupDto(request)).data?.invitationCode
override suspend fun addNewGroup(request: String): Result<AddNewGroupModel> = runCatching {
meetingsService.addNewGroup(RequestAddNewGroupDto(request)).data?.toAddNewGroupModel()
}.mapCatching {
requireNotNull(it)
}.recoverCatching {
Expand Down
12 changes: 12 additions & 0 deletions core/model/src/main/java/com/teamkkumul/model/AddNewGroupModel.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.teamkkumul.model

import android.os.Parcelable
import com.teamkkumul.model.type.ScreenType
import kotlinx.parcelize.Parcelize

@Parcelize
data class AddNewGroupModel(
val meetingId: Int,
val invitationCode: String,
val screenType: ScreenType? = null,
) : Parcelable
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.teamkkumul.model.type

enum class ScreenType {
MY_GROUP_DETAIL,
ADD_NEW_GROUP,
}
Original file line number Diff line number Diff line change
Expand Up @@ -58,8 +58,6 @@ class ReadyStatusFragment :
requireArguments().getInt(PROMISE_ID)
}

private var promiseTime = ""

override fun initView() {
initReadyStatusBtnClick()
initObserveBtnState()
Expand Down Expand Up @@ -122,7 +120,6 @@ class ReadyStatusFragment :

private fun updateBasicUI(data: HomeReadyStatusModel?) = with(binding) {
data ?: return
promiseTime = data.promiseTime.toString()
viewModel.updateReadyTime(data.preparationStartAt ?: "")
viewModel.updateMovingTime(data.departureAt ?: "")
viewModel.updateCompletedTime(data.arrivalAt ?: "")
Expand Down Expand Up @@ -231,7 +228,7 @@ class ReadyStatusFragment :
true
}

isPastDefaultTime(promiseTime) -> {
isPastDefaultTime(viewModel.getPromiseTime()) -> {
toast(getString(R.string.ready_status_late_meeting))
true
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,17 +17,17 @@ import com.teamkkumul.feature.R
import com.teamkkumul.feature.databinding.FragmentMyGroupDetailBinding
import com.teamkkumul.feature.mygroup.mygroupdetail.adapter.MyGroupDetailFriendAdapter
import com.teamkkumul.feature.mygroup.mygroupdetail.adapter.MyGroupDetailMeetUpAdapter
import com.teamkkumul.feature.utils.KeyStorage.CODE
import com.teamkkumul.feature.utils.KeyStorage.ADD_NEW_GROUP_MODEL
import com.teamkkumul.feature.utils.KeyStorage.D_DAY
import com.teamkkumul.feature.utils.KeyStorage.GROUP_NAME
import com.teamkkumul.feature.utils.KeyStorage.MEETING_ID
import com.teamkkumul.feature.utils.KeyStorage.MY_GROUP_DETAIL_FRAGMENT
import com.teamkkumul.feature.utils.KeyStorage.PROMISE_ID
import com.teamkkumul.feature.utils.KeyStorage.SOURCE_FRAGMENT
import com.teamkkumul.feature.utils.itemdecorator.MeetUpFriendItemDecoration
import com.teamkkumul.feature.utils.time.TimeUtils.parseDateToYearMonthDay
import com.teamkkumul.model.AddNewGroupModel
import com.teamkkumul.model.MyGroupInfoModel
import com.teamkkumul.model.MyGroupMemberModel
import com.teamkkumul.model.type.ScreenType
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
Expand All @@ -48,7 +48,6 @@ class MyGroupDetailFragment :
private val currentId: Int by lazy { arguments?.getInt(MEETING_ID, -1) ?: -1 }

override fun initView() {

initMemberRecyclerView()
initMeetUpRecyclerView()
viewModel.getMyGroupInfo(currentId)
Expand Down Expand Up @@ -168,9 +167,14 @@ class MyGroupDetailFragment :
private fun initMemberRecyclerView() {
_memberAdapter = MyGroupDetailFriendAdapter(
onPlusBtnClicked = {
val addNewGroupModel = AddNewGroupModel(
meetingId = currentId,
invitationCode = code,
screenType = ScreenType.MY_GROUP_DETAIL,
)
findNavController().navigate(
R.id.fragment_dialog_invitation_code,
bundleOf(CODE to code, SOURCE_FRAGMENT to MY_GROUP_DETAIL_FRAGMENT),
bundleOf(ADD_NEW_GROUP_MODEL to addNewGroupModel),
)
},
)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,25 @@
package com.teamkkumul.feature.newgroup.addmygroup

import androidx.core.os.bundleOf
import androidx.navigation.fragment.findNavController
import com.teamkkumul.core.ui.base.BindingFragment
import com.teamkkumul.feature.R
import com.teamkkumul.feature.databinding.FragmentAddMyGroupCompleteBinding
import com.teamkkumul.feature.utils.KeyStorage.MEETING_ID

class AddMyGroupCompleteFragment :
BindingFragment<FragmentAddMyGroupCompleteBinding>(R.layout.fragment_add_my_group_complete) {

private val meetingId: Int by lazy {
requireArguments().getInt(MEETING_ID)
}

override fun initView() {
binding.btnOkay.setOnClickListener {
findNavController().navigate(R.id.action_fragment_add_my_group_complete_to_fragment_my_group)
findNavController().navigate(
R.id.action_fragment_add_my_group_complete_to_fragment_my_group_detail,
bundleOf(MEETING_ID to meetingId)
)
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,9 @@ import com.teamkkumul.core.ui.view.UiState
import com.teamkkumul.feature.R
import com.teamkkumul.feature.databinding.FragmentAddNewGroupBinding
import com.teamkkumul.feature.utils.Debouncer
import com.teamkkumul.feature.utils.KeyStorage.ADD_NEW_GROUP_FRAGMENT
import com.teamkkumul.feature.utils.KeyStorage.CODE
import com.teamkkumul.feature.utils.KeyStorage.SOURCE_FRAGMENT
import com.teamkkumul.feature.utils.KeyStorage.ADD_NEW_GROUP_MODEL
import com.teamkkumul.model.AddNewGroupModel
import com.teamkkumul.model.type.ScreenType
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
Expand Down Expand Up @@ -97,10 +97,10 @@ class AddNewGroupFragment :
binding.btnMakeNewGroup.isEnabled = isValid
}

private fun showInvitationDialog(invitationCode: String) {
private fun showInvitationDialog(addNewGroupModel: AddNewGroupModel) {
findNavController().navigate(
R.id.fragment_dialog_invitation_code,
bundleOf(CODE to invitationCode, SOURCE_FRAGMENT to ADD_NEW_GROUP_FRAGMENT),
bundleOf(ADD_NEW_GROUP_MODEL to addNewGroupModel.copy(screenType = ScreenType.ADD_NEW_GROUP)),
)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.teamkkumul.core.data.repository.MeetingsRepository
import com.teamkkumul.core.ui.view.UiState
import com.teamkkumul.model.AddNewGroupModel
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.asStateFlow
Expand All @@ -14,16 +15,15 @@ import javax.inject.Inject
class AddNewGroupViewModel @Inject constructor(
private val meetingsRepository: MeetingsRepository,
) : ViewModel() {
private val _meetingsState = MutableStateFlow<UiState<String>>(UiState.Loading)
private val _meetingsState = MutableStateFlow<UiState<AddNewGroupModel>>(UiState.Loading)
val meetingsState get() = _meetingsState.asStateFlow()

fun addNewGroup(request: String) {
viewModelScope.launch {
meetingsRepository.addNewGroup(request)
.onSuccess { invitationCode ->
if (invitationCode.isNotEmpty()) {
_meetingsState.emit(UiState.Success(invitationCode))
}
.onSuccess { response ->
_meetingsState.emit(UiState.Success(response))

}.onFailure {
_meetingsState.emit(UiState.Failure(it.message.toString()))
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,28 +3,39 @@ package com.teamkkumul.feature.newgroup.addnewgroup
import android.content.ClipData
import android.content.ClipboardManager
import android.content.Context
import android.os.Build
import android.os.Bundle
import androidx.core.os.bundleOf
import androidx.navigation.fragment.findNavController
import com.teamkkumul.core.ui.base.BindingDialogFragment
import com.teamkkumul.core.ui.util.bundle.getSafeParcelable
import com.teamkkumul.core.ui.util.context.dialogFragmentResize
import com.teamkkumul.core.ui.util.fragment.toast
import com.teamkkumul.feature.R
import com.teamkkumul.feature.databinding.FragmentDialogInvitationCodeBinding
import com.teamkkumul.feature.utils.KeyStorage.ADD_NEW_GROUP_FRAGMENT
import com.teamkkumul.feature.utils.KeyStorage.CODE
import com.teamkkumul.feature.utils.KeyStorage.MY_GROUP_DETAIL_FRAGMENT
import com.teamkkumul.feature.utils.KeyStorage.SOURCE_FRAGMENT
import com.teamkkumul.feature.utils.KeyStorage.ADD_NEW_GROUP_MODEL
import com.teamkkumul.feature.utils.KeyStorage.MEETING_ID
import com.teamkkumul.model.AddNewGroupModel
import com.teamkkumul.model.type.ScreenType
import dagger.hilt.android.AndroidEntryPoint

@AndroidEntryPoint
class DialogInvitationCodeFragment :
BindingDialogFragment<FragmentDialogInvitationCodeBinding>(R.layout.fragment_dialog_invitation_code) {
private val addNewGroupModel: AddNewGroupModel? by lazy {
arguments?.getSafeParcelable(ADD_NEW_GROUP_MODEL)
}

private val invitationCode: String by lazy {
arguments?.getString(CODE) ?: ""
addNewGroupModel?.invitationCode.orEmpty()
}

private val meetingId: Int by lazy {
addNewGroupModel?.meetingId ?: -1
}

private val sourceFragment: String by lazy {
arguments?.getString(SOURCE_FRAGMENT) ?: ""
private val sourceFragment: ScreenType by lazy {
addNewGroupModel?.screenType ?: ScreenType.MY_GROUP_DETAIL
}

override fun onCreate(savedInstanceState: Bundle?) {
Expand All @@ -43,41 +54,41 @@ class DialogInvitationCodeFragment :
}

private fun getInvitationCode() {
if (invitationCode.isNotEmpty()) {
binding.tvInvitationCode.text = invitationCode
}
binding.tvInvitationCode.text = invitationCode
}

private fun setupDialogBtn() {
binding.tvBtnCopy.setOnClickListener {
copyToClipboard(invitationCode)
when (sourceFragment) {
ADD_NEW_GROUP_FRAGMENT -> {
ScreenType.ADD_NEW_GROUP -> {
if (invitationCode.isNotEmpty()) {
findNavController().navigate(R.id.action_dialog_to_completed)
copyToClipboard(invitationCode)
navigateToAddMyGroupComplete()
} else {
findNavController().navigate(R.id.action_dialog_to_my_group_detail)
}
dismiss()
}
MY_GROUP_DETAIL_FRAGMENT -> {

ScreenType.MY_GROUP_DETAIL -> {
copyToClipboard(invitationCode)
dismiss()
}
}
}

binding.tvBtnInviteLater.setOnClickListener {
when (sourceFragment) {
ADD_NEW_GROUP_FRAGMENT -> {
ScreenType.ADD_NEW_GROUP -> {
if (invitationCode.isNotEmpty()) {
findNavController().navigate(R.id.action_dialog_to_completed)
navigateToAddMyGroupComplete()
} else {
findNavController().navigate(R.id.action_dialog_to_my_group_detail)
}
dismiss()
}
MY_GROUP_DETAIL_FRAGMENT -> {
dismiss()
}

ScreenType.MY_GROUP_DETAIL -> dismiss()
}
}
}
Expand All @@ -87,5 +98,16 @@ class DialogInvitationCodeFragment :
requireContext().getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
val clip = ClipData.newPlainText("invitation_code", text)
clipboard.setPrimaryClip(clip)

if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.S) {
toast(getString(R.string.toast_clipboard))
}
}

private fun navigateToAddMyGroupComplete() {
findNavController().navigate(
R.id.action_dialog_to_completed,
bundleOf(MEETING_ID to meetingId),
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,13 @@ object KeyStorage {
const val PROMISE_ID = "promiseId"
const val MEETING_ID = "meetingId"
const val MEET_UP_NAME = "meetUpName"
const val CODE = "code"
const val SOURCE_FRAGMENT = "sourceFragment"
const val ADD_NEW_GROUP_FRAGMENT = "addNewGroup"
const val MY_GROUP_DETAIL_FRAGMENT = "myGroupDetail"
const val GROUP_NAME = "groupName"
const val SET_NAME_ACTIVITY = "setNameActivity"
const val MY_PAGE_FRAGMENT = "myPageFragment"
const val D_DAY = "dDay"
const val READY_STATUS_INFO = "readyStatusInfo"
const val ADD_NEW_GROUP_MODEL = "addNewGroupModel"
}

object PROGRESS {
Expand Down
8 changes: 4 additions & 4 deletions feature/src/main/res/navigation/nav_graph.xml
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,7 @@
<action
android:id="@+id/action_fragment_enter_invitation_code_to_fragment_my_group_detail"
app:destination="@id/fragment_my_group_detail"
app:popUpTo="@id/fragment_enter_invitation_code"
app:popUpTo="@id/fragment_add_my_group"
app:popUpToInclusive="true" />
</fragment>

Expand All @@ -144,7 +144,7 @@
<action
android:id="@+id/action_fragment_add_new_group_to_fragment_add_my_group_complete"
app:destination="@id/fragment_add_my_group_complete"
app:popUpTo="@id/fragment_add_new_group"
app:popUpTo="@id/fragment_my_group"
app:popUpToInclusive="true" />
</fragment>

Expand Down Expand Up @@ -216,7 +216,7 @@
<action
android:id="@+id/action_fragment_add_my_group_complete_to_fragment_my_group_detail"
app:destination="@id/fragment_my_group_detail"
app:popUpTo="@id/fragment_add_my_group_complete"
app:popUpTo="@id/fragment_add_my_group"
app:popUpToInclusive="true" />
<action
android:id="@+id/action_fragment_add_my_group_complete_to_fragment_my_group"
Expand Down Expand Up @@ -248,7 +248,7 @@
<action
android:id="@+id/action_fragment_meet_up_create_complete_to_fragment_meet_up_container"
app:destination="@id/fragment_meet_up_container"
app:popUpTo="@id/fragment_home"
app:popUpTo="@id/fragment_my_group_detail"
app:popUpToInclusive="false" />
</fragment>

Expand Down
Loading

0 comments on commit 331e226

Please sign in to comment.