From 638a4be1527f54743b036ed040d734770a020531 Mon Sep 17 00:00:00 2001 From: roel Date: Thu, 23 Jan 2025 02:40:26 +0900 Subject: [PATCH 01/10] =?UTF-8?q?[FEAT/#120]=20=EA=B2=8C=EC=8B=9C=EB=AC=BC?= =?UTF-8?q?=20=EB=96=A0=EB=A8=B9=EA=B8=B0=20API=20=EC=97=B0=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../data/datasource/PostRemoteDataSource.kt | 7 ++++++ .../PostRemoteDataSourceImpl.kt | 15 ++++++++++++ .../spoony/spoony/data/di/DataSourceModule.kt | 6 +++++ .../spoony/spoony/data/di/ServiceModule.kt | 6 +++++ .../spoony/data/dto/base/BaseResponseDTO.kt | 20 ++++++++++++++++ .../data/dto/request/PostScoopRequestDTO.kt | 12 ++++++++++ .../data/repositoryimpl/PostRepositoryImpl.kt | 14 +++++++---- .../spoony/spoony/data/service/PostService.kt | 19 +++++++++++++++ .../domain/repository/PostRepository.kt | 3 ++- .../placeDetail/PlaceDetailViewModel.kt | 23 ++++++++++++------- 10 files changed, 111 insertions(+), 14 deletions(-) create mode 100644 app/src/main/java/com/spoony/spoony/data/datasource/PostRemoteDataSource.kt create mode 100644 app/src/main/java/com/spoony/spoony/data/datasourceimpl/PostRemoteDataSourceImpl.kt create mode 100644 app/src/main/java/com/spoony/spoony/data/dto/base/BaseResponseDTO.kt create mode 100644 app/src/main/java/com/spoony/spoony/data/dto/request/PostScoopRequestDTO.kt create mode 100644 app/src/main/java/com/spoony/spoony/data/service/PostService.kt diff --git a/app/src/main/java/com/spoony/spoony/data/datasource/PostRemoteDataSource.kt b/app/src/main/java/com/spoony/spoony/data/datasource/PostRemoteDataSource.kt new file mode 100644 index 00000000..1a19e604 --- /dev/null +++ b/app/src/main/java/com/spoony/spoony/data/datasource/PostRemoteDataSource.kt @@ -0,0 +1,7 @@ +package com.spoony.spoony.data.datasource + +import com.spoony.spoony.data.dto.base.BaseResponseDTO + +interface PostRemoteDataSource { + suspend fun postScoopPost(postId: Int, userId: Int): BaseResponseDTO +} diff --git a/app/src/main/java/com/spoony/spoony/data/datasourceimpl/PostRemoteDataSourceImpl.kt b/app/src/main/java/com/spoony/spoony/data/datasourceimpl/PostRemoteDataSourceImpl.kt new file mode 100644 index 00000000..2edffe5c --- /dev/null +++ b/app/src/main/java/com/spoony/spoony/data/datasourceimpl/PostRemoteDataSourceImpl.kt @@ -0,0 +1,15 @@ +package com.spoony.spoony.data.datasourceimpl + +import com.spoony.spoony.data.datasource.PostRemoteDataSource +import com.spoony.spoony.data.dto.base.BaseResponseDTO +import com.spoony.spoony.data.dto.request.PostScoopRequestDTO +import com.spoony.spoony.data.service.PostService +import javax.inject.Inject + +class PostRemoteDataSourceImpl @Inject constructor( + private val postService: PostService +) : PostRemoteDataSource { + override suspend fun postScoopPost(postId: Int, userId: Int): BaseResponseDTO = postService.postScoopPost( + PostScoopRequestDTO(postId = postId, userId = userId) + ) +} diff --git a/app/src/main/java/com/spoony/spoony/data/di/DataSourceModule.kt b/app/src/main/java/com/spoony/spoony/data/di/DataSourceModule.kt index 48b688ce..e15647ae 100644 --- a/app/src/main/java/com/spoony/spoony/data/di/DataSourceModule.kt +++ b/app/src/main/java/com/spoony/spoony/data/di/DataSourceModule.kt @@ -1,7 +1,9 @@ package com.spoony.spoony.data.di import com.spoony.spoony.data.datasource.DummyRemoteDataSource +import com.spoony.spoony.data.datasource.PostRemoteDataSource import com.spoony.spoony.data.datasourceimpl.DummyRemoteDataSourceImpl +import com.spoony.spoony.data.datasourceimpl.PostRemoteDataSourceImpl import dagger.Binds import dagger.Module import dagger.hilt.InstallIn @@ -14,4 +16,8 @@ abstract class DataSourceModule { @Binds @Singleton abstract fun bindDummyDataSource(dummyRemoteDataSourceImpl: DummyRemoteDataSourceImpl): DummyRemoteDataSource + + @Binds + @Singleton + abstract fun bindPostDataSource(postRemoteDataSourceImpl: PostRemoteDataSourceImpl): PostRemoteDataSource } diff --git a/app/src/main/java/com/spoony/spoony/data/di/ServiceModule.kt b/app/src/main/java/com/spoony/spoony/data/di/ServiceModule.kt index 49d5b3ea..b74b4677 100644 --- a/app/src/main/java/com/spoony/spoony/data/di/ServiceModule.kt +++ b/app/src/main/java/com/spoony/spoony/data/di/ServiceModule.kt @@ -1,6 +1,7 @@ package com.spoony.spoony.data.di import com.spoony.spoony.data.service.DummyService +import com.spoony.spoony.data.service.PostService import dagger.Module import dagger.Provides import dagger.hilt.InstallIn @@ -15,4 +16,9 @@ object ServiceModule { @Singleton fun provideDummyService(retrofit: Retrofit): DummyService = retrofit.create(DummyService::class.java) + + @Provides + @Singleton + fun providePostService(retrofit: Retrofit): PostService = + retrofit.create(PostService::class.java) } diff --git a/app/src/main/java/com/spoony/spoony/data/dto/base/BaseResponseDTO.kt b/app/src/main/java/com/spoony/spoony/data/dto/base/BaseResponseDTO.kt new file mode 100644 index 00000000..7d0b829c --- /dev/null +++ b/app/src/main/java/com/spoony/spoony/data/dto/base/BaseResponseDTO.kt @@ -0,0 +1,20 @@ +package com.spoony.spoony.data.dto.base + +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable +data class BaseResponseDTO( + @SerialName("success") + val success: Boolean, + @SerialName("error") + val error: ErrorResponse? = null, + @SerialName("data") + val data: T? = null +) + +@Serializable +data class ErrorResponse( + @SerialName("message") + val message: String +) diff --git a/app/src/main/java/com/spoony/spoony/data/dto/request/PostScoopRequestDTO.kt b/app/src/main/java/com/spoony/spoony/data/dto/request/PostScoopRequestDTO.kt new file mode 100644 index 00000000..b7c35265 --- /dev/null +++ b/app/src/main/java/com/spoony/spoony/data/dto/request/PostScoopRequestDTO.kt @@ -0,0 +1,12 @@ +package com.spoony.spoony.data.dto.request + +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable +data class PostScoopRequestDTO( + @SerialName("postId") + val postId: Int, + @SerialName("userId") + val userId: Int +) diff --git a/app/src/main/java/com/spoony/spoony/data/repositoryimpl/PostRepositoryImpl.kt b/app/src/main/java/com/spoony/spoony/data/repositoryimpl/PostRepositoryImpl.kt index 64093bac..5c243ca8 100644 --- a/app/src/main/java/com/spoony/spoony/data/repositoryimpl/PostRepositoryImpl.kt +++ b/app/src/main/java/com/spoony/spoony/data/repositoryimpl/PostRepositoryImpl.kt @@ -1,12 +1,16 @@ package com.spoony.spoony.data.repositoryimpl +import com.spoony.spoony.data.datasource.PostRemoteDataSource +import com.spoony.spoony.data.dto.base.BaseResponseDTO import com.spoony.spoony.domain.entity.CategoryEntity import com.spoony.spoony.domain.entity.PostEntity import com.spoony.spoony.domain.repository.PostRepository import javax.inject.Inject import kotlinx.collections.immutable.persistentListOf -class PostRepositoryImpl @Inject constructor() : PostRepository { +class PostRepositoryImpl @Inject constructor( + val postRemoteDataSource: PostRemoteDataSource +) : PostRepository { override suspend fun getPost(postId: Int): Result = Result.success( PostEntity( @@ -42,10 +46,10 @@ class PostRepositoryImpl @Inject constructor() : PostRepository { ) ) - override suspend fun postScoopPost(postId: Int, userId: Int): Result = - Result.success( - true - ) + override suspend fun postScoopPost(postId: Int, userId: Int): Result> = + runCatching { + postRemoteDataSource.postScoopPost(postId = postId, userId = userId) + } override suspend fun postAddMap(postId: Int, userId: Int): Result = Result.success( diff --git a/app/src/main/java/com/spoony/spoony/data/service/PostService.kt b/app/src/main/java/com/spoony/spoony/data/service/PostService.kt new file mode 100644 index 00000000..2473d2a6 --- /dev/null +++ b/app/src/main/java/com/spoony/spoony/data/service/PostService.kt @@ -0,0 +1,19 @@ +package com.spoony.spoony.data.service + +import com.spoony.spoony.data.dto.base.BaseResponseDTO +import com.spoony.spoony.data.dto.request.PostScoopRequestDTO +import retrofit2.http.Body +import retrofit2.http.POST + +interface PostService { + companion object { + const val API = "api" + const val V1 = "v1" + const val POST = "post" + } + + @POST("/$API/$V1/$POST/scoop") + suspend fun postScoopPost( + @Body postScoopRequestDTO: PostScoopRequestDTO + ): BaseResponseDTO +} diff --git a/app/src/main/java/com/spoony/spoony/domain/repository/PostRepository.kt b/app/src/main/java/com/spoony/spoony/domain/repository/PostRepository.kt index 8546705d..273a8a36 100644 --- a/app/src/main/java/com/spoony/spoony/domain/repository/PostRepository.kt +++ b/app/src/main/java/com/spoony/spoony/domain/repository/PostRepository.kt @@ -1,11 +1,12 @@ package com.spoony.spoony.domain.repository +import com.spoony.spoony.data.dto.base.BaseResponseDTO import com.spoony.spoony.domain.entity.PostEntity interface PostRepository { suspend fun getPost(postId: Int): Result - suspend fun postScoopPost(postId: Int, userId: Int): Result + suspend fun postScoopPost(postId: Int, userId: Int): Result> suspend fun postAddMap(postId: Int, userId: Int): Result diff --git a/app/src/main/java/com/spoony/spoony/presentation/placeDetail/PlaceDetailViewModel.kt b/app/src/main/java/com/spoony/spoony/presentation/placeDetail/PlaceDetailViewModel.kt index eaad3b81..63655fe2 100644 --- a/app/src/main/java/com/spoony/spoony/presentation/placeDetail/PlaceDetailViewModel.kt +++ b/app/src/main/java/com/spoony/spoony/presentation/placeDetail/PlaceDetailViewModel.kt @@ -49,18 +49,25 @@ class PlaceDetailViewModel @Inject constructor( viewModelScope.launch { postRepository.postScoopPost(userId = userId, postId = postId) .onSuccess { response -> - (_state.value.postEntity as? UiState.Success)?.data?.let { currentPostEntity -> - with(currentPostEntity) { - _state.value = _state.value.copy( - postEntity = UiState.Success( - copy(isScooped = true) - ) - ) + when (response.success) { + true -> { + (_state.value.postEntity as? UiState.Success)?.data?.let { currentPostEntity -> + with(currentPostEntity) { + _state.value = _state.value.copy( + postEntity = UiState.Success( + copy(isScooped = true) + ) + ) + } + } + } + false -> { + // 통신에 성공했지만 떠먹기에 실패했을 경우 } } } .onFailure { - // 실패 했을 경우 + // 통신에 실패 했을 경우 } } } From fc1eeebb9bf785fdf4d722a20d419c182e6461b5 Mon Sep 17 00:00:00 2001 From: roel Date: Thu, 23 Jan 2025 03:57:22 +0900 Subject: [PATCH 02/10] =?UTF-8?q?[FEAT/#120]=20BaseResponseDTO=20->=20Base?= =?UTF-8?q?Response=20=EB=A1=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../data/datasource/PostRemoteDataSource.kt | 4 ++-- .../datasourceimpl/PostRemoteDataSourceImpl.kt | 4 ++-- .../base/{BaseResponseDTO.kt => BaseResponse.kt} | 16 ++++++++-------- .../data/repositoryimpl/PostRepositoryImpl.kt | 4 ++-- .../spoony/spoony/data/service/PostService.kt | 4 ++-- .../spoony/domain/repository/PostRepository.kt | 4 ++-- 6 files changed, 18 insertions(+), 18 deletions(-) rename app/src/main/java/com/spoony/spoony/data/dto/base/{BaseResponseDTO.kt => BaseResponse.kt} (67%) diff --git a/app/src/main/java/com/spoony/spoony/data/datasource/PostRemoteDataSource.kt b/app/src/main/java/com/spoony/spoony/data/datasource/PostRemoteDataSource.kt index 1a19e604..caa7f8e6 100644 --- a/app/src/main/java/com/spoony/spoony/data/datasource/PostRemoteDataSource.kt +++ b/app/src/main/java/com/spoony/spoony/data/datasource/PostRemoteDataSource.kt @@ -1,7 +1,7 @@ package com.spoony.spoony.data.datasource -import com.spoony.spoony.data.dto.base.BaseResponseDTO +import com.spoony.spoony.data.dto.base.BaseResponse interface PostRemoteDataSource { - suspend fun postScoopPost(postId: Int, userId: Int): BaseResponseDTO + suspend fun postScoopPost(postId: Int, userId: Int): BaseResponse } diff --git a/app/src/main/java/com/spoony/spoony/data/datasourceimpl/PostRemoteDataSourceImpl.kt b/app/src/main/java/com/spoony/spoony/data/datasourceimpl/PostRemoteDataSourceImpl.kt index 2edffe5c..edd3849a 100644 --- a/app/src/main/java/com/spoony/spoony/data/datasourceimpl/PostRemoteDataSourceImpl.kt +++ b/app/src/main/java/com/spoony/spoony/data/datasourceimpl/PostRemoteDataSourceImpl.kt @@ -1,7 +1,7 @@ package com.spoony.spoony.data.datasourceimpl import com.spoony.spoony.data.datasource.PostRemoteDataSource -import com.spoony.spoony.data.dto.base.BaseResponseDTO +import com.spoony.spoony.data.dto.base.BaseResponse import com.spoony.spoony.data.dto.request.PostScoopRequestDTO import com.spoony.spoony.data.service.PostService import javax.inject.Inject @@ -9,7 +9,7 @@ import javax.inject.Inject class PostRemoteDataSourceImpl @Inject constructor( private val postService: PostService ) : PostRemoteDataSource { - override suspend fun postScoopPost(postId: Int, userId: Int): BaseResponseDTO = postService.postScoopPost( + override suspend fun postScoopPost(postId: Int, userId: Int): BaseResponse = postService.postScoopPost( PostScoopRequestDTO(postId = postId, userId = userId) ) } diff --git a/app/src/main/java/com/spoony/spoony/data/dto/base/BaseResponseDTO.kt b/app/src/main/java/com/spoony/spoony/data/dto/base/BaseResponse.kt similarity index 67% rename from app/src/main/java/com/spoony/spoony/data/dto/base/BaseResponseDTO.kt rename to app/src/main/java/com/spoony/spoony/data/dto/base/BaseResponse.kt index 7d0b829c..74ed956c 100644 --- a/app/src/main/java/com/spoony/spoony/data/dto/base/BaseResponseDTO.kt +++ b/app/src/main/java/com/spoony/spoony/data/dto/base/BaseResponse.kt @@ -4,17 +4,17 @@ import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable @Serializable -data class BaseResponseDTO( +data class BaseResponse( @SerialName("success") val success: Boolean, @SerialName("error") val error: ErrorResponse? = null, @SerialName("data") val data: T? = null -) - -@Serializable -data class ErrorResponse( - @SerialName("message") - val message: String -) +) { + @Serializable + data class ErrorResponse( + @SerialName("message") + val message: String + ) +} diff --git a/app/src/main/java/com/spoony/spoony/data/repositoryimpl/PostRepositoryImpl.kt b/app/src/main/java/com/spoony/spoony/data/repositoryimpl/PostRepositoryImpl.kt index 5c243ca8..98819a6d 100644 --- a/app/src/main/java/com/spoony/spoony/data/repositoryimpl/PostRepositoryImpl.kt +++ b/app/src/main/java/com/spoony/spoony/data/repositoryimpl/PostRepositoryImpl.kt @@ -1,7 +1,7 @@ package com.spoony.spoony.data.repositoryimpl import com.spoony.spoony.data.datasource.PostRemoteDataSource -import com.spoony.spoony.data.dto.base.BaseResponseDTO +import com.spoony.spoony.data.dto.base.BaseResponse import com.spoony.spoony.domain.entity.CategoryEntity import com.spoony.spoony.domain.entity.PostEntity import com.spoony.spoony.domain.repository.PostRepository @@ -46,7 +46,7 @@ class PostRepositoryImpl @Inject constructor( ) ) - override suspend fun postScoopPost(postId: Int, userId: Int): Result> = + override suspend fun postScoopPost(postId: Int, userId: Int): Result> = runCatching { postRemoteDataSource.postScoopPost(postId = postId, userId = userId) } diff --git a/app/src/main/java/com/spoony/spoony/data/service/PostService.kt b/app/src/main/java/com/spoony/spoony/data/service/PostService.kt index 2473d2a6..c6cc4b31 100644 --- a/app/src/main/java/com/spoony/spoony/data/service/PostService.kt +++ b/app/src/main/java/com/spoony/spoony/data/service/PostService.kt @@ -1,6 +1,6 @@ package com.spoony.spoony.data.service -import com.spoony.spoony.data.dto.base.BaseResponseDTO +import com.spoony.spoony.data.dto.base.BaseResponse import com.spoony.spoony.data.dto.request.PostScoopRequestDTO import retrofit2.http.Body import retrofit2.http.POST @@ -15,5 +15,5 @@ interface PostService { @POST("/$API/$V1/$POST/scoop") suspend fun postScoopPost( @Body postScoopRequestDTO: PostScoopRequestDTO - ): BaseResponseDTO + ): BaseResponse } diff --git a/app/src/main/java/com/spoony/spoony/domain/repository/PostRepository.kt b/app/src/main/java/com/spoony/spoony/domain/repository/PostRepository.kt index 273a8a36..0685a608 100644 --- a/app/src/main/java/com/spoony/spoony/domain/repository/PostRepository.kt +++ b/app/src/main/java/com/spoony/spoony/domain/repository/PostRepository.kt @@ -1,12 +1,12 @@ package com.spoony.spoony.domain.repository -import com.spoony.spoony.data.dto.base.BaseResponseDTO +import com.spoony.spoony.data.dto.base.BaseResponse import com.spoony.spoony.domain.entity.PostEntity interface PostRepository { suspend fun getPost(postId: Int): Result - suspend fun postScoopPost(postId: Int, userId: Int): Result> + suspend fun postScoopPost(postId: Int, userId: Int): Result> suspend fun postAddMap(postId: Int, userId: Int): Result From 3a3ff75abeddfe337bdb2e9508f500e5cb2fea08 Mon Sep 17 00:00:00 2001 From: roel Date: Thu, 23 Jan 2025 03:58:26 +0900 Subject: [PATCH 03/10] =?UTF-8?q?[FEAT/#120]=20PostService=20companion=20o?= =?UTF-8?q?bject=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/spoony/spoony/data/service/PostService.kt | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/app/src/main/java/com/spoony/spoony/data/service/PostService.kt b/app/src/main/java/com/spoony/spoony/data/service/PostService.kt index c6cc4b31..7e896b60 100644 --- a/app/src/main/java/com/spoony/spoony/data/service/PostService.kt +++ b/app/src/main/java/com/spoony/spoony/data/service/PostService.kt @@ -6,13 +6,7 @@ import retrofit2.http.Body import retrofit2.http.POST interface PostService { - companion object { - const val API = "api" - const val V1 = "v1" - const val POST = "post" - } - - @POST("/$API/$V1/$POST/scoop") + @POST("/api/v1/post/scoop") suspend fun postScoopPost( @Body postScoopRequestDTO: PostScoopRequestDTO ): BaseResponse From 9d83e470dd14c0decba808c5a99af7815f8da22e Mon Sep 17 00:00:00 2001 From: roel Date: Thu, 23 Jan 2025 04:17:54 +0900 Subject: [PATCH 04/10] =?UTF-8?q?[FEAT/#120]=20useSpoon=20param=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=20=EB=B0=8F=20PostScoopRequestDTO=20->=20Pos?= =?UTF-8?q?tScoopRequestDto=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../datasourceimpl/PostRemoteDataSourceImpl.kt | 4 ++-- ...tScoopRequestDTO.kt => PostScoopRequestDto.kt} | 2 +- .../com/spoony/spoony/data/service/PostService.kt | 4 ++-- .../placeDetail/PlaceDetailViewModel.kt | 15 +++++++++------ 4 files changed, 14 insertions(+), 11 deletions(-) rename app/src/main/java/com/spoony/spoony/data/dto/request/{PostScoopRequestDTO.kt => PostScoopRequestDto.kt} (88%) diff --git a/app/src/main/java/com/spoony/spoony/data/datasourceimpl/PostRemoteDataSourceImpl.kt b/app/src/main/java/com/spoony/spoony/data/datasourceimpl/PostRemoteDataSourceImpl.kt index edd3849a..6fc73ad1 100644 --- a/app/src/main/java/com/spoony/spoony/data/datasourceimpl/PostRemoteDataSourceImpl.kt +++ b/app/src/main/java/com/spoony/spoony/data/datasourceimpl/PostRemoteDataSourceImpl.kt @@ -2,7 +2,7 @@ package com.spoony.spoony.data.datasourceimpl import com.spoony.spoony.data.datasource.PostRemoteDataSource import com.spoony.spoony.data.dto.base.BaseResponse -import com.spoony.spoony.data.dto.request.PostScoopRequestDTO +import com.spoony.spoony.data.dto.request.PostScoopRequestDto import com.spoony.spoony.data.service.PostService import javax.inject.Inject @@ -10,6 +10,6 @@ class PostRemoteDataSourceImpl @Inject constructor( private val postService: PostService ) : PostRemoteDataSource { override suspend fun postScoopPost(postId: Int, userId: Int): BaseResponse = postService.postScoopPost( - PostScoopRequestDTO(postId = postId, userId = userId) + PostScoopRequestDto(postId = postId, userId = userId) ) } diff --git a/app/src/main/java/com/spoony/spoony/data/dto/request/PostScoopRequestDTO.kt b/app/src/main/java/com/spoony/spoony/data/dto/request/PostScoopRequestDto.kt similarity index 88% rename from app/src/main/java/com/spoony/spoony/data/dto/request/PostScoopRequestDTO.kt rename to app/src/main/java/com/spoony/spoony/data/dto/request/PostScoopRequestDto.kt index b7c35265..258fd774 100644 --- a/app/src/main/java/com/spoony/spoony/data/dto/request/PostScoopRequestDTO.kt +++ b/app/src/main/java/com/spoony/spoony/data/dto/request/PostScoopRequestDto.kt @@ -4,7 +4,7 @@ import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable @Serializable -data class PostScoopRequestDTO( +data class PostScoopRequestDto( @SerialName("postId") val postId: Int, @SerialName("userId") diff --git a/app/src/main/java/com/spoony/spoony/data/service/PostService.kt b/app/src/main/java/com/spoony/spoony/data/service/PostService.kt index 7e896b60..0b127ede 100644 --- a/app/src/main/java/com/spoony/spoony/data/service/PostService.kt +++ b/app/src/main/java/com/spoony/spoony/data/service/PostService.kt @@ -1,13 +1,13 @@ package com.spoony.spoony.data.service import com.spoony.spoony.data.dto.base.BaseResponse -import com.spoony.spoony.data.dto.request.PostScoopRequestDTO +import com.spoony.spoony.data.dto.request.PostScoopRequestDto import retrofit2.http.Body import retrofit2.http.POST interface PostService { @POST("/api/v1/post/scoop") suspend fun postScoopPost( - @Body postScoopRequestDTO: PostScoopRequestDTO + @Body postScoopRequestDto: PostScoopRequestDto ): BaseResponse } diff --git a/app/src/main/java/com/spoony/spoony/presentation/placeDetail/PlaceDetailViewModel.kt b/app/src/main/java/com/spoony/spoony/presentation/placeDetail/PlaceDetailViewModel.kt index 4aac8540..7bc48394 100644 --- a/app/src/main/java/com/spoony/spoony/presentation/placeDetail/PlaceDetailViewModel.kt +++ b/app/src/main/java/com/spoony/spoony/presentation/placeDetail/PlaceDetailViewModel.kt @@ -13,6 +13,7 @@ import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.SharedFlow import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch @HiltViewModel @@ -51,19 +52,21 @@ class PlaceDetailViewModel @Inject constructor( } } - fun useSpoon(userId: Int, postId: Int) { + fun useSpoon(postId: Int, userId: Int) { viewModelScope.launch { - postRepository.postScoopPost(userId = userId, postId = postId) + postRepository.postScoopPost(postId = postId, userId = userId) .onSuccess { response -> when (response.success) { true -> { (_state.value.postEntity as? UiState.Success)?.data?.let { currentPostEntity -> with(currentPostEntity) { - _state.value = _state.value.copy( - postEntity = UiState.Success( - copy(isScooped = true) + _state.update { + it.copy( + postEntity = UiState.Success( + copy(isScooped = true) + ) ) - ) + } } } } From b355bfc641fd71eb6b4e4f9b23d04f4ee3c71eb8 Mon Sep 17 00:00:00 2001 From: roel Date: Thu, 23 Jan 2025 05:09:05 +0900 Subject: [PATCH 05/10] =?UTF-8?q?[FEAT/#120]=20=EC=BD=94=EB=93=9C=EB=A6=AC?= =?UTF-8?q?=EB=B7=B0=20=EC=88=98=EC=A0=95=EC=82=AC=ED=95=AD=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PostRemoteDataSourceImpl.kt | 11 +++++--- .../data/repositoryimpl/PostRepositoryImpl.kt | 7 ++---- .../spoony/spoony/data/service/PostService.kt | 5 ++-- .../domain/repository/PostRepository.kt | 3 +-- .../placeDetail/PlaceDetailViewModel.kt | 25 +++++++------------ 5 files changed, 22 insertions(+), 29 deletions(-) diff --git a/app/src/main/java/com/spoony/spoony/data/datasourceimpl/PostRemoteDataSourceImpl.kt b/app/src/main/java/com/spoony/spoony/data/datasourceimpl/PostRemoteDataSourceImpl.kt index 6f978711..f5123da9 100644 --- a/app/src/main/java/com/spoony/spoony/data/datasourceimpl/PostRemoteDataSourceImpl.kt +++ b/app/src/main/java/com/spoony/spoony/data/datasourceimpl/PostRemoteDataSourceImpl.kt @@ -10,8 +10,11 @@ import javax.inject.Inject class PostRemoteDataSourceImpl @Inject constructor( private val postService: PostService ) : PostRemoteDataSource { - override suspend fun postScoopPost(postId: Int, userId: Int): BaseResponse = postService.postScoopPost( - PostScoopRequestDto(postId = postId, userId = userId) - ) - override suspend fun getPostData(postId: Int, userId: Int): BaseResponse = postService.getPost(userId = userId, postId = postId) + override suspend fun getPostData(postId: Int, userId: Int): BaseResponse = + postService.getPost(userId = userId, postId = postId) + + override suspend fun postScoopPost(postId: Int, userId: Int): BaseResponse = + postService.postScoopPost( + PostScoopRequestDto(postId = postId, userId = userId) + ) } diff --git a/app/src/main/java/com/spoony/spoony/data/repositoryimpl/PostRepositoryImpl.kt b/app/src/main/java/com/spoony/spoony/data/repositoryimpl/PostRepositoryImpl.kt index 656d43b9..6dccd03f 100644 --- a/app/src/main/java/com/spoony/spoony/data/repositoryimpl/PostRepositoryImpl.kt +++ b/app/src/main/java/com/spoony/spoony/data/repositoryimpl/PostRepositoryImpl.kt @@ -2,9 +2,6 @@ package com.spoony.spoony.data.repositoryimpl import com.spoony.spoony.data.datasource.PostRemoteDataSource import com.spoony.spoony.data.mapper.toDomain -import com.spoony.spoony.data.datasource.PostRemoteDataSource -import com.spoony.spoony.data.dto.base.BaseResponse -import com.spoony.spoony.domain.entity.CategoryEntity import com.spoony.spoony.domain.entity.PostEntity import com.spoony.spoony.domain.repository.PostRepository import javax.inject.Inject @@ -17,9 +14,9 @@ class PostRepositoryImpl @Inject constructor( postRemoteDataSource.getPostData(postId, userId).data!!.toDomain() } - override suspend fun postScoopPost(postId: Int, userId: Int): Result> = + override suspend fun postScoopPost(postId: Int, userId: Int): Result = runCatching { - postRemoteDataSource.postScoopPost(postId = postId, userId = userId) + postRemoteDataSource.postScoopPost(postId = postId, userId = userId).success } override suspend fun postAddMap(postId: Int, userId: Int): Result = diff --git a/app/src/main/java/com/spoony/spoony/data/service/PostService.kt b/app/src/main/java/com/spoony/spoony/data/service/PostService.kt index c8e283e2..83fcbdd4 100644 --- a/app/src/main/java/com/spoony/spoony/data/service/PostService.kt +++ b/app/src/main/java/com/spoony/spoony/data/service/PostService.kt @@ -2,10 +2,10 @@ package com.spoony.spoony.data.service import com.spoony.spoony.data.dto.base.BaseResponse import com.spoony.spoony.data.dto.request.PostScoopRequestDto -import retrofit2.http.Body -import retrofit2.http.POST import com.spoony.spoony.data.dto.response.GetPostResponseDto +import retrofit2.http.Body import retrofit2.http.GET +import retrofit2.http.POST import retrofit2.http.Path interface PostService { @@ -14,6 +14,7 @@ interface PostService { @Path("userId") userId: Int, @Path("postId") postId: Int ): BaseResponse + @POST("/api/v1/post/scoop") suspend fun postScoopPost( @Body postScoopRequestDto: PostScoopRequestDto diff --git a/app/src/main/java/com/spoony/spoony/domain/repository/PostRepository.kt b/app/src/main/java/com/spoony/spoony/domain/repository/PostRepository.kt index 7b4c24df..f2783aba 100644 --- a/app/src/main/java/com/spoony/spoony/domain/repository/PostRepository.kt +++ b/app/src/main/java/com/spoony/spoony/domain/repository/PostRepository.kt @@ -1,12 +1,11 @@ package com.spoony.spoony.domain.repository -import com.spoony.spoony.data.dto.base.BaseResponse import com.spoony.spoony.domain.entity.PostEntity interface PostRepository { suspend fun getPost(postId: Int, userId: Int): Result - suspend fun postScoopPost(postId: Int, userId: Int): Result> + suspend fun postScoopPost(postId: Int, userId: Int): Result suspend fun postAddMap(postId: Int, userId: Int): Result diff --git a/app/src/main/java/com/spoony/spoony/presentation/placeDetail/PlaceDetailViewModel.kt b/app/src/main/java/com/spoony/spoony/presentation/placeDetail/PlaceDetailViewModel.kt index 399d8f57..61ddcd17 100644 --- a/app/src/main/java/com/spoony/spoony/presentation/placeDetail/PlaceDetailViewModel.kt +++ b/app/src/main/java/com/spoony/spoony/presentation/placeDetail/PlaceDetailViewModel.kt @@ -61,24 +61,17 @@ class PlaceDetailViewModel @Inject constructor( fun useSpoon(postId: Int, userId: Int) { viewModelScope.launch { postRepository.postScoopPost(postId = postId, userId = userId) - .onSuccess { response -> - when (response.success) { - true -> { - (_state.value.postEntity as? UiState.Success)?.data?.let { currentPostEntity -> - with(currentPostEntity) { - _state.update { - it.copy( - postEntity = UiState.Success( - copy(isScooped = true) - ) - ) - } - } + .onSuccess { + (_state.value.postEntity as? UiState.Success)?.data?.let { currentPostEntity -> + with(currentPostEntity) { + _state.update { + it.copy( + postEntity = UiState.Success( + copy(isScooped = true) + ) + ) } } - false -> { - // 통신에 성공했지만 떠먹기에 실패했을 경우 - } } } .onFailure { From 607533279baea134eaba9ef48265eadebb0f42ca Mon Sep 17 00:00:00 2001 From: roel Date: Thu, 23 Jan 2025 05:12:00 +0900 Subject: [PATCH 06/10] =?UTF-8?q?[FEAT/#120]=20=EC=BD=94=EB=93=9C=EB=A6=AC?= =?UTF-8?q?=EB=B7=B0=20=EC=88=98=EC=A0=95=EC=82=AC=ED=95=AD=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/placeDetail/PlaceDetailViewModel.kt | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/spoony/spoony/presentation/placeDetail/PlaceDetailViewModel.kt b/app/src/main/java/com/spoony/spoony/presentation/placeDetail/PlaceDetailViewModel.kt index 61ddcd17..018c752c 100644 --- a/app/src/main/java/com/spoony/spoony/presentation/placeDetail/PlaceDetailViewModel.kt +++ b/app/src/main/java/com/spoony/spoony/presentation/placeDetail/PlaceDetailViewModel.kt @@ -75,7 +75,17 @@ class PlaceDetailViewModel @Inject constructor( } } .onFailure { - // 통신에 실패 했을 경우 + (_state.value.postEntity as? UiState.Success)?.data?.let { currentPostEntity -> + with(currentPostEntity) { + _state.update { + it.copy( + postEntity = UiState.Success( + copy(isScooped = false) + ) + ) + } + } + } } } } From bf12e519348179a1760a937a88061b8ef3018e14 Mon Sep 17 00:00:00 2001 From: roel Date: Thu, 23 Jan 2025 06:45:39 +0900 Subject: [PATCH 07/10] =?UTF-8?q?[FEAT/#120]=20postEntity=20->=20postModel?= =?UTF-8?q?=20=EB=A1=9C=20=EB=B6=84=EB=A6=AC=20=ED=9B=84=20isScooped,=20is?= =?UTF-8?q?AddMap,=20addMapCount=20state=20=EB=A1=9C=20=EA=B4=80=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../placeDetail/PlaceDetailRoute.kt | 14 +-- .../placeDetail/PlaceDetailState.kt | 7 +- .../placeDetail/PlaceDetailViewModel.kt | 85 ++++++------------- .../placeDetail/model/PostModel.kt | 31 +++++++ 4 files changed, 70 insertions(+), 67 deletions(-) create mode 100644 app/src/main/java/com/spoony/spoony/presentation/placeDetail/model/PostModel.kt diff --git a/app/src/main/java/com/spoony/spoony/presentation/placeDetail/PlaceDetailRoute.kt b/app/src/main/java/com/spoony/spoony/presentation/placeDetail/PlaceDetailRoute.kt index 42444a2f..b7cf355f 100644 --- a/app/src/main/java/com/spoony/spoony/presentation/placeDetail/PlaceDetailRoute.kt +++ b/app/src/main/java/com/spoony/spoony/presentation/placeDetail/PlaceDetailRoute.kt @@ -44,7 +44,6 @@ import com.spoony.spoony.core.state.UiState import com.spoony.spoony.core.util.extension.hexToColor import com.spoony.spoony.core.util.extension.toValidHexColor import com.spoony.spoony.domain.entity.CategoryEntity -import com.spoony.spoony.domain.entity.PostEntity import com.spoony.spoony.domain.entity.UserEntity import com.spoony.spoony.presentation.main.SHOW_SNACKBAR_TIMEMILLIS import com.spoony.spoony.presentation.placeDetail.component.IconDropdownMenu @@ -53,6 +52,7 @@ import com.spoony.spoony.presentation.placeDetail.component.PlaceDetailImageLazy import com.spoony.spoony.presentation.placeDetail.component.ScoopDialog import com.spoony.spoony.presentation.placeDetail.component.StoreInfo import com.spoony.spoony.presentation.placeDetail.component.UserProfileInfo +import com.spoony.spoony.presentation.placeDetail.model.PostModel import com.spoony.spoony.presentation.placeDetail.type.DropdownOption import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.toImmutableList @@ -128,12 +128,12 @@ fun PlaceDetailRoute( ) } - when (state.postEntity) { + when (state.postModel) { is UiState.Empty -> {} is UiState.Loading -> {} is UiState.Failure -> {} is UiState.Success -> { - with(state.postEntity as UiState.Success) { + with(state.postModel as UiState.Success) { Scaffold( snackbarHost = { SnackbarHost(hostState = snackBarHostState) { snackbarData -> @@ -151,9 +151,9 @@ fun PlaceDetailRoute( PlaceDetailBottomBar( modifier = Modifier .navigationBarsPadding(), - addMapCount = data.addMapCount, - isScooped = data.isScooped, - isAddMap = data.isAddMap, + addMapCount = state.addMapCount, + isScooped = state.isScooped, + isAddMap = state.isAddMap, onScoopButtonClick = { scoopDialogVisibility = true }, @@ -183,7 +183,7 @@ fun PlaceDetailRoute( date = data.date, placeAddress = data.placeAddress, placeName = data.placeName, - isScooped = data.isScooped, + isScooped = state.isScooped, dropdownMenuList = state.dropDownMenuList, onReportButtonClick = navigateToReport ) diff --git a/app/src/main/java/com/spoony/spoony/presentation/placeDetail/PlaceDetailState.kt b/app/src/main/java/com/spoony/spoony/presentation/placeDetail/PlaceDetailState.kt index 6c506694..f14ae862 100644 --- a/app/src/main/java/com/spoony/spoony/presentation/placeDetail/PlaceDetailState.kt +++ b/app/src/main/java/com/spoony/spoony/presentation/placeDetail/PlaceDetailState.kt @@ -1,15 +1,18 @@ package com.spoony.spoony.presentation.placeDetail import com.spoony.spoony.core.state.UiState -import com.spoony.spoony.domain.entity.PostEntity import com.spoony.spoony.domain.entity.UserEntity +import com.spoony.spoony.presentation.placeDetail.model.PostModel import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.persistentListOf data class PlaceDetailState( val postId: UiState = UiState.Loading, val userId: UiState = UiState.Loading, - val postEntity: UiState = UiState.Loading, + val isScooped: Boolean = false, + val isAddMap: Boolean = false, + val addMapCount: Int = 0, + val postModel: UiState = UiState.Loading, val userEntity: UiState = UiState.Loading, val spoonAmountEntity: UiState = UiState.Loading, val dropDownMenuList: ImmutableList = persistentListOf("신고하기") diff --git a/app/src/main/java/com/spoony/spoony/presentation/placeDetail/PlaceDetailViewModel.kt b/app/src/main/java/com/spoony/spoony/presentation/placeDetail/PlaceDetailViewModel.kt index 018c752c..8bf72c11 100644 --- a/app/src/main/java/com/spoony/spoony/presentation/placeDetail/PlaceDetailViewModel.kt +++ b/app/src/main/java/com/spoony/spoony/presentation/placeDetail/PlaceDetailViewModel.kt @@ -6,6 +6,7 @@ import androidx.lifecycle.viewModelScope import androidx.navigation.toRoute import com.spoony.spoony.core.state.UiState import com.spoony.spoony.domain.repository.PostRepository +import com.spoony.spoony.presentation.placeDetail.model.toModel import com.spoony.spoony.presentation.placeDetail.navigation.PlaceDetail import dagger.hilt.android.lifecycle.HiltViewModel import javax.inject.Inject @@ -15,6 +16,7 @@ import kotlinx.coroutines.flow.SharedFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch +import timber.log.Timber @HiltViewModel class PlaceDetailViewModel @Inject constructor( @@ -38,20 +40,25 @@ class PlaceDetailViewModel @Inject constructor( getPost(postArgs.postId, postArgs.userId) } - fun getPost(postId: Int, userId: Int) { + private fun getPost(postId: Int, userId: Int) { viewModelScope.launch { postRepository.getPost(postId = postId, userId = userId) .onSuccess { response -> _state.update { it.copy( - postEntity = UiState.Success(response) + postModel = UiState.Success( + response.toModel() + ), + isScooped = response.isScooped, + isAddMap = response.isAddMap, + addMapCount = response.addMapCount ) } } .onFailure { _state.update { it.copy( - postEntity = UiState.Failure("게시물 조회 실패") + postModel = UiState.Failure("게시물 조회 실패") ) } } @@ -62,31 +69,13 @@ class PlaceDetailViewModel @Inject constructor( viewModelScope.launch { postRepository.postScoopPost(postId = postId, userId = userId) .onSuccess { - (_state.value.postEntity as? UiState.Success)?.data?.let { currentPostEntity -> - with(currentPostEntity) { - _state.update { - it.copy( - postEntity = UiState.Success( - copy(isScooped = true) - ) - ) - } - } - } - } - .onFailure { - (_state.value.postEntity as? UiState.Success)?.data?.let { currentPostEntity -> - with(currentPostEntity) { - _state.update { - it.copy( - postEntity = UiState.Success( - copy(isScooped = false) - ) - ) - } - } + _state.update { + it.copy( + isScooped = true + ) } } + .onFailure(Timber::e) } } @@ -95,24 +84,14 @@ class PlaceDetailViewModel @Inject constructor( postRepository.postAddMap(userId = userId, postId = postId) .onSuccess { response -> _sideEffect.emit(PlaceDetailSideEffect.ShowSnackbar("내 지도에 추가되었어요.")) - (_state.value.postEntity as? UiState.Success)?.data?.let { currentPostEntity -> - with(currentPostEntity) { - _state.update { - it.copy( - postEntity = UiState.Success( - copy( - isAddMap = true, - addMapCount = currentPostEntity.addMapCount + 1 - ) - ) - ) - } - } + _state.update { + it.copy( + isAddMap = true, + addMapCount = it.addMapCount + 1 + ) } } - .onFailure { - // 실패 했을 경우 - } + .onFailure(Timber::e) } } @@ -121,24 +100,14 @@ class PlaceDetailViewModel @Inject constructor( postRepository.deletePinMap(userId = userId, postId = postId) .onSuccess { response -> _sideEffect.emit(PlaceDetailSideEffect.ShowSnackbar("내 지도에서 삭제되었어요.")) - (_state.value.postEntity as? UiState.Success)?.data?.let { currentPostEntity -> - with(currentPostEntity) { - _state.update { - it.copy( - postEntity = UiState.Success( - copy( - isAddMap = false, - addMapCount = currentPostEntity.addMapCount - 1 - ) - ) - ) - } - } + _state.update { + it.copy( + isAddMap = false, + addMapCount = it.addMapCount - 1 + ) } } - .onFailure { - // 실패 했을 경우 - } + .onFailure(Timber::e) } } } diff --git a/app/src/main/java/com/spoony/spoony/presentation/placeDetail/model/PostModel.kt b/app/src/main/java/com/spoony/spoony/presentation/placeDetail/model/PostModel.kt new file mode 100644 index 00000000..79fc4ef3 --- /dev/null +++ b/app/src/main/java/com/spoony/spoony/presentation/placeDetail/model/PostModel.kt @@ -0,0 +1,31 @@ +package com.spoony.spoony.presentation.placeDetail.model + +import com.spoony.spoony.domain.entity.CategoryEntity +import com.spoony.spoony.domain.entity.PostEntity +import okhttp3.internal.toImmutableList + +data class PostModel( + val photoUrlList: List, + val title: String, + val date: String, + val menuList: List, + val description: String, + val placeName: String, + val placeAddress: String, + val latitude: Double, + val longitude: Double, + val category: CategoryEntity +) + +fun PostEntity.toModel(): PostModel = PostModel( + photoUrlList = this.photoUrlList.toImmutableList(), + title = this.title, + date = this.date, + menuList = this.menuList.toImmutableList(), + description = this.description, + placeName = this.placeName, + placeAddress = this.placeAddress, + latitude = this.latitude, + longitude = this.longitude, + category = this.category +) \ No newline at end of file From 37e98aa8138abe24454a25a5815d683781bcea11 Mon Sep 17 00:00:00 2001 From: roel Date: Thu, 23 Jan 2025 06:45:58 +0900 Subject: [PATCH 08/10] =?UTF-8?q?[FEAT/#120]=20ktLintFormat=20=EC=B2=98?= =?UTF-8?q?=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../spoony/spoony/presentation/placeDetail/model/PostModel.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/spoony/spoony/presentation/placeDetail/model/PostModel.kt b/app/src/main/java/com/spoony/spoony/presentation/placeDetail/model/PostModel.kt index 79fc4ef3..f75692ae 100644 --- a/app/src/main/java/com/spoony/spoony/presentation/placeDetail/model/PostModel.kt +++ b/app/src/main/java/com/spoony/spoony/presentation/placeDetail/model/PostModel.kt @@ -28,4 +28,4 @@ fun PostEntity.toModel(): PostModel = PostModel( latitude = this.latitude, longitude = this.longitude, category = this.category -) \ No newline at end of file +) From 2463c9c2820e1febfa5e77e6163154f540ac608a Mon Sep 17 00:00:00 2001 From: roel Date: Thu, 23 Jan 2025 07:07:31 +0900 Subject: [PATCH 09/10] =?UTF-8?q?[FEAT/#120]=20=EC=9E=98=EB=AA=BB=EB=90=9C?= =?UTF-8?q?=20toImmutableList=20=EC=9E=84=ED=8F=AC=ED=8A=B8=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../spoony/spoony/presentation/placeDetail/model/PostModel.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/spoony/spoony/presentation/placeDetail/model/PostModel.kt b/app/src/main/java/com/spoony/spoony/presentation/placeDetail/model/PostModel.kt index f75692ae..aa488f98 100644 --- a/app/src/main/java/com/spoony/spoony/presentation/placeDetail/model/PostModel.kt +++ b/app/src/main/java/com/spoony/spoony/presentation/placeDetail/model/PostModel.kt @@ -2,7 +2,7 @@ package com.spoony.spoony.presentation.placeDetail.model import com.spoony.spoony.domain.entity.CategoryEntity import com.spoony.spoony.domain.entity.PostEntity -import okhttp3.internal.toImmutableList +import kotlinx.collections.immutable.toImmutableList data class PostModel( val photoUrlList: List, From a392a7bed999742929ac5a72afd26a8f7bfd7060 Mon Sep 17 00:00:00 2001 From: roel Date: Thu, 23 Jan 2025 07:09:14 +0900 Subject: [PATCH 10/10] =?UTF-8?q?[FEAT/#120]=20List=20->=20ImmutableList?= =?UTF-8?q?=20=EB=A1=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../spoony/presentation/placeDetail/model/PostModel.kt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/spoony/spoony/presentation/placeDetail/model/PostModel.kt b/app/src/main/java/com/spoony/spoony/presentation/placeDetail/model/PostModel.kt index aa488f98..0e9c590a 100644 --- a/app/src/main/java/com/spoony/spoony/presentation/placeDetail/model/PostModel.kt +++ b/app/src/main/java/com/spoony/spoony/presentation/placeDetail/model/PostModel.kt @@ -2,13 +2,14 @@ package com.spoony.spoony.presentation.placeDetail.model import com.spoony.spoony.domain.entity.CategoryEntity import com.spoony.spoony.domain.entity.PostEntity +import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.toImmutableList data class PostModel( - val photoUrlList: List, + val photoUrlList: ImmutableList, val title: String, val date: String, - val menuList: List, + val menuList: ImmutableList, val description: String, val placeName: String, val placeAddress: String,