Skip to content
Merged
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
8 changes: 8 additions & 0 deletions app/src/main/java/com/paw/key/data/di/RepositoryModule.kt
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import com.paw.key.data.repositoryimpl.onboarding.OnboardingRepositoryImpl
import com.paw.key.data.repositoryimpl.RegionRepositoryImpl
import com.paw.key.data.repositoryimpl.WalkCourseRepositoryImpl
import com.paw.key.data.repositoryimpl.WalkSharedResultRepositoryImpl
import com.paw.key.data.repositoryimpl.filter.FilterOptionRepositoryImpl
import com.paw.key.data.repositoryimpl.sharedwalk.SharedWalkRepositoryImpl
import com.paw.key.data.repositoryimpl.home.HomeRegionRepositoryImpl
import com.paw.key.domain.repository.DummyRepository
Expand All @@ -15,6 +16,7 @@ import com.paw.key.domain.repository.onboarding.OnboardingRegionRepository
import com.paw.key.domain.repository.onboarding.OnboardingRepository
import com.paw.key.domain.repository.RegionRepository
import com.paw.key.domain.repository.WalkSharedResultRepository
import com.paw.key.domain.repository.filter.FilterOptionRepository
import com.paw.key.domain.repository.sharedwalk.SharedWalkRepository
import com.paw.key.domain.repository.home.HomeRegionRepository
import com.paw.key.domain.repository.walkcourse.WalkCourseRepository
Expand Down Expand Up @@ -82,4 +84,10 @@ interface RepositoryModule {
fun bindHomeRegionRepository(
impl: HomeRegionRepositoryImpl
): HomeRegionRepository

@Binds
@Singleton
fun bindFilterOptionRepository(
impl: FilterOptionRepositoryImpl
): FilterOptionRepository
}
6 changes: 6 additions & 0 deletions app/src/main/java/com/paw/key/data/di/ServiceModule.kt
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import com.paw.key.data.service.onboarding.OnboardingInfoService
import com.paw.key.data.service.onboarding.OnboardingPetsService
import com.paw.key.data.service.onboarding.OnboardingRegionService
import com.paw.key.data.service.RegionService
import com.paw.key.data.service.filter.FilterOptionService
import com.paw.key.data.service.sharedwalk.SharedWalkService
import com.paw.key.data.service.home.HomeRegionService
import com.paw.key.data.service.walkcourse.WalkCourseService
Expand Down Expand Up @@ -60,4 +61,9 @@ object ServiceModule {
fun provideHomeRegionService(retrofit: Retrofit): HomeRegionService =
retrofit.create(HomeRegionService::class.java)

@Provides
@Singleton
fun provideFilterOptionService(retrofit: Retrofit): FilterOptionService =
retrofit.create(FilterOptionService::class.java)

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package com.paw.key.data.dto.response.filter

import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

@Serializable
data class FilterOptionResponseDto(
@SerialName("code")
val code: String,
@SerialName("message")
val message: String,
@SerialName("data")
val data: FilterOptionResponse
)

@Serializable
data class FilterOptionResponse(
@SerialName("categoryList")
val categoryList: List<CategoryDto>
)

@Serializable
data class CategoryDto(
@SerialName("categoryId")
val categoryId: Int? = null,
@SerialName("categoryName")
val categoryName: String? = null,
@SerialName("categoryOptions")
val categoryOptions: List<CategoryOptionDto>? = null
)

@Serializable
data class CategoryOptionDto(
@SerialName("categoryOptionId")
val categoryOptionId: Int? = null,
@SerialName("categoryOptionText")
val categoryOptionText: String? = null
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.paw.key.data.remote.datasource.filter

import com.paw.key.data.dto.response.BaseResponse
import com.paw.key.data.dto.response.filter.FilterOptionResponse
import com.paw.key.data.service.filter.FilterOptionService
import javax.inject.Inject


class FilterOptionDataSource @Inject constructor(
private val filterOptionService: FilterOptionService
) {
suspend fun getFilterOptions(userId: Int): BaseResponse<FilterOptionResponse> {
return filterOptionService.getFilterOptions(userId)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package com.paw.key.data.repositoryimpl.filter

import com.paw.key.data.remote.datasource.filter.FilterOptionDataSource
import com.paw.key.domain.model.entity.filter.Category
import com.paw.key.domain.model.entity.filter.CategoryOption
import com.paw.key.domain.model.entity.filter.FilterEntity
import com.paw.key.domain.repository.filter.FilterOptionRepository
import javax.inject.Inject

class FilterOptionRepositoryImpl @Inject constructor(
private val dataSource: FilterOptionDataSource
) : FilterOptionRepository {

override suspend fun getFilterOptions(userId: Int): Result<FilterEntity> {
return try {
val response = dataSource.getFilterOptions(userId)

if (response.code == "S000") {
val filterEntity = FilterEntity(
categoryList = try {
response.data.categoryList.map { categoryDto ->
println(" - Category: ${categoryDto.categoryName}")
Category(
categoryId = categoryDto.categoryId ?: 0,
categoryName = categoryDto.categoryName ?: "",
categoryOptions = categoryDto.categoryOptions?.map { optionDto ->
println(" - CategoryOption: ${optionDto.categoryOptionText}")
CategoryOption(
categoryOptionId = optionDto.categoryOptionId ?: 0,
categoryOptionText = optionDto.categoryOptionText ?: ""
)
} ?: emptyList()
)
}
} catch (e: Exception) {
e.printStackTrace()
emptyList()
}
)

filterEntity.categoryList?.forEach { category ->
}

Result.success(filterEntity)
} else {
Result.failure(Exception("API Error: ${response.message}"))
}
} catch (e: Exception) {
e.printStackTrace()
Result.failure(e)
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.paw.key.data.service.filter

import com.paw.key.data.dto.response.BaseResponse
import com.paw.key.data.dto.response.filter.FilterOptionResponse
import retrofit2.http.GET
import retrofit2.http.Header


interface FilterOptionService {
@GET ("posts/categories")
suspend fun getFilterOptions(
@Header("X-USER-ID") userId: Int,
): BaseResponse<FilterOptionResponse>
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package com.paw.key.domain.model.entity.filter

data class FilterEntity(
val selectList: List<SelectOption>? = null,
val categoryList: List<Category>? = null
)

data class SelectOption(
val selectId: Int = 0,
val selectName: String = "",
val options: List<SelectOptionItem>? = null
)

data class SelectOptionItem(
val selectOptionId: Int = 0,
val selectText: String = ""
)

data class Category(
val categoryId: Int = 0,
val categoryName: String = "",
val categoryOptions: List<CategoryOption>? = null
)

data class CategoryOption(
val categoryOptionId: Int = 0,
val categoryOptionText: String = ""
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.paw.key.domain.repository.filter

import com.paw.key.domain.model.entity.filter.FilterEntity


interface FilterOptionRepository {
suspend fun getFilterOptions(userId: Int): Result<FilterEntity>
}
Loading