Skip to content

Commit

Permalink
[feat] #67 공부조각 api 연동
Browse files Browse the repository at this point in the history
  • Loading branch information
kamja0510 committed Jan 24, 2025
1 parent 681ac9a commit 0f6d825
Show file tree
Hide file tree
Showing 14 changed files with 57 additions and 62 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import kotlinx.serialization.Serializable
@Serializable
@Parcelize
data class AddStudyData(
val subjectId: Int,
val subjectName: String,
val pieceNumber: Int,
val examDate: String,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import org.android.bbangzip.presentation.type.AddStudyViewType
@Serializable
@Parcelize
data class SplitStudyData(
val subjectId: Int,
val subjectName: String,
val pieceNumber: Int,
val examDate: String,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,7 @@ fun MainNavHost(
padding = padding,
popBackStack = { navigator.popBackStackIfNotSubject() },
navigateSplitStudy = { navigator.navigateToSplitStudy(it) },
navigateSubjectDetail = { id, name -> navigator.navigateToSubjectDetail(subjectId = id, subjectName = name)}
)

modifySubjectNameNavGraph(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import org.android.bbangzip.presentation.util.base.BaseContract
class AddStudyContract {
@Parcelize
data class AddStudyState(
val subjectId: Int = 0,
val subjectName: String = "",
val examDate: String = "시험 일자 입력",
val examName: String = "",
Expand Down Expand Up @@ -133,6 +134,8 @@ class AddStudyContract {
sealed interface AddStudySideEffect : BaseContract.SideEffect {
data class NavigateSplitStudy(val addStudyData: AddStudyData) : AddStudySideEffect

data class NavigateSubjectDetail(val subjectId: Int, val subjectName: String) : AddStudySideEffect

data object PopBackStack : AddStudySideEffect
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ fun NavGraphBuilder.addStudyNavGraph(
padding: PaddingValues,
popBackStack: () -> Unit,
navigateSplitStudy: (AddStudyData) -> Unit,
navigateSubjectDetail: (Int, String) ->Unit
) {
composable<AddStudyRoute>(
typeMap = mapOf(typeOf<SplitStudyData>() to SplitStudyDataType),
Expand All @@ -34,6 +35,7 @@ fun NavGraphBuilder.addStudyNavGraph(
padding = padding,
popBackStack = popBackStack,
navigateSplitStudy = navigateSplitStudy,
navigateSubjectDetail = navigateSubjectDetail,
splitStudyData = it.toRoute<AddStudyRoute>().splitStudyData,
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ fun AddStudyRoute(
viewModel: AddStudyViewModel = hiltViewModel(),
popBackStack: () -> Unit = {},
navigateSplitStudy: (AddStudyData) -> Unit = {},
navigateSubjectDetail: (Int, String) -> Unit = {_, _ -> }
) {
LaunchedEffect(Unit) {
viewModel.setEvent(AddStudyContract.AddStudyEvent.Initialize(splitStudyData = splitStudyData))
Expand All @@ -29,6 +30,7 @@ fun AddStudyRoute(
navigateSplitStudy(it.addStudyData)
}
is AddStudyContract.AddStudySideEffect.PopBackStack -> popBackStack()
is AddStudyContract.AddStudySideEffect.NavigateSubjectDetail -> navigateSubjectDetail(it.subjectId, it.subjectName)
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ import org.android.bbangzip.presentation.type.AddStudyViewType
import org.android.bbangzip.presentation.ui.subject.addstudy.AddStudyContract.AddStudyReduce
import org.android.bbangzip.presentation.util.base.BaseViewModel
import org.android.bbangzip.presentation.util.casting.pageToInt
import org.android.bbangzip.presentation.util.date.addLeadingZero
import org.android.bbangzip.presentation.util.date.formatDate
import timber.log.Timber
import javax.inject.Inject

Expand Down Expand Up @@ -111,6 +113,7 @@ constructor(
AddStudyContract.AddStudySideEffect.NavigateSplitStudy(
addStudyData =
AddStudyData(
subjectId = currentUiState.subjectId,
subjectName = currentUiState.subjectName,
pieceNumber = event.pieceNumber,
examDate = currentUiState.examDate,
Expand All @@ -136,29 +139,6 @@ constructor(
AddStudyContract.AddStudyEvent.OnClickCancleIcon -> {
updateState(AddStudyReduce.ResetStudyContent)
}
is AddStudyContract.AddStudyEvent.OnClickPieceNumber -> {
updateState(AddStudyReduce.UpdateAddStudyViewType)
updateState(AddStudyReduce.UpdatePieceNumber(pieceNumber = event.pieceNumber))
updateState(AddStudyReduce.UpdatePiecePickerBottomSheetState)
Timber.tag("김재민").d("addstudy에서 보내는 값$currentUiState")
setSideEffect(
AddStudyContract.AddStudySideEffect.NavigateSplitStudy(
addStudyData =
AddStudyData(
subjectName = currentUiState.subjectName,
pieceNumber = event.pieceNumber,
examDate = currentUiState.examDate,
studyContent = currentUiState.studyContent ?: "",
startPage = currentUiState.startPage ?: "",
endPage = currentUiState.endPage ?: "",
startPageList = if (currentUiState.addStudyViewType == AddStudyViewType.AGAIN) currentUiState.startPageList else divideRangeIntoInts(currentUiState.startPage!!.filter { it.isDigit() }.toInt(), currentUiState.endPage!!.filter { it.isDigit() }.toInt(), event.pieceNumber).map { it.toString() }.subList(0, event.pieceNumber),
endPageList = if (currentUiState.addStudyViewType == AddStudyViewType.AGAIN) currentUiState.endPageList else divideRangeIntoInts(currentUiState.startPage!!.filter { it.isDigit() }.toInt(), currentUiState.endPage!!.filter { it.isDigit() }.toInt(), event.pieceNumber).map { it.toString() }.subList(1, event.pieceNumber + 1),
examName = currentUiState.examName,
),
),
)
updateState(AddStudyReduce.UpdateIsSuccess)
}

AddStudyContract.AddStudyEvent.OnClickSplitBtn -> {
updateState(AddStudyReduce.UpdatePiecePickerBottomSheetState)
Expand All @@ -171,6 +151,7 @@ constructor(
AddStudyContract.AddStudySideEffect.NavigateSplitStudy(
addStudyData =
AddStudyData(
subjectId = currentUiState.subjectId,
subjectName = currentUiState.subjectName,
pieceNumber = event.pieceNumber,
examDate = currentUiState.examDate,
Expand Down Expand Up @@ -198,6 +179,7 @@ constructor(
return when (reduce) {
is AddStudyReduce.Initialize -> {
state.copy(
subjectId = reduce.splitStudyData.subjectId,
subjectName = reduce.splitStudyData.subjectName,
pieceNumber = reduce.splitStudyData.pieceNumber,
examDate = reduce.splitStudyData.examDate,
Expand All @@ -212,21 +194,6 @@ constructor(
isSuccess = true,
)
}
is AddStudyReduce.Initialize -> {
state.copy(
subjectName = reduce.splitStudyData.subjectName,
pieceNumber = reduce.splitStudyData.pieceNumber,
examDate = reduce.splitStudyData.examDate,
studyContent = reduce.splitStudyData.studyContent,
startPage = reduce.splitStudyData.startPage,
endPage = reduce.splitStudyData.endPage,
startPageList = reduce.splitStudyData.startPageList,
endPageList = reduce.splitStudyData.endPageList,
deadLineList = reduce.splitStudyData.deadLineList,
addStudyViewType = reduce.splitStudyData.addStudyViewType,
isSuccess = true,
)
}

AddStudyReduce.UpdateDatePickerBottomSheetState -> {
state.copy(datePickerBottomSheetState = !state.datePickerBottomSheetState)
Expand Down Expand Up @@ -405,23 +372,23 @@ constructor(
viewModelScope.launch {
postAddStudyUseCase.invoke(
AddStudyEntity(
subjectId = 1,
examName = "중간고사",
examDate = currentUiState.examDate,
subjectId = currentUiState.subjectId.toLong(),
examName = currentUiState.examName,
examDate = formatDate(currentUiState.examDate),
studyContents = currentUiState.studyContent ?: "",
pieceList = currentUiState.startPageList.mapIndexed { index, startPage ->
AddStudyEntity.Piece(
startPage = startPage.toIntOrNull() ?: 0,
finishPage = currentUiState.endPageList.getOrNull(index)?.toIntOrNull() ?: 0,
deadline = currentUiState.deadLineList.getOrNull(index) ?: ""
startPage = startPage.filter { it.isDigit() }.toIntOrNull() ?: 0,
finishPage = currentUiState.endPageList[index].filter{it.isDigit()}.toIntOrNull() ?: 0,
deadline = addLeadingZero( currentUiState.deadLineList.getOrNull(index) ?: "")
)
}
)
).onSuccess { data ->
if (data.badgesList.isNotEmpty()) {

}
setSideEffect(AddStudyContract.AddStudySideEffect.PopBackStack)
setSideEffect(AddStudyContract.AddStudySideEffect.NavigateSubjectDetail(currentUiState.subjectId, currentUiState.subjectName))
}.onFailure {
Timber.tag("[공부 추가하기]").d(error.toString())
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ class SplitStudyContract {
@Parcelize
data class SplitStudyState(
val isSuccess: Boolean = false,
val subjectId: Int = 0,
val subjectName: String = "경제통계학",
val startPage: String = "",
val endPage: String = "",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ fun SplitStudyRoute(

if (splitStudyState.isSuccess) {
SplitStudyScreen(
subjectId = splitStudyState.subjectId,
pieceNumber = splitStudyState.pieceNumber,
subjectName = splitStudyState.subjectName,
examDate = splitStudyState.examDate,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ import timber.log.Timber
@OptIn(ExperimentalFoundationApi::class)
@Composable
fun SplitStudyScreen(
subjectId: Int = 0,
pieceNumber: Int = 0,
subjectName: String,
startPage: String = "",
Expand Down Expand Up @@ -289,6 +290,7 @@ fun SplitStudyScreen(
endPageList = endPageList,
deadLineList = seletedDateList.map { dateToString(it) },
addStudyViewType = AddStudyViewType.AGAIN,
subjectId = subjectId
),
)
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,7 @@ class SplitStudyViewModel

is SplitStudyContract.SplitStudyReduce.InitializeState -> {
state.copy(
subjectId = reduce.addStudyData.subjectId,
subjectName = reduce.addStudyData.subjectName,
startPage = reduce.addStudyData.startPage,
examDate = reduce.addStudyData.examDate,
Expand Down Expand Up @@ -295,6 +296,7 @@ class SplitStudyViewModel
SplitStudyContract.SplitStudySideEffect.NavigateAddStudy(
splitStudyData =
SplitStudyData(
subjectId = event.splitStudyData.subjectId,
subjectName = event.splitStudyData.subjectName,
pieceNumber = event.splitStudyData.pieceNumber,
examDate = event.splitStudyData.examDate,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -99,22 +99,17 @@ constructor(
Timber.tag("김재민").d("되나?")
setSideEffect(SubjectDetailContract.SubjectDetailSideEffect.NavigateToAddStudy(splitStudyData = event.splitStudyData))
}
is SubjectDetailContract.SubjectDetailEvent.OnClickModifySubjectName -> {
setSideEffect(SubjectDetailContract.SubjectDetailSideEffect.NavigateToModifySubjectName(subjectId = event.subjectId, subjectName = event.subjectName))
}
SubjectDetailContract.SubjectDetailEvent.OnDeleteButtonClicked -> {}
is SubjectDetailContract.SubjectDetailEvent.OnPlusIconClicked -> {
Timber.tag("김재민").d("되나?")
setSideEffect(SubjectDetailContract.SubjectDetailSideEffect.NavigateToAddStudy(splitStudyData = event.splitStudyData))
}

SubjectDetailContract.SubjectDetailEvent.OnClickKebabMenu -> {
updateState(SubjectDetailContract.SubjectDetailReduce.UpdateIsMenuOpen)
}
SubjectDetailContract.SubjectDetailEvent.OnDeleteButtonClicked -> {}

SubjectDetailContract.SubjectDetailEvent.OnClickKebabMenu -> {
updateState(SubjectDetailContract.SubjectDetailReduce.UpdateIsMenuOpen)
}

is SubjectDetailContract.SubjectDetailEvent.OnClickTab -> {
updateState(SubjectDetailContract.SubjectDetailReduce.UpdateExamName(event.index))
}

is SubjectDetailContract.SubjectDetailEvent.OnClickTab -> {
updateState(SubjectDetailContract.SubjectDetailReduce.UpdateExamName(event.index))
}
SubjectDetailContract.SubjectDetailEvent.OnClickKebabMenu -> {
updateState(SubjectDetailContract.SubjectDetailReduce.UpdateIsMenuOpen)
}
Expand All @@ -123,8 +118,6 @@ constructor(
Timber.tag("[과목 관리]").d("버튼 클릭")
viewModelScope.launch { deleteStudyPiece() }
}

is SubjectDetailContract.SubjectDetailEvent.OnPlusIconClicked -> TODO()
}
}

Expand Down Expand Up @@ -269,7 +262,7 @@ constructor(
private suspend fun initData(subjectId: Int) {
getSubjectDetail(
subjectId = subjectId,
examName = "fin",
examName = "mid",
)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,7 @@ fun SubjectDetailScreen(
var selectedIndex by remember { mutableIntStateOf(0) }
val splitStudyData =
SplitStudyData(
subjectId = subjectId,
subjectName = subjectName,
pieceNumber = 0,
examDate = "시험 일자 입력",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,24 @@ fun hyponStringDateToDate(dateString: String): Date {
return Date(year.toString(), month.toString(), day.toString())
}

fun formatDate(input: String): String {
val parts = input.split("", "", "").map { it.trim() }
return "${parts[0]}-${parts[1].padStart(2, '0')}-${parts[2].padStart(2, '0')}"

}

fun addLeadingZero(date: String): String {
val parts = date.split("-")
if (parts.size == 3) {
val year = parts[0]
val month = parts[1].padStart(2, '0')
val day = parts[2].padStart(2, '0')
return "$year-$month-$day"
} else {
throw IllegalArgumentException("잘못된 날짜 형식입니다: $date")
}
}

fun dateToString(date: Date): String {
return "${date.year}-${date.month}-${date.day}"
}
Expand Down

0 comments on commit 0f6d825

Please sign in to comment.