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
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ render.experimental.xml

# Keystore files
*.jks
*.keystore
# *.keystore

# Google Services (e.g. APIs or Firebase)
google-services.json
Expand Down
18 changes: 18 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 @@ -8,19 +8,23 @@ 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.data.repositoryimpl.walklist.WalkListDetailRepositoryImpl
import com.paw.key.data.repositoryimpl.walkreview.WalkReviewRepositoryImpl
import com.paw.key.domain.repository.DummyRepository
import com.paw.key.domain.repository.onboarding.OnboardingInfoRepository
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.petprofile.PetProfileRepository
import com.paw.key.domain.repository.walkcourse.WalkCourseRepository
import com.paw.key.domain.repository.walklist.WalkListRepository
import com.paw.key.domain.repository.walkreview.WalkReviewRepository
import dagger.Binds
import dagger.Module
Expand Down Expand Up @@ -99,4 +103,18 @@ interface RepositoryModule {
fun bindWalkReviewRepository(
impl: WalkReviewRepositoryImpl
) : WalkReviewRepository

// 리뷰
@Binds
@Singleton
fun bindWalkListDetailRepository(
impl: WalkListDetailRepositoryImpl
) : WalkListRepository

@Binds
@Singleton
fun bindFilterOptionRepository(
impl: FilterOptionRepositoryImpl
) : FilterOptionRepository

}
11 changes: 11 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 @@ -6,9 +6,11 @@ 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
import com.paw.key.data.service.walklist.WalkListDetailService
import com.paw.key.data.service.walkreview.WalkReviewService
import dagger.Module
import dagger.Provides
Expand Down Expand Up @@ -73,5 +75,14 @@ object ServiceModule {
fun provideWalkReviewService(retrofit: Retrofit): WalkReviewService =
retrofit.create()

// 리뷰
@Provides
@Singleton
fun provideWalkListDetailService(retrofit: Retrofit): WalkListDetailService =
retrofit.create()

@Provides
@Singleton
fun provideFilterOptionService(retrofit: Retrofit): FilterOptionService =
retrofit.create()
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@ import kotlinx.serialization.Serializable

@Serializable
data class SharedWalkReviewRequestDto(
@SerialName("routeId")
val routeId: Int,

@SerialName("selectedCategories")
val selectedCategories: List<SharedWalkReviewCategoryDto>
)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
package com.paw.key.data.dto.response.walklist

import com.paw.key.domain.model.entity.walklist.AuthorInfoEntity
import com.paw.key.domain.model.entity.walklist.CategoryTagsEntity
import com.paw.key.domain.model.entity.walklist.WalkListDetailEntity
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

@Serializable
data class WalkReviewDetailResponseDto(
@SerialName("postId")
val postId: Int,
@SerialName("routeId")
val routeId: Int,
@SerialName("title")
val title: String,
@SerialName("content")
val content: String,
@SerialName("isLike")
val isLike: Boolean,
@SerialName("authorInfo")
val authorInfo: AuthorInfoDto,
@SerialName("categoryTags")
val categoryTags: CategoryTagsDto,
@SerialName("regionName")
val regionName: String,
@SerialName("createdAt")
val createdAt: String,
@SerialName("routeMapImageUrl")
val routeMapImageUrl: String,
@SerialName("walkingImageUrls")
val walkingImageUrls: List<String>
) {
fun toEntity(): WalkListDetailEntity {
return WalkListDetailEntity(
postId = postId,
routeId = routeId,
title = title,
content = content,
isLike = isLike,
authorInfo = authorInfo.toEntity(),
categoryTags = categoryTags.toEntity(),
regionName = regionName,
createdAt = createdAt,
routeMapImageUrl = routeMapImageUrl,
)
}
}

@Serializable
data class AuthorInfoDto(
@SerialName("authorId")
val authorId: Int,
@SerialName("petId")
val petId: Int,
@SerialName("petName")
val petName: String,
@SerialName("petProfileImage")
val petProfileImage: String
) {
fun toEntity(): AuthorInfoEntity {
return AuthorInfoEntity(
authorId = authorId,
petId = petId,
petName = petName,
petProfileImage = petProfileImage
)
}
}

@Serializable
data class CategoryTagsDto(
@SerialName("categoryOptionSummary")
val categoryOptionSummary: List<String>
) {
fun toEntity(): CategoryTagsEntity {
return CategoryTagsEntity(
categoryOptionSummary = categoryOptionSummary
)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
package com.paw.key.data.dto.response.walklist

import com.paw.key.domain.model.entity.walklist.CategoryTop3Entity
import com.paw.key.domain.model.entity.walklist.WalkReviewSummaryEntity
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

@Serializable
data class WalkReviewSummaryResponseDto(
@SerialName("postId")
val postId: Int,

@SerialName("totalReviewCount")
val totalReviewCount: Int,

@SerialName("categoryTop3")
val categoryTop3: List<CategoryTop3ResponseDto>
) {
fun toEntity(): WalkReviewSummaryEntity {
return WalkReviewSummaryEntity(
postId = postId,
totalReviewCount = totalReviewCount,
categoryTop3 = categoryTop3.map { it.toEntity() },
)
}
}

@Serializable
data class CategoryTop3ResponseDto(
@SerialName("categoryId")
val categoryId: Int,

@SerialName("categoryName")
val categoryName: String,

@SerialName("categoryOptionId")
val categoryOptionId: Int,

@SerialName("optionText")
val optionText: String,

@SerialName("rank")
val rank: Int,

@SerialName("percentage")
val percentage: Int
) {
fun toEntity(): CategoryTop3Entity {
return CategoryTop3Entity(
categoryId = categoryId,
categoryName = categoryName,
categoryOptionId = categoryOptionId,
optionText = optionText,
rank = rank,
percentage = percentage
)
}
}
Original file line number Diff line number Diff line change
@@ -1,10 +1,15 @@
package com.paw.key.data.remote.datasource.sharedwalk

import com.paw.key.data.dto.request.sharedwalk.SharedWalkReviewRequestDto
import com.paw.key.data.service.sharedwalk.SharedWalkService
import com.paw.key.domain.model.entity.sharedwalk.SharedWalkReviewEntity
import javax.inject.Inject

class SharedWalkDataSource @Inject constructor(
private val sharedWalkService: SharedWalkService
) {
suspend fun getSharedWalkTrack(userId: Int, routeId: Int) = sharedWalkService.getSharedWalkTrack(userId, routeId)

suspend fun postSharedWalkReviewRegister(userId: Int, reviewDto: SharedWalkReviewRequestDto) =
sharedWalkService.postSharedWalkReview(userId, reviewDto)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.paw.key.data.remote.datasource.walklist

import com.paw.key.data.service.walklist.WalkListDetailService
import javax.inject.Inject

class WalkListDetailDataSource @Inject constructor(
private val walkListDetailService: WalkListDetailService
) {
suspend fun getWalkListDetail(userId: Int, postId: Int) = walkListDetailService.getWalkListDetail(userId, postId)

suspend fun getWalkReviewSummary(userId: Int, postId: Int) = walkListDetailService.getWalkReviewSummary(userId, postId)
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package com.paw.key.data.repositoryimpl.sharedwalk
import com.paw.key.data.remote.datasource.sharedwalk.SharedWalkDataSource
import com.paw.key.domain.model.entity.region.RegionDataEntity
import com.paw.key.domain.model.entity.sharedwalk.SharedWalkEntity
import com.paw.key.domain.model.entity.sharedwalk.SharedWalkReviewEntity
import com.paw.key.domain.repository.sharedwalk.SharedWalkRepository
import javax.inject.Inject

Expand All @@ -12,4 +13,13 @@ class SharedWalkRepositoryImpl @Inject constructor(
override suspend fun getSharedWalkTrack(userId: Int, routeId: Int) : Result<SharedWalkEntity> = runCatching {
sharedWalkDataSource.getSharedWalkTrack(userId, routeId).data.toEntity()
}

override suspend fun postSharedWalkReviewRegister(
userId: Int,
review: SharedWalkReviewEntity
): Result<Unit> {
return runCatching {
sharedWalkDataSource.postSharedWalkReviewRegister(userId, review.toDto())
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package com.paw.key.data.repositoryimpl.walklist

import com.paw.key.data.remote.datasource.walklist.WalkListDetailDataSource
import com.paw.key.data.service.walklist.WalkListDetailService
import com.paw.key.domain.model.entity.walklist.WalkListDetailEntity
import com.paw.key.domain.model.entity.walklist.WalkReviewSummaryEntity
import com.paw.key.domain.repository.walklist.WalkListRepository
import javax.inject.Inject

class WalkListDetailRepositoryImpl @Inject constructor(
private val walkListDetailDataSource: WalkListDetailDataSource
) : WalkListRepository {
override suspend fun getWalkListDetail(userId: Int, postId: Int): Result<WalkListDetailEntity> {
return runCatching {
walkListDetailDataSource.getWalkListDetail(userId, postId).data.toEntity()
}
}

override suspend fun getWalkTopPopular(userId: Int, postId: Int) : Result<WalkReviewSummaryEntity> {
return runCatching {
walkListDetailDataSource.getWalkReviewSummary(userId, postId).data.toEntity()
}
}
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
package com.paw.key.data.service.sharedwalk

import com.paw.key.data.dto.request.sharedwalk.SharedWalkReviewRequestDto
import com.paw.key.data.dto.response.BaseResponse
import com.paw.key.data.dto.response.sharedwalk.SharedWalkResponseDto
import retrofit2.http.Body
import retrofit2.http.GET
import retrofit2.http.Header
import retrofit2.http.POST
import retrofit2.http.Path

interface SharedWalkService {
Expand All @@ -12,4 +15,10 @@ interface SharedWalkService {
@Header("X-USER-ID") userId: Int,
@Path("routeId") routeId: Int,
) : BaseResponse<SharedWalkResponseDto>

@POST("reviews")
suspend fun postSharedWalkReview(
@Header("X-USER-ID") userId: Int,
@Body reviewDto: SharedWalkReviewRequestDto
) : BaseResponse<Unit>
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package com.paw.key.data.service.walklist

import com.paw.key.data.dto.response.BaseResponse
import com.paw.key.data.dto.response.walklist.WalkReviewDetailResponseDto
import com.paw.key.data.dto.response.walklist.WalkReviewSummaryResponseDto
import retrofit2.http.GET
import retrofit2.http.Header
import retrofit2.http.Path

interface WalkListDetailService {
@GET("posts/{postId}")
suspend fun getWalkListDetail(
@Header("X-USER-ID") userId: Int,
@Path("postId") postId: Int
): BaseResponse<WalkReviewDetailResponseDto>

@GET("posts/{routeId}/reviews/top")
suspend fun getWalkReviewSummary(
@Header("X-USER-ID") userId: Int,
@Path("postId") postId: Int
): BaseResponse<WalkReviewSummaryResponseDto>
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package com.paw.key.domain.model.entity.sharedwalk

import com.paw.key.data.dto.request.sharedwalk.SharedWalkReviewCategoryDto
import com.paw.key.data.dto.request.sharedwalk.SharedWalkReviewRequestDto

data class SharedWalkReviewEntity(
val routeId: Int,
val categories: List<SharedWalkReviewCategory>
) {
fun toDto(): SharedWalkReviewRequestDto {
return SharedWalkReviewRequestDto(
routeId = routeId,
selectedCategories = categories.map { category ->
SharedWalkReviewCategoryDto(
categoryId = category.categoryId,
selectedOptionIds = category.selectedOptionIds
)
}
)
}
}

data class SharedWalkReviewCategory(
val categoryId: Int,
val selectedOptionIds: List<Int>
)
Loading