From 977d496398e13b69c6233afdeeb0bd7d64acefdb Mon Sep 17 00:00:00 2001 From: roel Date: Thu, 23 Jan 2025 05:51:16 +0900 Subject: [PATCH 1/5] =?UTF-8?q?[FEAT/#128]=20=EA=B2=8C=EC=8B=9C=EB=AC=BC?= =?UTF-8?q?=20=EC=A7=80=EB=8F=84=20=EB=A6=AC=EC=8A=A4=ED=8A=B8=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=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 | 1 + .../PostRemoteDataSourceImpl.kt | 8 +++++++- .../data/dto/request/PostAddMapRequestDto.kt | 12 +++++++++++ .../data/repositoryimpl/PostRepositoryImpl.kt | 6 +++--- .../spoony/spoony/data/service/PostService.kt | 8 ++++++++ .../placeDetail/PlaceDetailViewModel.kt | 20 +++++++++++++++---- 6 files changed, 47 insertions(+), 8 deletions(-) create mode 100644 app/src/main/java/com/spoony/spoony/data/dto/request/PostAddMapRequestDto.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 index 2494ce2f..fc1114a9 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 @@ -5,4 +5,5 @@ import com.spoony.spoony.data.dto.response.GetPostResponseDto interface PostRemoteDataSource { suspend fun getPostData(postId: Int, userId: Int): BaseResponse + suspend fun postAddMapData(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 96f0adcc..e8bcbc10 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,6 +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.PostAddMapRequestDto import com.spoony.spoony.data.dto.response.GetPostResponseDto import com.spoony.spoony.data.service.PostService import javax.inject.Inject @@ -9,5 +10,10 @@ import javax.inject.Inject class PostRemoteDataSourceImpl @Inject constructor( private val postService: PostService ) : PostRemoteDataSource { - 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 postAddMapData(postId: Int, userId: Int): BaseResponse = + postService.postAddMapPost( + PostAddMapRequestDto(postId = postId, userId = userId) + ) } diff --git a/app/src/main/java/com/spoony/spoony/data/dto/request/PostAddMapRequestDto.kt b/app/src/main/java/com/spoony/spoony/data/dto/request/PostAddMapRequestDto.kt new file mode 100644 index 00000000..01420e83 --- /dev/null +++ b/app/src/main/java/com/spoony/spoony/data/dto/request/PostAddMapRequestDto.kt @@ -0,0 +1,12 @@ +package com.spoony.spoony.data.dto.request + +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable +data class PostAddMapRequestDto( + @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 8adb9276..67fad819 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 @@ -20,9 +20,9 @@ class PostRepositoryImpl @Inject constructor( ) override suspend fun postAddMap(postId: Int, userId: Int): Result = - Result.success( - true - ) + runCatching { + postRemoteDataSource.postAddMapData(postId, userId).success + } override suspend fun deletePinMap(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 index 3f0e9def..f23696ed 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,8 +1,11 @@ package com.spoony.spoony.data.service import com.spoony.spoony.data.dto.base.BaseResponse +import com.spoony.spoony.data.dto.request.PostAddMapRequestDto 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 { @@ -11,4 +14,9 @@ interface PostService { @Path("userId") userId: Int, @Path("postId") postId: Int ): BaseResponse + + @POST("/api/v1/post/zzim") + suspend fun postAddMapPost( + @Body postAddMapRequestDto: PostAddMapRequestDto + ): 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 cb859ce8..60f25a41 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 @@ -80,10 +80,10 @@ class PlaceDetailViewModel @Inject constructor( } } - fun addMyMap(userId: Int, postId: Int) { + fun addMyMap(postId: Int, userId: Int) { viewModelScope.launch { - postRepository.postAddMap(userId = userId, postId = postId) - .onSuccess { response -> + postRepository.postAddMap(postId = postId, userId = userId) + .onSuccess { _sideEffect.emit(PlaceDetailSideEffect.ShowSnackbar("내 지도에 추가되었어요.")) (_state.value.postEntity as? UiState.Success)?.data?.let { currentPostEntity -> with(currentPostEntity) { @@ -101,7 +101,19 @@ class PlaceDetailViewModel @Inject constructor( } } .onFailure { - // 실패 했을 경우 + (_state.value.postEntity as? UiState.Success)?.data?.let { currentPostEntity -> + with(currentPostEntity) { + _state.update { + it.copy( + postEntity = UiState.Success( + copy( + isAddMap = false + ) + ) + ) + } + } + } } } } From d08e022067d6e91adcf9fb261edbe279fb9ea676 Mon Sep 17 00:00:00 2001 From: roel Date: Thu, 23 Jan 2025 07:23:18 +0900 Subject: [PATCH 2/5] =?UTF-8?q?[FEAT/#128]=20git=20merge=20conflict=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../data/datasourceimpl/PostRemoteDataSourceImpl.kt | 11 +++++------ 1 file changed, 5 insertions(+), 6 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 965b41ac..3baad104 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 @@ -13,15 +13,14 @@ class PostRemoteDataSourceImpl @Inject constructor( ) : PostRemoteDataSource { override suspend fun getPostData(postId: Int, userId: Int): BaseResponse = postService.getPost(userId = userId, postId = postId) - override suspend fun postAddMapData(postId: Int, userId: Int): BaseResponse = - postService.postAddMapPost( - PostAddMapRequestDto(postId = postId, userId = userId) - ) - 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) ) + + override suspend fun postAddMapData(postId: Int, userId: Int): BaseResponse = + postService.postAddMapPost( + PostAddMapRequestDto(postId = postId, userId = userId) + ) } From def678429279f1de878cd6aa8fb941296fd135f3 Mon Sep 17 00:00:00 2001 From: roel Date: Thu, 23 Jan 2025 07:24:51 +0900 Subject: [PATCH 3/5] =?UTF-8?q?[FEAT/#128]=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/data/datasourceimpl/PostRemoteDataSourceImpl.kt | 2 +- app/src/main/java/com/spoony/spoony/data/service/PostService.kt | 2 +- 2 files changed, 2 insertions(+), 2 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 3baad104..1968e584 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,8 +2,8 @@ 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.PostAddMapRequestDto +import com.spoony.spoony.data.dto.request.PostScoopRequestDto import com.spoony.spoony.data.dto.response.GetPostResponseDto import com.spoony.spoony.data.service.PostService import javax.inject.Inject 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 806c7f3e..37716346 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,8 +1,8 @@ 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.PostAddMapRequestDto +import com.spoony.spoony.data.dto.request.PostScoopRequestDto import com.spoony.spoony.data.dto.response.GetPostResponseDto import retrofit2.http.Body import retrofit2.http.GET From 8a64b417d307f57be490b6a2314e2001292ae2f3 Mon Sep 17 00:00:00 2001 From: roel Date: Thu, 23 Jan 2025 07:39:25 +0900 Subject: [PATCH 4/5] =?UTF-8?q?[FEAT/#130]=20=EC=A7=80=EB=8F=84=20?= =?UTF-8?q?=EB=A6=AC=EC=8A=A4=ED=8A=B8=EC=9D=98=20=ED=8A=B9=EC=A0=95=20?= =?UTF-8?q?=EB=A6=AC=EB=B7=B0=20=EC=82=AD=EC=A0=9C=20API=20=EC=97=B0?= =?UTF-8?q?=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../spoony/spoony/data/datasource/PostRemoteDataSource.kt | 1 + .../spoony/data/datasourceimpl/PostRemoteDataSourceImpl.kt | 6 ++++++ .../spoony/data/repositoryimpl/PostRepositoryImpl.kt | 6 +++--- .../java/com/spoony/spoony/data/service/PostService.kt | 7 +++++++ .../presentation/placeDetail/PlaceDetailViewModel.kt | 6 +++--- 5 files changed, 20 insertions(+), 6 deletions(-) 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 84313503..cde1b5b1 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 @@ -6,4 +6,5 @@ import com.spoony.spoony.data.dto.response.GetPostResponseDto interface PostRemoteDataSource { suspend fun postScoopPost(postId: Int, userId: Int): BaseResponse suspend fun getPostData(postId: Int, userId: Int): BaseResponse + suspend fun deletePinMap(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 f5123da9..01d1d89c 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 @@ -17,4 +17,10 @@ class PostRemoteDataSourceImpl @Inject constructor( postService.postScoopPost( PostScoopRequestDto(postId = postId, userId = userId) ) + + override suspend fun deletePinMap(postId: Int, userId: Int): BaseResponse = + postService.deletePinMap( + 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 6dccd03f..ac184899 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 @@ -25,7 +25,7 @@ class PostRepositoryImpl @Inject constructor( ) override suspend fun deletePinMap(postId: Int, userId: Int): Result = - Result.success( - true - ) + runCatching { + postRemoteDataSource.deletePinMap(postId = postId, userId = userId).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 index 83fcbdd4..ddbefcdc 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 @@ -4,6 +4,7 @@ import com.spoony.spoony.data.dto.base.BaseResponse import com.spoony.spoony.data.dto.request.PostScoopRequestDto import com.spoony.spoony.data.dto.response.GetPostResponseDto import retrofit2.http.Body +import retrofit2.http.DELETE import retrofit2.http.GET import retrofit2.http.POST import retrofit2.http.Path @@ -19,4 +20,10 @@ interface PostService { suspend fun postScoopPost( @Body postScoopRequestDto: PostScoopRequestDto ): BaseResponse + + @DELETE("/api/v1/post/zzim/{userId}/{postId}") + suspend fun deletePinMap( + @Path("userId") userId: Int, + @Path("postId") postId: Int + ): 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 8bf72c11..3fdea450 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 @@ -95,10 +95,10 @@ class PlaceDetailViewModel @Inject constructor( } } - fun deletePinMap(userId: Int, postId: Int) { + fun deletePinMap(postId: Int, userId: Int) { viewModelScope.launch { - postRepository.deletePinMap(userId = userId, postId = postId) - .onSuccess { response -> + postRepository.deletePinMap(postId = postId, userId = userId) + .onSuccess { _sideEffect.emit(PlaceDetailSideEffect.ShowSnackbar("내 지도에서 삭제되었어요.")) _state.update { it.copy( From 55093432bc96449ec2fd6e94d5595fc290c35860 Mon Sep 17 00:00:00 2001 From: roel Date: Thu, 23 Jan 2025 09:22:25 +0900 Subject: [PATCH 5/5] =?UTF-8?q?[FEAT/#128]=20PostAddMapRequestDto=20->=20A?= =?UTF-8?q?ddMapRequestDto=20=EB=84=A4=EC=9D=B4=EB=B0=8D=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../spoony/data/datasourceimpl/PostRemoteDataSourceImpl.kt | 4 ++-- .../request/{PostAddMapRequestDto.kt => AddMapRequestDto.kt} | 2 +- .../main/java/com/spoony/spoony/data/service/PostService.kt | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) rename app/src/main/java/com/spoony/spoony/data/dto/request/{PostAddMapRequestDto.kt => AddMapRequestDto.kt} (87%) 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 1968e584..b6c89da9 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.PostAddMapRequestDto +import com.spoony.spoony.data.dto.request.AddMapRequestDto import com.spoony.spoony.data.dto.request.PostScoopRequestDto import com.spoony.spoony.data.dto.response.GetPostResponseDto import com.spoony.spoony.data.service.PostService @@ -21,6 +21,6 @@ class PostRemoteDataSourceImpl @Inject constructor( override suspend fun postAddMapData(postId: Int, userId: Int): BaseResponse = postService.postAddMapPost( - PostAddMapRequestDto(postId = postId, userId = userId) + AddMapRequestDto(postId = postId, userId = userId) ) } diff --git a/app/src/main/java/com/spoony/spoony/data/dto/request/PostAddMapRequestDto.kt b/app/src/main/java/com/spoony/spoony/data/dto/request/AddMapRequestDto.kt similarity index 87% rename from app/src/main/java/com/spoony/spoony/data/dto/request/PostAddMapRequestDto.kt rename to app/src/main/java/com/spoony/spoony/data/dto/request/AddMapRequestDto.kt index 01420e83..36674781 100644 --- a/app/src/main/java/com/spoony/spoony/data/dto/request/PostAddMapRequestDto.kt +++ b/app/src/main/java/com/spoony/spoony/data/dto/request/AddMapRequestDto.kt @@ -4,7 +4,7 @@ import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable @Serializable -data class PostAddMapRequestDto( +data class AddMapRequestDto( @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 37716346..53252812 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,7 +1,7 @@ package com.spoony.spoony.data.service import com.spoony.spoony.data.dto.base.BaseResponse -import com.spoony.spoony.data.dto.request.PostAddMapRequestDto +import com.spoony.spoony.data.dto.request.AddMapRequestDto import com.spoony.spoony.data.dto.request.PostScoopRequestDto import com.spoony.spoony.data.dto.response.GetPostResponseDto import retrofit2.http.Body @@ -18,7 +18,7 @@ interface PostService { @POST("/api/v1/post/zzim") suspend fun postAddMapPost( - @Body postAddMapRequestDto: PostAddMapRequestDto + @Body addMapRequestDto: AddMapRequestDto ): BaseResponse @POST("/api/v1/post/scoop")