Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package com.moneymong.moneymong.model.agency

data class CategoryDeleteRequest(
val categoryId: Long,
)
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,6 @@ data class CategoryReadResponse(
)

data class CategoryResponse(
val id: Long,
val name: String,
)
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,15 @@ import com.moneymong.moneymong.model.agency.AgencyJoinResponse
import com.moneymong.moneymong.model.agency.AgencyRegisterRequest
import com.moneymong.moneymong.model.agency.CategoryCreateRequest
import com.moneymong.moneymong.model.agency.CategoryCreateResponse
import com.moneymong.moneymong.model.agency.CategoryDeleteRequest
import com.moneymong.moneymong.model.agency.CategoryReadResponse
import com.moneymong.moneymong.model.agency.MyAgencyResponse
import com.moneymong.moneymong.model.agency.RegisterAgencyResponse
import com.moneymong.moneymong.model.member.InvitationCodeResponse
import retrofit2.http.Body
import retrofit2.http.DELETE
import retrofit2.http.GET
import retrofit2.http.HTTP
import retrofit2.http.PATCH
import retrofit2.http.POST
import retrofit2.http.Path
Expand Down Expand Up @@ -73,4 +75,9 @@ interface AgencyApi {
suspend fun deleteAgency(
@Path("agencyId") agencyId: Int
): Result<Unit>

@HTTP(method = "DELETE", path = "api/v1/agencies/categories", hasBody = true)
suspend fun deleteCategory(
@Body request: CategoryDeleteRequest
): Result<Unit>
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import com.moneymong.moneymong.model.agency.AgencyJoinResponse
import com.moneymong.moneymong.model.agency.AgencyRegisterRequest
import com.moneymong.moneymong.model.agency.CategoryCreateRequest
import com.moneymong.moneymong.model.agency.CategoryCreateResponse
import com.moneymong.moneymong.model.agency.CategoryDeleteRequest
import com.moneymong.moneymong.model.agency.CategoryReadResponse
import com.moneymong.moneymong.model.agency.MyAgencyResponse
import com.moneymong.moneymong.model.agency.RegisterAgencyResponse
Expand All @@ -19,4 +20,5 @@ interface AgencyRemoteDataSource {
suspend fun agencyCodeNumbers(data: AgencyJoinRequest): Result<AgencyJoinResponse>
suspend fun createCategory(request: CategoryCreateRequest): Result<CategoryCreateResponse>
suspend fun fetchCategories(agencyId: Long): Result<CategoryReadResponse>
suspend fun deleteCategory(request: CategoryDeleteRequest): Result<Unit>
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import com.moneymong.moneymong.model.agency.AgencyJoinResponse
import com.moneymong.moneymong.model.agency.AgencyRegisterRequest
import com.moneymong.moneymong.model.agency.CategoryCreateRequest
import com.moneymong.moneymong.model.agency.CategoryCreateResponse
import com.moneymong.moneymong.model.agency.CategoryDeleteRequest
import com.moneymong.moneymong.model.agency.CategoryReadResponse
import com.moneymong.moneymong.model.agency.MyAgencyResponse
import com.moneymong.moneymong.model.agency.RegisterAgencyResponse
Expand Down Expand Up @@ -46,4 +47,8 @@ class AgencyRemoteDataSourceImpl @Inject constructor(
override suspend fun fetchCategories(agencyId: Long): Result<CategoryReadResponse> {
return agencyApi.fetchCategories(agencyId = agencyId)
}

override suspend fun deleteCategory(request: CategoryDeleteRequest): Result<Unit> {
return agencyApi.deleteCategory(request = request)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import com.moneymong.moneymong.model.agency.AgencyJoinResponse
import com.moneymong.moneymong.model.agency.AgencyRegisterRequest
import com.moneymong.moneymong.model.agency.CategoryCreateRequest
import com.moneymong.moneymong.model.agency.CategoryCreateResponse
import com.moneymong.moneymong.model.agency.CategoryDeleteRequest
import com.moneymong.moneymong.model.agency.CategoryReadResponse
import com.moneymong.moneymong.model.agency.MyAgencyResponse
import com.moneymong.moneymong.model.agency.RegisterAgencyResponse
Expand Down Expand Up @@ -47,6 +48,10 @@ class AgencyRemoteDataSourceMock : AgencyRemoteDataSource {
return Result.success(CategoryReadResponse(agencyId = agencyId, categories = emptyList()))
}

override suspend fun deleteCategory(request: CategoryDeleteRequest): Result<Unit> {
return Result.success(Unit)
}

private companion object {
val agenciesMockOfSuccess = listOf(
Result.success(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import com.moneymong.moneymong.model.agency.AgencyJoinResponse
import com.moneymong.moneymong.model.agency.AgencyRegisterRequest
import com.moneymong.moneymong.model.agency.CategoryCreateRequest
import com.moneymong.moneymong.model.agency.CategoryCreateResponse
import com.moneymong.moneymong.model.agency.CategoryDeleteRequest
import com.moneymong.moneymong.model.agency.CategoryReadResponse
import com.moneymong.moneymong.model.agency.MyAgencyResponse
import com.moneymong.moneymong.model.agency.RegisterAgencyResponse
Expand Down Expand Up @@ -58,4 +59,7 @@ class AgencyRepositoryImpl @Inject constructor(

override suspend fun fetchCategories(agencyId: Long): Result<CategoryReadResponse> =
agencyRemoteDataSource.fetchCategories(agencyId = agencyId)

override suspend fun deleteCategory(request: CategoryDeleteRequest): Result<Unit> =
agencyRemoteDataSource.deleteCategory(request = request)
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import com.moneymong.moneymong.model.agency.AgencyJoinResponse
import com.moneymong.moneymong.model.agency.AgencyRegisterRequest
import com.moneymong.moneymong.model.agency.CategoryCreateRequest
import com.moneymong.moneymong.model.agency.CategoryCreateResponse
import com.moneymong.moneymong.model.agency.CategoryDeleteRequest
import com.moneymong.moneymong.model.agency.CategoryReadResponse
import com.moneymong.moneymong.model.agency.MyAgencyResponse
import com.moneymong.moneymong.model.agency.RegisterAgencyResponse
Expand All @@ -18,9 +19,9 @@ interface AgencyRepository {
suspend fun fetchMyAgencyList(): Result<List<MyAgencyResponse>>
suspend fun fetchAgencyByName(agencyName: String): Result<List<AgencyGetResponse>>
suspend fun agencyCodeNumbers(data: AgencyJoinRequest): Result<AgencyJoinResponse>

suspend fun saveAgencyId(agencyId: Int)
suspend fun fetchAgencyId(): Int
suspend fun createCategory(request: CategoryCreateRequest): Result<CategoryCreateResponse>
suspend fun fetchCategories(agencyId: Long): Result<CategoryReadResponse>
suspend fun deleteCategory(request: CategoryDeleteRequest): Result<Unit>
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.moneymong.moneymong.domain.usecase.agency

import com.moneymong.moneymong.domain.repository.agency.AgencyRepository
import com.moneymong.moneymong.model.agency.CategoryDeleteRequest
import javax.inject.Inject

class DeleteCategoryUseCase @Inject constructor(
private val agencyRepository: AgencyRepository,
){
suspend operator fun invoke(request: CategoryDeleteRequest): Result<Unit> =
agencyRepository.deleteCategory(request = request)
}
Original file line number Diff line number Diff line change
Expand Up @@ -198,6 +198,7 @@ fun LedgerManualScreen(
},
onChangeCategoryValue = viewModel::onChangeCategoryValue,
onCategoryCreate = viewModel::createCategory,
onCategoryDelete = viewModel::deleteCategory,
)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import com.moneymong.moneymong.android.BaseViewModel
import com.moneymong.moneymong.android.util.toMultipart
import com.moneymong.moneymong.common.error.MoneyMongError
import com.moneymong.moneymong.domain.usecase.agency.CreateCategoryUseCase
import com.moneymong.moneymong.domain.usecase.agency.DeleteCategoryUseCase
import com.moneymong.moneymong.ui.isValidPaymentDate
import com.moneymong.moneymong.ui.isValidPaymentTime
import com.moneymong.moneymong.ui.validateValue
Expand All @@ -14,6 +15,7 @@ import com.moneymong.moneymong.domain.usecase.ledger.PostLedgerTransactionUseCas
import com.moneymong.moneymong.domain.usecase.ocr.PostFileUploadUseCase
import com.moneymong.moneymong.domain.usecase.user.FetchUserNicknameUseCase
import com.moneymong.moneymong.model.agency.CategoryCreateRequest
import com.moneymong.moneymong.model.agency.CategoryDeleteRequest
import com.moneymong.moneymong.model.agency.CategoryResponse
import com.moneymong.moneymong.model.ledger.FundType
import com.moneymong.moneymong.model.ledger.LedgerTransactionRequest
Expand All @@ -35,6 +37,7 @@ class LedgerManualViewModel @Inject constructor(
private val fetchUserNicknameUseCase: FetchUserNicknameUseCase,
private val createCategoryUseCase: CreateCategoryUseCase,
private val fetchCategoriesUseCase: FetchCategoriesUseCase,
private val deleteCategoryUseCase: DeleteCategoryUseCase,
) : BaseViewModel<LedgerManualState, LedgerManualSideEffect>(LedgerManualState()) {

init {
Expand Down Expand Up @@ -131,6 +134,21 @@ class LedgerManualViewModel @Inject constructor(
}
}

fun deleteCategory(category: CategoryResponse) = intent {
val request = CategoryDeleteRequest(categoryId = category.id)

deleteCategoryUseCase(request = request)
.onSuccess { fetchCategories() }
.onFailure {
reduce {
state.copy(
showBottomSheet = true,
errorMessage = it.message ?: MoneyMongError.UnExpectedError.message
)
}
}
}

fun onChangeStoreNameValue(value: TextFieldValue) = blockingIntent {
val validate = value.text.validateValue(length = 20)
if (!validate) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@ fun LedgerManualCategoryBottomSheet(
onDismissRequest: () -> Unit,
onChangeCategoryValue: (TextFieldValue) -> Unit,
onCategoryCreate: () -> Unit,
onCategoryDelete: (CategoryResponse) -> Unit,
) {
var sheetType by remember { mutableStateOf(LedgerManualBottomSheetType.LIST) }

Expand Down Expand Up @@ -100,7 +101,8 @@ fun LedgerManualCategoryBottomSheet(
LedgerManualCategoryBottomSheetContent(
categories = categories,
onDismissRequest = onDismissRequest,
onClickCreate = { sheetType = LedgerManualBottomSheetType.CREATE }
onClickCreate = { sheetType = LedgerManualBottomSheetType.CREATE },
onClickDelete = onCategoryDelete,
)
}

Expand Down Expand Up @@ -129,6 +131,7 @@ fun LedgerManualCategoryBottomSheetContent(
categories: List<CategoryResponse>?,
onDismissRequest: () -> Unit,
onClickCreate: () -> Unit,
onClickDelete: (CategoryResponse) -> Unit,
) {
val scrollState = rememberScrollState()
Column(
Expand Down Expand Up @@ -179,6 +182,7 @@ fun LedgerManualCategoryBottomSheetContent(
MDSOutlineTag(
text = it.name,
iconResource = R.drawable.ic_close_default,
onClick = { onClickDelete(it) }
)
}
}
Expand Down Expand Up @@ -286,11 +290,13 @@ fun LedgerManualCategoryCreateBottomSheetContent(
@Preview(showBackground = true)
@Composable
fun LedgerManualCategoryBottomSheetContentPreview() {
val categories = listOf(CategoryResponse("testTooLongTextOverFlow"), CategoryResponse("test"))
val categories =
listOf(CategoryResponse(1L, "testTooLongTextOverFlow"), CategoryResponse(1L, "test"))

LedgerManualCategoryBottomSheetContent(
categories = categories,
onDismissRequest = {},
onClickCreate = {},
) {}
}

Expand Down
Loading