From f3ec0f1ce836307b854052d01fbdb1b002dfdf76 Mon Sep 17 00:00:00 2001 From: MinJae Han Date: Wed, 22 Jan 2025 23:39:38 +0900 Subject: [PATCH 01/28] =?UTF-8?q?[FEAT/#117]=20=EC=9E=A5=EC=86=8C=20?= =?UTF-8?q?=EA=B2=80=EC=83=89=20API=20=EC=84=B8=ED=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../spoony/data/datasource/PlaceDataSouce.kt | 8 +++ .../datasourceimpl/PlaceDataSourceImpl.kt | 17 ++++++ .../spoony/spoony/data/di/DataSourceModule.kt | 12 +++- .../spoony/spoony/data/di/ServiceModule.kt | 6 ++ .../data/dto/response/BaseResponseDTO.kt | 20 +++++++ .../data/dto/response/PlaceResponseDTO.kt | 24 ++++++++ .../spoony/spoony/data/mapper/PlaceMapper.kt | 23 ++++++++ .../repositoryimpl/RegisterRepositoryImpl.kt | 55 +++++-------------- .../spoony/data/service/PlaceService.kt | 14 +++++ .../spoony/domain/entity/PlaceEntity.kt | 13 +++++ 10 files changed, 151 insertions(+), 41 deletions(-) create mode 100644 app/src/main/java/com/spoony/spoony/data/datasource/PlaceDataSouce.kt create mode 100644 app/src/main/java/com/spoony/spoony/data/datasourceimpl/PlaceDataSourceImpl.kt create mode 100644 app/src/main/java/com/spoony/spoony/data/dto/response/BaseResponseDTO.kt create mode 100644 app/src/main/java/com/spoony/spoony/data/dto/response/PlaceResponseDTO.kt create mode 100644 app/src/main/java/com/spoony/spoony/data/mapper/PlaceMapper.kt create mode 100644 app/src/main/java/com/spoony/spoony/data/service/PlaceService.kt create mode 100644 app/src/main/java/com/spoony/spoony/domain/entity/PlaceEntity.kt diff --git a/app/src/main/java/com/spoony/spoony/data/datasource/PlaceDataSouce.kt b/app/src/main/java/com/spoony/spoony/data/datasource/PlaceDataSouce.kt new file mode 100644 index 00000000..219c002c --- /dev/null +++ b/app/src/main/java/com/spoony/spoony/data/datasource/PlaceDataSouce.kt @@ -0,0 +1,8 @@ +package com.spoony.spoony.data.datasource + +import com.spoony.spoony.data.dto.response.BaseResponse +import com.spoony.spoony.data.dto.response.SearchPlaceData + +interface PlaceDataSource { + suspend fun searchPlace(query: String, display: Int): BaseResponse +} diff --git a/app/src/main/java/com/spoony/spoony/data/datasourceimpl/PlaceDataSourceImpl.kt b/app/src/main/java/com/spoony/spoony/data/datasourceimpl/PlaceDataSourceImpl.kt new file mode 100644 index 00000000..be29cb5f --- /dev/null +++ b/app/src/main/java/com/spoony/spoony/data/datasourceimpl/PlaceDataSourceImpl.kt @@ -0,0 +1,17 @@ +package com.spoony.spoony.data.datasourceimpl + +import com.spoony.spoony.data.datasource.PlaceDataSource +import com.spoony.spoony.data.dto.response.BaseResponse +import com.spoony.spoony.data.dto.response.SearchPlaceData +import com.spoony.spoony.data.service.PlaceService +import javax.inject.Inject + +class PlaceDataSourceImpl @Inject constructor( + private val placeService: PlaceService +) : PlaceDataSource { + override suspend fun searchPlace( + query: String, + display: Int + ): BaseResponse = + placeService.searchPlace(query, display) +} 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..9fed6b3d 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.PlaceDataSource import com.spoony.spoony.data.datasourceimpl.DummyRemoteDataSourceImpl +import com.spoony.spoony.data.datasourceimpl.PlaceDataSourceImpl import dagger.Binds import dagger.Module import dagger.hilt.InstallIn @@ -13,5 +15,13 @@ import javax.inject.Singleton abstract class DataSourceModule { @Binds @Singleton - abstract fun bindDummyDataSource(dummyRemoteDataSourceImpl: DummyRemoteDataSourceImpl): DummyRemoteDataSource + abstract fun bindDummyDataSource( + dummyRemoteDataSourceImpl: DummyRemoteDataSourceImpl + ): DummyRemoteDataSource + + @Binds + @Singleton + abstract fun bindPlaceDataSource( + placeDataSourceImpl: PlaceDataSourceImpl + ): PlaceDataSource } 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..4c07c8f7 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.PlaceService 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 providePlaceService(retrofit: Retrofit): PlaceService = + retrofit.create(PlaceService::class.java) } diff --git a/app/src/main/java/com/spoony/spoony/data/dto/response/BaseResponseDTO.kt b/app/src/main/java/com/spoony/spoony/data/dto/response/BaseResponseDTO.kt new file mode 100644 index 00000000..25814764 --- /dev/null +++ b/app/src/main/java/com/spoony/spoony/data/dto/response/BaseResponseDTO.kt @@ -0,0 +1,20 @@ +package com.spoony.spoony.data.dto.response + +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable +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 +) diff --git a/app/src/main/java/com/spoony/spoony/data/dto/response/PlaceResponseDTO.kt b/app/src/main/java/com/spoony/spoony/data/dto/response/PlaceResponseDTO.kt new file mode 100644 index 00000000..447ba6dd --- /dev/null +++ b/app/src/main/java/com/spoony/spoony/data/dto/response/PlaceResponseDTO.kt @@ -0,0 +1,24 @@ +package com.spoony.spoony.data.dto.response + +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable +data class SearchPlaceData( + @SerialName("placeList") + val placeList: List +) + +@Serializable +data class PlaceDto( + @SerialName("placeName") + val placeName: String, + @SerialName("placeAddress") + val placeAddress: String, + @SerialName("placeRoadAddress") + val placeRoadAddress: String, + @SerialName("latitude") + val latitude: Double, + @SerialName("longitude") + val longitude: Double +) diff --git a/app/src/main/java/com/spoony/spoony/data/mapper/PlaceMapper.kt b/app/src/main/java/com/spoony/spoony/data/mapper/PlaceMapper.kt new file mode 100644 index 00000000..e3d5a2df --- /dev/null +++ b/app/src/main/java/com/spoony/spoony/data/mapper/PlaceMapper.kt @@ -0,0 +1,23 @@ +package com.spoony.spoony.data.mapper + +import com.spoony.spoony.data.dto.response.PlaceDto +import com.spoony.spoony.domain.entity.PlaceEntity +import com.spoony.spoony.presentation.register.model.Place + +fun PlaceDto.toPlaceEntity(): PlaceEntity = + PlaceEntity( + placeName = placeName, + placeAddress = placeAddress, + placeRoadAddress = placeRoadAddress, + latitude = latitude, + longitude = longitude + ) + +fun PlaceEntity.toPlace(): Place = + Place( + placeName = placeName, + placeAddress = placeAddress, + placeRoadAddress = placeRoadAddress, + latitude = latitude, + longitude = longitude + ) diff --git a/app/src/main/java/com/spoony/spoony/data/repositoryimpl/RegisterRepositoryImpl.kt b/app/src/main/java/com/spoony/spoony/data/repositoryimpl/RegisterRepositoryImpl.kt index 0232c2be..72afcdd1 100644 --- a/app/src/main/java/com/spoony/spoony/data/repositoryimpl/RegisterRepositoryImpl.kt +++ b/app/src/main/java/com/spoony/spoony/data/repositoryimpl/RegisterRepositoryImpl.kt @@ -1,12 +1,17 @@ package com.spoony.spoony.data.repositoryimpl import android.net.Uri +import com.spoony.spoony.data.datasource.PlaceDataSource +import com.spoony.spoony.data.mapper.toPlace +import com.spoony.spoony.data.mapper.toPlaceEntity import com.spoony.spoony.domain.repository.RegisterRepository import com.spoony.spoony.presentation.register.model.Category import com.spoony.spoony.presentation.register.model.Place import javax.inject.Inject -class RegisterRepositoryImpl @Inject constructor() : RegisterRepository { +class RegisterRepositoryImpl @Inject constructor( + private val placeDataSource: PlaceDataSource +) : RegisterRepository { override suspend fun getCategories(): Result> = Result.success( listOf( Category( @@ -54,45 +59,15 @@ class RegisterRepositoryImpl @Inject constructor() : RegisterRepository { ) ) - override suspend fun searchPlace(query: String, display: Int): Result> = Result.success( - listOf( - Place( - placeName = "스타벅스 강남대로점", - placeAddress = "서울특별시 서초구 서초동 1305-7", - placeRoadAddress = "서울특별시 서초구 강남대로 369 (서초동)", - latitude = 37.4979, - longitude = 127.0276 - ), - Place( - placeName = "스타벅스 신촌역점", - placeAddress = "서울특별시 서대문구 창천동 30-1", - placeRoadAddress = "서울특별시 서대문구 연세로 10-1 (창천동)", - latitude = 37.5598, - longitude = 126.9423 - ), - Place( - placeName = "스타벅스 홍대역점", - placeAddress = "서울특별시 마포구 서교동 358-11", - placeRoadAddress = "서울특별시 마포구 양화로 166 (서교동)", - latitude = 37.5569, - longitude = 126.9237 - ), - Place( - placeName = "스타벅스 부산센텀시티점", - placeAddress = "부산광역시 해운대구 우동 1505", - placeRoadAddress = "부산광역시 해운대구 센텀남대로 35 (우동)", - latitude = 35.1698, - longitude = 129.1315 - ), - Place( - placeName = "스타벅스 대구동성로점", - placeAddress = "대구광역시 중구 동성로3가 11", - placeRoadAddress = "대구광역시 중구 동성로 55 (동성로3가)", - latitude = 35.8703, - longitude = 128.5978 - ) - ) - ) + override suspend fun searchPlace(query: String, display: Int): Result> = runCatching { + val response = placeDataSource.searchPlace(query, display) + if (!response.success || response.data == null) { + throw IllegalStateException(response.error?.message ?: "에러 발생") + } + response.data.placeList.map { placeDto -> + placeDto.toPlaceEntity().toPlace() + } + } override suspend fun checkDuplicatePlace( userId: Long, diff --git a/app/src/main/java/com/spoony/spoony/data/service/PlaceService.kt b/app/src/main/java/com/spoony/spoony/data/service/PlaceService.kt new file mode 100644 index 00000000..d3af0010 --- /dev/null +++ b/app/src/main/java/com/spoony/spoony/data/service/PlaceService.kt @@ -0,0 +1,14 @@ +package com.spoony.spoony.data.service + +import com.spoony.spoony.data.dto.response.BaseResponse +import com.spoony.spoony.data.dto.response.SearchPlaceData +import retrofit2.http.GET +import retrofit2.http.Query + +interface PlaceService { + @GET("api/v1/place/search") + suspend fun searchPlace( + @Query("query") query: String, + @Query("display") display: Int = 5 + ): BaseResponse +} diff --git a/app/src/main/java/com/spoony/spoony/domain/entity/PlaceEntity.kt b/app/src/main/java/com/spoony/spoony/domain/entity/PlaceEntity.kt new file mode 100644 index 00000000..9776d1b8 --- /dev/null +++ b/app/src/main/java/com/spoony/spoony/domain/entity/PlaceEntity.kt @@ -0,0 +1,13 @@ +package com.spoony.spoony.domain.entity + +data class PlaceEntity( + val placeName: String, + val placeAddress: String, + val placeRoadAddress: String, + val latitude: Double, + val longitude: Double +) + +data class PlaceSearchResultEntity( + val placeList: List +) From 1340a59a044f4723c2dec97c0a003c8eeb38372d Mon Sep 17 00:00:00 2001 From: MinJae Han Date: Wed, 22 Jan 2025 23:42:15 +0900 Subject: [PATCH 02/28] =?UTF-8?q?[FEAT/#117]=20=EC=9E=A5=EC=86=8C=20?= =?UTF-8?q?=EA=B2=80=EC=83=89=20API=20=EC=84=B8=ED=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/spoony/spoony/domain/entity/PlaceEntity.kt | 4 ---- 1 file changed, 4 deletions(-) diff --git a/app/src/main/java/com/spoony/spoony/domain/entity/PlaceEntity.kt b/app/src/main/java/com/spoony/spoony/domain/entity/PlaceEntity.kt index 9776d1b8..ea586f38 100644 --- a/app/src/main/java/com/spoony/spoony/domain/entity/PlaceEntity.kt +++ b/app/src/main/java/com/spoony/spoony/domain/entity/PlaceEntity.kt @@ -7,7 +7,3 @@ data class PlaceEntity( val latitude: Double, val longitude: Double ) - -data class PlaceSearchResultEntity( - val placeList: List -) From 5711f6a948e9e7c772f8b07ffa153d0a69647151 Mon Sep 17 00:00:00 2001 From: MinJae Han Date: Thu, 23 Jan 2025 00:03:45 +0900 Subject: [PATCH 03/28] =?UTF-8?q?[MOD/#117]=20=EB=A6=B0=ED=8A=B8=20?= =?UTF-8?q?=EC=98=A4=EB=A5=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../data/datasource/{PlaceDataSouce.kt => PlaceDataSource.kt} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename app/src/main/java/com/spoony/spoony/data/datasource/{PlaceDataSouce.kt => PlaceDataSource.kt} (100%) diff --git a/app/src/main/java/com/spoony/spoony/data/datasource/PlaceDataSouce.kt b/app/src/main/java/com/spoony/spoony/data/datasource/PlaceDataSource.kt similarity index 100% rename from app/src/main/java/com/spoony/spoony/data/datasource/PlaceDataSouce.kt rename to app/src/main/java/com/spoony/spoony/data/datasource/PlaceDataSource.kt From d327151b23fe66ce83d718cdcb5186ba1181e381 Mon Sep 17 00:00:00 2001 From: MinJae Han Date: Thu, 23 Jan 2025 00:05:24 +0900 Subject: [PATCH 04/28] =?UTF-8?q?[FEAT/#122]=20=EC=9E=A5=EC=86=8C=20?= =?UTF-8?q?=EC=A4=91=EB=B3=B5=20=EA=B2=80=EC=82=AC=20dto=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../data/dto/request/PlaceCheckRequestDTO.kt | 14 ++++++++++++++ .../data/dto/response/PlaceCheckResponseDTO.kt | 10 ++++++++++ 2 files changed, 24 insertions(+) create mode 100644 app/src/main/java/com/spoony/spoony/data/dto/request/PlaceCheckRequestDTO.kt create mode 100644 app/src/main/java/com/spoony/spoony/data/dto/response/PlaceCheckResponseDTO.kt diff --git a/app/src/main/java/com/spoony/spoony/data/dto/request/PlaceCheckRequestDTO.kt b/app/src/main/java/com/spoony/spoony/data/dto/request/PlaceCheckRequestDTO.kt new file mode 100644 index 00000000..9d73dd7f --- /dev/null +++ b/app/src/main/java/com/spoony/spoony/data/dto/request/PlaceCheckRequestDTO.kt @@ -0,0 +1,14 @@ +package com.spoony.spoony.data.dto.request + +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable +data class PlaceCheckRequestDTO( + @SerialName("userId") + val userId: Long, + @SerialName("latitude") + val latitude: Double, + @SerialName("longitude") + val longitude: Double +) diff --git a/app/src/main/java/com/spoony/spoony/data/dto/response/PlaceCheckResponseDTO.kt b/app/src/main/java/com/spoony/spoony/data/dto/response/PlaceCheckResponseDTO.kt new file mode 100644 index 00000000..0faf9fd1 --- /dev/null +++ b/app/src/main/java/com/spoony/spoony/data/dto/response/PlaceCheckResponseDTO.kt @@ -0,0 +1,10 @@ +package com.spoony.spoony.data.dto.response + +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable +data class PlaceCheckResponseDTO( + @SerialName("duplicate") + val duplicate: Boolean +) From 638a4be1527f54743b036ed040d734770a020531 Mon Sep 17 00:00:00 2001 From: roel Date: Thu, 23 Jan 2025 02:40:26 +0900 Subject: [PATCH 05/28] =?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 c15729f221842705125071b635dba9cc887e03a3 Mon Sep 17 00:00:00 2001 From: MinJae Han Date: Thu, 23 Jan 2025 02:50:08 +0900 Subject: [PATCH 06/28] =?UTF-8?q?[FEAT/#122]=20=EC=9E=A5=EC=86=8C=20?= =?UTF-8?q?=EC=A4=91=EB=B3=B5=20=EC=A1=B0=ED=9A=8C=20API=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../spoony/data/datasource/PlaceDataSource.kt | 8 ++++++++ .../data/datasourceimpl/PlaceDataSourceImpl.kt | 15 +++++++++++++++ .../data/repositoryimpl/RegisterRepositoryImpl.kt | 2 +- .../spoony/spoony/data/service/PlaceService.kt | 9 +++++++++ 4 files changed, 33 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/spoony/spoony/data/datasource/PlaceDataSource.kt b/app/src/main/java/com/spoony/spoony/data/datasource/PlaceDataSource.kt index 219c002c..9b16126a 100644 --- a/app/src/main/java/com/spoony/spoony/data/datasource/PlaceDataSource.kt +++ b/app/src/main/java/com/spoony/spoony/data/datasource/PlaceDataSource.kt @@ -1,8 +1,16 @@ package com.spoony.spoony.data.datasource import com.spoony.spoony.data.dto.response.BaseResponse +import com.spoony.spoony.data.dto.response.PlaceCheckResponseDTO import com.spoony.spoony.data.dto.response.SearchPlaceData interface PlaceDataSource { suspend fun searchPlace(query: String, display: Int): BaseResponse + + suspend fun checkDuplicatePlace( + userId: Long, + latitude: Double, + longitude: Double + ): BaseResponse } + diff --git a/app/src/main/java/com/spoony/spoony/data/datasourceimpl/PlaceDataSourceImpl.kt b/app/src/main/java/com/spoony/spoony/data/datasourceimpl/PlaceDataSourceImpl.kt index be29cb5f..4823dd96 100644 --- a/app/src/main/java/com/spoony/spoony/data/datasourceimpl/PlaceDataSourceImpl.kt +++ b/app/src/main/java/com/spoony/spoony/data/datasourceimpl/PlaceDataSourceImpl.kt @@ -1,7 +1,9 @@ package com.spoony.spoony.data.datasourceimpl import com.spoony.spoony.data.datasource.PlaceDataSource +import com.spoony.spoony.data.dto.request.PlaceCheckRequestDTO import com.spoony.spoony.data.dto.response.BaseResponse +import com.spoony.spoony.data.dto.response.PlaceCheckResponseDTO import com.spoony.spoony.data.dto.response.SearchPlaceData import com.spoony.spoony.data.service.PlaceService import javax.inject.Inject @@ -14,4 +16,17 @@ class PlaceDataSourceImpl @Inject constructor( display: Int ): BaseResponse = placeService.searchPlace(query, display) + + override suspend fun checkDuplicatePlace( + userId: Long, + latitude: Double, + longitude: Double + ): BaseResponse = + placeService.checkDuplicatePlace( + PlaceCheckRequestDTO( + userId = userId, + latitude = latitude, + longitude = longitude + ) + ) } diff --git a/app/src/main/java/com/spoony/spoony/data/repositoryimpl/RegisterRepositoryImpl.kt b/app/src/main/java/com/spoony/spoony/data/repositoryimpl/RegisterRepositoryImpl.kt index 72afcdd1..815a43c6 100644 --- a/app/src/main/java/com/spoony/spoony/data/repositoryimpl/RegisterRepositoryImpl.kt +++ b/app/src/main/java/com/spoony/spoony/data/repositoryimpl/RegisterRepositoryImpl.kt @@ -74,7 +74,7 @@ class RegisterRepositoryImpl @Inject constructor( latitude: Double, longitude: Double ): Result = runCatching { - latitude == 35.8703 && longitude == 128.5978 + placeDataSource.checkDuplicatePlace(userId, latitude, longitude).data!!.duplicate } override suspend fun registerPost( diff --git a/app/src/main/java/com/spoony/spoony/data/service/PlaceService.kt b/app/src/main/java/com/spoony/spoony/data/service/PlaceService.kt index d3af0010..3c2baf67 100644 --- a/app/src/main/java/com/spoony/spoony/data/service/PlaceService.kt +++ b/app/src/main/java/com/spoony/spoony/data/service/PlaceService.kt @@ -1,8 +1,12 @@ package com.spoony.spoony.data.service +import com.spoony.spoony.data.dto.request.PlaceCheckRequestDTO import com.spoony.spoony.data.dto.response.BaseResponse +import com.spoony.spoony.data.dto.response.PlaceCheckResponseDTO import com.spoony.spoony.data.dto.response.SearchPlaceData +import retrofit2.http.Body import retrofit2.http.GET +import retrofit2.http.POST import retrofit2.http.Query interface PlaceService { @@ -11,4 +15,9 @@ interface PlaceService { @Query("query") query: String, @Query("display") display: Int = 5 ): BaseResponse + + @POST("api/v1/place/check") + suspend fun checkDuplicatePlace( + @Body request: PlaceCheckRequestDTO + ): BaseResponse } From 4348c27775831348c06ef179b1802a97ff592abc Mon Sep 17 00:00:00 2001 From: MinJae Han Date: Thu, 23 Jan 2025 03:09:08 +0900 Subject: [PATCH 07/28] =?UTF-8?q?[MOD/#117]=20=EC=9E=A5=EC=86=8C=20?= =?UTF-8?q?=EA=B2=80=EC=83=89=20=EB=A6=AC=EB=B7=B0=20=EC=82=AC=ED=95=AD=20?= =?UTF-8?q?=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../spoony/data/datasource/PlaceDataSource.kt | 4 ++-- .../data/datasourceimpl/PlaceDataSourceImpl.kt | 8 ++++---- .../{BaseResponseDTO.kt => BaseResponse.kt} | 0 .../{PlaceResponseDTO.kt => PlaceResponseDto.kt} | 6 +++--- .../com/spoony/spoony/data/mapper/PlaceMapper.kt | 6 +++--- .../data/repositoryimpl/RegisterRepositoryImpl.kt | 13 ++++--------- .../com/spoony/spoony/data/service/PlaceService.kt | 6 +++--- 7 files changed, 19 insertions(+), 24 deletions(-) rename app/src/main/java/com/spoony/spoony/data/dto/response/{BaseResponseDTO.kt => BaseResponse.kt} (100%) rename app/src/main/java/com/spoony/spoony/data/dto/response/{PlaceResponseDTO.kt => PlaceResponseDto.kt} (82%) diff --git a/app/src/main/java/com/spoony/spoony/data/datasource/PlaceDataSource.kt b/app/src/main/java/com/spoony/spoony/data/datasource/PlaceDataSource.kt index 219c002c..26a57a97 100644 --- a/app/src/main/java/com/spoony/spoony/data/datasource/PlaceDataSource.kt +++ b/app/src/main/java/com/spoony/spoony/data/datasource/PlaceDataSource.kt @@ -1,8 +1,8 @@ package com.spoony.spoony.data.datasource import com.spoony.spoony.data.dto.response.BaseResponse -import com.spoony.spoony.data.dto.response.SearchPlaceData +import com.spoony.spoony.data.dto.response.SearchPlaceResponseDto interface PlaceDataSource { - suspend fun searchPlace(query: String, display: Int): BaseResponse + suspend fun getPlaces(query: String, display: Int): BaseResponse } diff --git a/app/src/main/java/com/spoony/spoony/data/datasourceimpl/PlaceDataSourceImpl.kt b/app/src/main/java/com/spoony/spoony/data/datasourceimpl/PlaceDataSourceImpl.kt index be29cb5f..614607ec 100644 --- a/app/src/main/java/com/spoony/spoony/data/datasourceimpl/PlaceDataSourceImpl.kt +++ b/app/src/main/java/com/spoony/spoony/data/datasourceimpl/PlaceDataSourceImpl.kt @@ -2,16 +2,16 @@ package com.spoony.spoony.data.datasourceimpl import com.spoony.spoony.data.datasource.PlaceDataSource import com.spoony.spoony.data.dto.response.BaseResponse -import com.spoony.spoony.data.dto.response.SearchPlaceData +import com.spoony.spoony.data.dto.response.SearchPlaceResponseDto import com.spoony.spoony.data.service.PlaceService import javax.inject.Inject class PlaceDataSourceImpl @Inject constructor( private val placeService: PlaceService ) : PlaceDataSource { - override suspend fun searchPlace( + override suspend fun getPlaces( query: String, display: Int - ): BaseResponse = - placeService.searchPlace(query, display) + ): BaseResponse = + placeService.getPlaces(query, display) } diff --git a/app/src/main/java/com/spoony/spoony/data/dto/response/BaseResponseDTO.kt b/app/src/main/java/com/spoony/spoony/data/dto/response/BaseResponse.kt similarity index 100% rename from app/src/main/java/com/spoony/spoony/data/dto/response/BaseResponseDTO.kt rename to app/src/main/java/com/spoony/spoony/data/dto/response/BaseResponse.kt diff --git a/app/src/main/java/com/spoony/spoony/data/dto/response/PlaceResponseDTO.kt b/app/src/main/java/com/spoony/spoony/data/dto/response/PlaceResponseDto.kt similarity index 82% rename from app/src/main/java/com/spoony/spoony/data/dto/response/PlaceResponseDTO.kt rename to app/src/main/java/com/spoony/spoony/data/dto/response/PlaceResponseDto.kt index 447ba6dd..7142dd28 100644 --- a/app/src/main/java/com/spoony/spoony/data/dto/response/PlaceResponseDTO.kt +++ b/app/src/main/java/com/spoony/spoony/data/dto/response/PlaceResponseDto.kt @@ -4,13 +4,13 @@ import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable @Serializable -data class SearchPlaceData( +data class SearchPlaceResponseDto( @SerialName("placeList") - val placeList: List + val placeList: List ) @Serializable -data class PlaceDto( +data class PlaceResponseDto( @SerialName("placeName") val placeName: String, @SerialName("placeAddress") diff --git a/app/src/main/java/com/spoony/spoony/data/mapper/PlaceMapper.kt b/app/src/main/java/com/spoony/spoony/data/mapper/PlaceMapper.kt index e3d5a2df..85a9ceeb 100644 --- a/app/src/main/java/com/spoony/spoony/data/mapper/PlaceMapper.kt +++ b/app/src/main/java/com/spoony/spoony/data/mapper/PlaceMapper.kt @@ -1,10 +1,10 @@ package com.spoony.spoony.data.mapper -import com.spoony.spoony.data.dto.response.PlaceDto +import com.spoony.spoony.data.dto.response.PlaceResponseDto import com.spoony.spoony.domain.entity.PlaceEntity import com.spoony.spoony.presentation.register.model.Place -fun PlaceDto.toPlaceEntity(): PlaceEntity = +fun PlaceResponseDto.toDomain(): PlaceEntity = PlaceEntity( placeName = placeName, placeAddress = placeAddress, @@ -13,7 +13,7 @@ fun PlaceDto.toPlaceEntity(): PlaceEntity = longitude = longitude ) -fun PlaceEntity.toPlace(): Place = +fun PlaceEntity.toPresentation(): Place = Place( placeName = placeName, placeAddress = placeAddress, diff --git a/app/src/main/java/com/spoony/spoony/data/repositoryimpl/RegisterRepositoryImpl.kt b/app/src/main/java/com/spoony/spoony/data/repositoryimpl/RegisterRepositoryImpl.kt index 72afcdd1..052cd641 100644 --- a/app/src/main/java/com/spoony/spoony/data/repositoryimpl/RegisterRepositoryImpl.kt +++ b/app/src/main/java/com/spoony/spoony/data/repositoryimpl/RegisterRepositoryImpl.kt @@ -2,8 +2,8 @@ package com.spoony.spoony.data.repositoryimpl import android.net.Uri import com.spoony.spoony.data.datasource.PlaceDataSource -import com.spoony.spoony.data.mapper.toPlace -import com.spoony.spoony.data.mapper.toPlaceEntity +import com.spoony.spoony.data.mapper.toDomain +import com.spoony.spoony.data.mapper.toPresentation import com.spoony.spoony.domain.repository.RegisterRepository import com.spoony.spoony.presentation.register.model.Category import com.spoony.spoony.presentation.register.model.Place @@ -60,13 +60,8 @@ class RegisterRepositoryImpl @Inject constructor( ) override suspend fun searchPlace(query: String, display: Int): Result> = runCatching { - val response = placeDataSource.searchPlace(query, display) - if (!response.success || response.data == null) { - throw IllegalStateException(response.error?.message ?: "에러 발생") - } - response.data.placeList.map { placeDto -> - placeDto.toPlaceEntity().toPlace() - } + placeDataSource.getPlaces(query, display).data!!.placeList + .map { it.toDomain().toPresentation() } } override suspend fun checkDuplicatePlace( diff --git a/app/src/main/java/com/spoony/spoony/data/service/PlaceService.kt b/app/src/main/java/com/spoony/spoony/data/service/PlaceService.kt index d3af0010..cf103dc1 100644 --- a/app/src/main/java/com/spoony/spoony/data/service/PlaceService.kt +++ b/app/src/main/java/com/spoony/spoony/data/service/PlaceService.kt @@ -1,14 +1,14 @@ package com.spoony.spoony.data.service import com.spoony.spoony.data.dto.response.BaseResponse -import com.spoony.spoony.data.dto.response.SearchPlaceData +import com.spoony.spoony.data.dto.response.SearchPlaceResponseDto import retrofit2.http.GET import retrofit2.http.Query interface PlaceService { @GET("api/v1/place/search") - suspend fun searchPlace( + suspend fun getPlaces( @Query("query") query: String, @Query("display") display: Int = 5 - ): BaseResponse + ): BaseResponse } From ffa302047a9472a8f26aa3249ec73a547d0a5f5c Mon Sep 17 00:00:00 2001 From: MinJae Han Date: Thu, 23 Jan 2025 03:30:59 +0900 Subject: [PATCH 08/28] =?UTF-8?q?[MOD/#122]=20=EC=8A=A4=ED=91=B8=EB=8B=88?= =?UTF-8?q?=20=EC=BD=94=EB=94=A9=20=EC=BB=A8=EB=B2=A4=EC=85=98=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/data/datasource/PlaceDataSource.kt | 7 ++----- .../data/datasourceimpl/PlaceDataSourceImpl.kt | 11 +++++------ ...ceCheckRequestDTO.kt => PlaceCheckRequestDto.kt} | 2 +- ...CheckResponseDTO.kt => PlaceCheckResponseDto.kt} | 2 +- .../com/spoony/spoony/data/service/PlaceService.kt | 13 ++++++------- 5 files changed, 15 insertions(+), 20 deletions(-) rename app/src/main/java/com/spoony/spoony/data/dto/request/{PlaceCheckRequestDTO.kt => PlaceCheckRequestDto.kt} (90%) rename app/src/main/java/com/spoony/spoony/data/dto/response/{PlaceCheckResponseDTO.kt => PlaceCheckResponseDto.kt} (85%) diff --git a/app/src/main/java/com/spoony/spoony/data/datasource/PlaceDataSource.kt b/app/src/main/java/com/spoony/spoony/data/datasource/PlaceDataSource.kt index 9e3dc26d..d6a3c13a 100644 --- a/app/src/main/java/com/spoony/spoony/data/datasource/PlaceDataSource.kt +++ b/app/src/main/java/com/spoony/spoony/data/datasource/PlaceDataSource.kt @@ -1,18 +1,15 @@ package com.spoony.spoony.data.datasource import com.spoony.spoony.data.dto.response.BaseResponse -import com.spoony.spoony.data.dto.response.PlaceCheckResponseDTO -import com.spoony.spoony.data.dto.response.SearchPlaceData +import com.spoony.spoony.data.dto.response.PlaceCheckResponseDto import com.spoony.spoony.data.dto.response.SearchPlaceResponseDto interface PlaceDataSource { suspend fun getPlaces(query: String, display: Int): BaseResponse - suspend fun searchPlace(query: String, display: Int): BaseResponse suspend fun checkDuplicatePlace( userId: Long, latitude: Double, longitude: Double - ): BaseResponse + ): BaseResponse } - diff --git a/app/src/main/java/com/spoony/spoony/data/datasourceimpl/PlaceDataSourceImpl.kt b/app/src/main/java/com/spoony/spoony/data/datasourceimpl/PlaceDataSourceImpl.kt index edf6cee9..0d9f8545 100644 --- a/app/src/main/java/com/spoony/spoony/data/datasourceimpl/PlaceDataSourceImpl.kt +++ b/app/src/main/java/com/spoony/spoony/data/datasourceimpl/PlaceDataSourceImpl.kt @@ -1,9 +1,9 @@ package com.spoony.spoony.data.datasourceimpl import com.spoony.spoony.data.datasource.PlaceDataSource -import com.spoony.spoony.data.dto.request.PlaceCheckRequestDTO +import com.spoony.spoony.data.dto.request.PlaceCheckRequestDto import com.spoony.spoony.data.dto.response.BaseResponse -import com.spoony.spoony.data.dto.response.PlaceCheckResponseDTO +import com.spoony.spoony.data.dto.response.PlaceCheckResponseDto import com.spoony.spoony.data.dto.response.SearchPlaceResponseDto import com.spoony.spoony.data.service.PlaceService import javax.inject.Inject @@ -21,13 +21,12 @@ class PlaceDataSourceImpl @Inject constructor( userId: Long, latitude: Double, longitude: Double - ): BaseResponse = - placeService.checkDuplicatePlace( - PlaceCheckRequestDTO( + ): BaseResponse = + placeService.postDuplicatePlace( + PlaceCheckRequestDto( userId = userId, latitude = latitude, longitude = longitude ) ) - } diff --git a/app/src/main/java/com/spoony/spoony/data/dto/request/PlaceCheckRequestDTO.kt b/app/src/main/java/com/spoony/spoony/data/dto/request/PlaceCheckRequestDto.kt similarity index 90% rename from app/src/main/java/com/spoony/spoony/data/dto/request/PlaceCheckRequestDTO.kt rename to app/src/main/java/com/spoony/spoony/data/dto/request/PlaceCheckRequestDto.kt index 9d73dd7f..228312d7 100644 --- a/app/src/main/java/com/spoony/spoony/data/dto/request/PlaceCheckRequestDTO.kt +++ b/app/src/main/java/com/spoony/spoony/data/dto/request/PlaceCheckRequestDto.kt @@ -4,7 +4,7 @@ import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable @Serializable -data class PlaceCheckRequestDTO( +data class PlaceCheckRequestDto( @SerialName("userId") val userId: Long, @SerialName("latitude") diff --git a/app/src/main/java/com/spoony/spoony/data/dto/response/PlaceCheckResponseDTO.kt b/app/src/main/java/com/spoony/spoony/data/dto/response/PlaceCheckResponseDto.kt similarity index 85% rename from app/src/main/java/com/spoony/spoony/data/dto/response/PlaceCheckResponseDTO.kt rename to app/src/main/java/com/spoony/spoony/data/dto/response/PlaceCheckResponseDto.kt index 0faf9fd1..eeb456bb 100644 --- a/app/src/main/java/com/spoony/spoony/data/dto/response/PlaceCheckResponseDTO.kt +++ b/app/src/main/java/com/spoony/spoony/data/dto/response/PlaceCheckResponseDto.kt @@ -4,7 +4,7 @@ import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable @Serializable -data class PlaceCheckResponseDTO( +data class PlaceCheckResponseDto( @SerialName("duplicate") val duplicate: Boolean ) diff --git a/app/src/main/java/com/spoony/spoony/data/service/PlaceService.kt b/app/src/main/java/com/spoony/spoony/data/service/PlaceService.kt index b7c6e395..9b57c8b1 100644 --- a/app/src/main/java/com/spoony/spoony/data/service/PlaceService.kt +++ b/app/src/main/java/com/spoony/spoony/data/service/PlaceService.kt @@ -1,11 +1,10 @@ package com.spoony.spoony.data.service -import com.spoony.spoony.data.dto.request.PlaceCheckRequestDTO +import com.spoony.spoony.data.dto.request.PlaceCheckRequestDto import com.spoony.spoony.data.dto.response.BaseResponse -import com.spoony.spoony.data.dto.response.PlaceCheckResponseDTO -import com.spoony.spoony.data.dto.response.SearchPlaceData -import retrofit2.http.Body +import com.spoony.spoony.data.dto.response.PlaceCheckResponseDto import com.spoony.spoony.data.dto.response.SearchPlaceResponseDto +import retrofit2.http.Body import retrofit2.http.GET import retrofit2.http.POST import retrofit2.http.Query @@ -18,7 +17,7 @@ interface PlaceService { ): BaseResponse @POST("api/v1/place/check") - suspend fun checkDuplicatePlace( - @Body request: PlaceCheckRequestDTO - ): BaseResponse + suspend fun postDuplicatePlace( + @Body request: PlaceCheckRequestDto + ): BaseResponse } From fc1eeebb9bf785fdf4d722a20d419c182e6461b5 Mon Sep 17 00:00:00 2001 From: roel Date: Thu, 23 Jan 2025 03:57:22 +0900 Subject: [PATCH 09/28] =?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 10/28] =?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 11/28] =?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 b4b54dacda0728b9d179a28e1e1689f3bf9001fa Mon Sep 17 00:00:00 2001 From: MinJae Han Date: Thu, 23 Jan 2025 04:25:41 +0900 Subject: [PATCH 12/28] =?UTF-8?q?[MOD/#117]=20=EC=BD=94=EB=93=9C=20?= =?UTF-8?q?=EB=A6=AC=EB=B7=B0=20=EC=88=98=EC=A0=95=20=EC=82=AC=ED=95=AD=20?= =?UTF-8?q?=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../spoony/spoony/data/mapper/PlaceMapper.kt | 10 ---- .../repositoryimpl/RegisterRepositoryImpl.kt | 53 +++++++++---------- .../domain/repository/RegisterRepository.kt | 11 ++-- .../register/RegisterViewModel.kt | 38 ++++++------- 4 files changed, 50 insertions(+), 62 deletions(-) diff --git a/app/src/main/java/com/spoony/spoony/data/mapper/PlaceMapper.kt b/app/src/main/java/com/spoony/spoony/data/mapper/PlaceMapper.kt index 85a9ceeb..c0e2e1be 100644 --- a/app/src/main/java/com/spoony/spoony/data/mapper/PlaceMapper.kt +++ b/app/src/main/java/com/spoony/spoony/data/mapper/PlaceMapper.kt @@ -2,7 +2,6 @@ package com.spoony.spoony.data.mapper import com.spoony.spoony.data.dto.response.PlaceResponseDto import com.spoony.spoony.domain.entity.PlaceEntity -import com.spoony.spoony.presentation.register.model.Place fun PlaceResponseDto.toDomain(): PlaceEntity = PlaceEntity( @@ -12,12 +11,3 @@ fun PlaceResponseDto.toDomain(): PlaceEntity = latitude = latitude, longitude = longitude ) - -fun PlaceEntity.toPresentation(): Place = - Place( - placeName = placeName, - placeAddress = placeAddress, - placeRoadAddress = placeRoadAddress, - latitude = latitude, - longitude = longitude - ) diff --git a/app/src/main/java/com/spoony/spoony/data/repositoryimpl/RegisterRepositoryImpl.kt b/app/src/main/java/com/spoony/spoony/data/repositoryimpl/RegisterRepositoryImpl.kt index 052cd641..85bc2689 100644 --- a/app/src/main/java/com/spoony/spoony/data/repositoryimpl/RegisterRepositoryImpl.kt +++ b/app/src/main/java/com/spoony/spoony/data/repositoryimpl/RegisterRepositoryImpl.kt @@ -3,65 +3,64 @@ package com.spoony.spoony.data.repositoryimpl import android.net.Uri import com.spoony.spoony.data.datasource.PlaceDataSource import com.spoony.spoony.data.mapper.toDomain -import com.spoony.spoony.data.mapper.toPresentation +import com.spoony.spoony.domain.entity.CategoryEntity +import com.spoony.spoony.domain.entity.PlaceEntity import com.spoony.spoony.domain.repository.RegisterRepository -import com.spoony.spoony.presentation.register.model.Category -import com.spoony.spoony.presentation.register.model.Place import javax.inject.Inject class RegisterRepositoryImpl @Inject constructor( private val placeDataSource: PlaceDataSource ) : RegisterRepository { - override suspend fun getCategories(): Result> = Result.success( + override suspend fun getCategories(): Result> = Result.success( listOf( - Category( + CategoryEntity( categoryId = 2, categoryName = "한식", - iconUrlSelected = "https://spoony-storage.s3.ap-northeast-2.amazonaws.com/category/icons/korean_white.png", - iconUrlNotSelected = "https://spoony-storage.s3.ap-northeast-2.amazonaws.com/category/icons/korean_black.png" + iconUrl = "https://spoony-storage.s3.ap-northeast-2.amazonaws.com/category/icons/korean_white.png", + unSelectedIconUrl = "https://spoony-storage.s3.ap-northeast-2.amazonaws.com/category/icons/korean_black.png" ), - Category( + CategoryEntity( categoryId = 3, categoryName = "일식", - iconUrlSelected = "https://spoony-storage.s3.ap-northeast-2.amazonaws.com/category/icons/korean_white.png", - iconUrlNotSelected = "https://spoony-storage.s3.ap-northeast-2.amazonaws.com/category/icons/korean_black.png" + iconUrl = "https://spoony-storage.s3.ap-northeast-2.amazonaws.com/category/icons/korean_white.png", + unSelectedIconUrl = "https://spoony-storage.s3.ap-northeast-2.amazonaws.com/category/icons/korean_black.png" ), - Category( + CategoryEntity( categoryId = 4, categoryName = "중식", - iconUrlSelected = "https://spoony-storage.s3.ap-northeast-2.amazonaws.com/category/icons/korean_white.png", - iconUrlNotSelected = "https://spoony-storage.s3.ap-northeast-2.amazonaws.com/category/icons/korean_black.png" + iconUrl = "https://spoony-storage.s3.ap-northeast-2.amazonaws.com/category/icons/korean_white.png", + unSelectedIconUrl = "https://spoony-storage.s3.ap-northeast-2.amazonaws.com/category/icons/korean_black.png" ), - Category( + CategoryEntity( categoryId = 5, categoryName = "양식", - iconUrlSelected = "https://spoony-storage.s3.ap-northeast-2.amazonaws.com/category/icons/korean_white.png", - iconUrlNotSelected = "https://spoony-storage.s3.ap-northeast-2.amazonaws.com/category/icons/korean_black.png" + iconUrl = "https://spoony-storage.s3.ap-northeast-2.amazonaws.com/category/icons/korean_white.png", + unSelectedIconUrl = "https://spoony-storage.s3.ap-northeast-2.amazonaws.com/category/icons/korean_black.png" ), - Category( + CategoryEntity( categoryId = 6, categoryName = "퓨전/세계요리", - iconUrlSelected = "https://spoony-storage.s3.ap-northeast-2.amazonaws.com/category/icons/korean_white.png", - iconUrlNotSelected = "https://spoony-storage.s3.ap-northeast-2.amazonaws.com/category/icons/korean_black.png" + iconUrl = "https://spoony-storage.s3.ap-northeast-2.amazonaws.com/category/icons/korean_white.png", + unSelectedIconUrl = "https://spoony-storage.s3.ap-northeast-2.amazonaws.com/category/icons/korean_black.png" ), - Category( + CategoryEntity( categoryId = 7, categoryName = "카페", - iconUrlSelected = "https://spoony-storage.s3.ap-northeast-2.amazonaws.com/category/icons/korean_white.png", - iconUrlNotSelected = "https://spoony-storage.s3.ap-northeast-2.amazonaws.com/category/icons/korean_black.png" + iconUrl = "https://spoony-storage.s3.ap-northeast-2.amazonaws.com/category/icons/korean_white.png", + unSelectedIconUrl = "https://spoony-storage.s3.ap-northeast-2.amazonaws.com/category/icons/korean_black.png" ), - Category( + CategoryEntity( categoryId = 8, categoryName = "주류", - iconUrlSelected = "https://spoony-storage.s3.ap-northeast-2.amazonaws.com/category/icons/korean_white.png", - iconUrlNotSelected = "https://spoony-storage.s3.ap-northeast-2.amazonaws.com/category/icons/korean_black.png" + iconUrl = "https://spoony-storage.s3.ap-northeast-2.amazonaws.com/category/icons/korean_white.png", + unSelectedIconUrl = "https://spoony-storage.s3.ap-northeast-2.amazonaws.com/category/icons/korean_black.png" ) ) ) - override suspend fun searchPlace(query: String, display: Int): Result> = runCatching { + override suspend fun searchPlace(query: String, display: Int): Result> = runCatching { placeDataSource.getPlaces(query, display).data!!.placeList - .map { it.toDomain().toPresentation() } + .map { it.toDomain() } } override suspend fun checkDuplicatePlace( diff --git a/app/src/main/java/com/spoony/spoony/domain/repository/RegisterRepository.kt b/app/src/main/java/com/spoony/spoony/domain/repository/RegisterRepository.kt index 83dfa42c..e267767b 100644 --- a/app/src/main/java/com/spoony/spoony/domain/repository/RegisterRepository.kt +++ b/app/src/main/java/com/spoony/spoony/domain/repository/RegisterRepository.kt @@ -1,20 +1,17 @@ package com.spoony.spoony.domain.repository import android.net.Uri -import com.spoony.spoony.presentation.register.model.Category -import com.spoony.spoony.presentation.register.model.Place +import com.spoony.spoony.domain.entity.CategoryEntity +import com.spoony.spoony.domain.entity.PlaceEntity interface RegisterRepository { - suspend fun getCategories(): Result> - - suspend fun searchPlace(query: String, display: Int = 5): Result> - + suspend fun getCategories(): Result> + suspend fun searchPlace(query: String, display: Int = 5): Result> suspend fun checkDuplicatePlace( userId: Long, latitude: Double, longitude: Double ): Result - suspend fun registerPost( userId: Long, title: String, diff --git a/app/src/main/java/com/spoony/spoony/presentation/register/RegisterViewModel.kt b/app/src/main/java/com/spoony/spoony/presentation/register/RegisterViewModel.kt index 1c7928c4..16a1d5d3 100644 --- a/app/src/main/java/com/spoony/spoony/presentation/register/RegisterViewModel.kt +++ b/app/src/main/java/com/spoony/spoony/presentation/register/RegisterViewModel.kt @@ -38,11 +38,17 @@ class RegisterViewModel @Inject constructor( private fun loadCategories() { viewModelScope.launch { repository.getCategories() - .onSuccess { categories -> + .onSuccess { categoryEntities -> + val categories = categoryEntities.map { entity -> + Category( + categoryId = entity.categoryId, + categoryName = entity.categoryName, + iconUrlSelected = entity.iconUrl, + iconUrlNotSelected = entity.unSelectedIconUrl ?: entity.iconUrl + ) + } _state.update { it.copy(categories = categories.toImmutableList()) } } - .onFailure { - } } } @@ -51,25 +57,21 @@ class RegisterViewModel @Inject constructor( } fun searchPlace(query: String) { - if (query.isBlank()) { - _state.update { it.copy(searchResults = persistentListOf()) } - return - } - viewModelScope.launch { - _state.update { it.copy(isSearching = true) } - repository.searchPlace(query) - .onSuccess { places -> - _state.update { - it.copy( - searchResults = places.toImmutableList(), - isSearching = false + .onSuccess { placeEntities -> + val places = placeEntities.map { entity -> + Place( + placeName = entity.placeName, + placeAddress = entity.placeAddress, + placeRoadAddress = entity.placeRoadAddress, + latitude = entity.latitude, + longitude = entity.longitude ) } - } - .onFailure { - _state.update { it.copy(isSearching = false) } + _state.update { + it.copy(searchResults = places.toImmutableList()) + } } } } From ead1ef589ed2cb302ab49aea66cc0773f78bc68e Mon Sep 17 00:00:00 2001 From: MinJae Han Date: Thu, 23 Jan 2025 04:39:57 +0900 Subject: [PATCH 13/28] =?UTF-8?q?[MOD/#117]=20=EB=84=A4=EC=9D=B4=EB=B0=8D?= =?UTF-8?q?=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/com/spoony/spoony/data/di/RepositoryModule.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/spoony/spoony/data/di/RepositoryModule.kt b/app/src/main/java/com/spoony/spoony/data/di/RepositoryModule.kt index b9b25745..3b453e98 100644 --- a/app/src/main/java/com/spoony/spoony/data/di/RepositoryModule.kt +++ b/app/src/main/java/com/spoony/spoony/data/di/RepositoryModule.kt @@ -37,5 +37,5 @@ abstract class RepositoryModule { @Binds @Singleton - abstract fun provideRegisterRepository(registerRepositoryImpl: RegisterRepositoryImpl): RegisterRepository + abstract fun bindRegisterRepository(registerRepositoryImpl: RegisterRepositoryImpl): RegisterRepository } From 074987625dda671956179e7f7844c24125872a50 Mon Sep 17 00:00:00 2001 From: MinJae Han Date: Thu, 23 Jan 2025 04:43:29 +0900 Subject: [PATCH 14/28] =?UTF-8?q?[MOD/#122]=20=EC=BB=A8=ED=94=8C=EB=A6=AD?= =?UTF-8?q?=20=EC=98=A4=EB=A5=98=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/com/spoony/spoony/data/di/ServiceModule.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 bb551240..32c01959 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 @@ -7,8 +7,8 @@ import dagger.Module import dagger.Provides import dagger.hilt.InstallIn import dagger.hilt.components.SingletonComponent -import retrofit2.Retrofit import javax.inject.Singleton +import retrofit2.Retrofit @Module @InstallIn(SingletonComponent::class) From 001c559354188a395efa0a612ff2ffd2e83d1669 Mon Sep 17 00:00:00 2001 From: MinJae Han Date: Thu, 23 Jan 2025 04:50:04 +0900 Subject: [PATCH 15/28] =?UTF-8?q?[MOD/#122]=20=EC=9D=98=EC=A1=B4=EC=84=B1?= =?UTF-8?q?=20=EB=AC=B8=EC=A0=9C=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../spoony/data/datasource/PlaceDataSource.kt | 2 +- .../datasourceimpl/PlaceDataSourceImpl.kt | 2 +- .../spoony/data/dto/response/BaseResponse.kt | 20 ------------------- .../spoony/data/service/PlaceService.kt | 2 +- 4 files changed, 3 insertions(+), 23 deletions(-) delete mode 100644 app/src/main/java/com/spoony/spoony/data/dto/response/BaseResponse.kt diff --git a/app/src/main/java/com/spoony/spoony/data/datasource/PlaceDataSource.kt b/app/src/main/java/com/spoony/spoony/data/datasource/PlaceDataSource.kt index d6a3c13a..a18e4cce 100644 --- a/app/src/main/java/com/spoony/spoony/data/datasource/PlaceDataSource.kt +++ b/app/src/main/java/com/spoony/spoony/data/datasource/PlaceDataSource.kt @@ -1,6 +1,6 @@ package com.spoony.spoony.data.datasource -import com.spoony.spoony.data.dto.response.BaseResponse +import com.spoony.spoony.data.dto.base.BaseResponse import com.spoony.spoony.data.dto.response.PlaceCheckResponseDto import com.spoony.spoony.data.dto.response.SearchPlaceResponseDto diff --git a/app/src/main/java/com/spoony/spoony/data/datasourceimpl/PlaceDataSourceImpl.kt b/app/src/main/java/com/spoony/spoony/data/datasourceimpl/PlaceDataSourceImpl.kt index 0d9f8545..507d5203 100644 --- a/app/src/main/java/com/spoony/spoony/data/datasourceimpl/PlaceDataSourceImpl.kt +++ b/app/src/main/java/com/spoony/spoony/data/datasourceimpl/PlaceDataSourceImpl.kt @@ -2,7 +2,7 @@ package com.spoony.spoony.data.datasourceimpl import com.spoony.spoony.data.datasource.PlaceDataSource import com.spoony.spoony.data.dto.request.PlaceCheckRequestDto -import com.spoony.spoony.data.dto.response.BaseResponse +import com.spoony.spoony.data.dto.base.BaseResponse import com.spoony.spoony.data.dto.response.PlaceCheckResponseDto import com.spoony.spoony.data.dto.response.SearchPlaceResponseDto import com.spoony.spoony.data.service.PlaceService diff --git a/app/src/main/java/com/spoony/spoony/data/dto/response/BaseResponse.kt b/app/src/main/java/com/spoony/spoony/data/dto/response/BaseResponse.kt deleted file mode 100644 index 25814764..00000000 --- a/app/src/main/java/com/spoony/spoony/data/dto/response/BaseResponse.kt +++ /dev/null @@ -1,20 +0,0 @@ -package com.spoony.spoony.data.dto.response - -import kotlinx.serialization.SerialName -import kotlinx.serialization.Serializable - -@Serializable -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 -) diff --git a/app/src/main/java/com/spoony/spoony/data/service/PlaceService.kt b/app/src/main/java/com/spoony/spoony/data/service/PlaceService.kt index 9b57c8b1..9f3a3124 100644 --- a/app/src/main/java/com/spoony/spoony/data/service/PlaceService.kt +++ b/app/src/main/java/com/spoony/spoony/data/service/PlaceService.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.PlaceCheckRequestDto -import com.spoony.spoony.data.dto.response.BaseResponse import com.spoony.spoony.data.dto.response.PlaceCheckResponseDto import com.spoony.spoony.data.dto.response.SearchPlaceResponseDto import retrofit2.http.Body From a89ecf7d08daaa161a13a0915947b98bab7e38dc Mon Sep 17 00:00:00 2001 From: MinJae Han Date: Thu, 23 Jan 2025 04:50:32 +0900 Subject: [PATCH 16/28] =?UTF-8?q?[MOD/#122]=20lint=20=EC=98=A4=EB=A5=98=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 --- .../spoony/spoony/data/datasourceimpl/PlaceDataSourceImpl.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/spoony/spoony/data/datasourceimpl/PlaceDataSourceImpl.kt b/app/src/main/java/com/spoony/spoony/data/datasourceimpl/PlaceDataSourceImpl.kt index 507d5203..53bbbdef 100644 --- a/app/src/main/java/com/spoony/spoony/data/datasourceimpl/PlaceDataSourceImpl.kt +++ b/app/src/main/java/com/spoony/spoony/data/datasourceimpl/PlaceDataSourceImpl.kt @@ -1,8 +1,8 @@ package com.spoony.spoony.data.datasourceimpl import com.spoony.spoony.data.datasource.PlaceDataSource -import com.spoony.spoony.data.dto.request.PlaceCheckRequestDto import com.spoony.spoony.data.dto.base.BaseResponse +import com.spoony.spoony.data.dto.request.PlaceCheckRequestDto import com.spoony.spoony.data.dto.response.PlaceCheckResponseDto import com.spoony.spoony.data.dto.response.SearchPlaceResponseDto import com.spoony.spoony.data.service.PlaceService From 63b98f104c1377094c6a553e9c4763463c71f282 Mon Sep 17 00:00:00 2001 From: MinJae Han Date: Thu, 23 Jan 2025 05:00:30 +0900 Subject: [PATCH 17/28] =?UTF-8?q?[MOD/#122]=20lint=20=EC=98=A4=EB=A5=98=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 --- .../spoony/spoony/presentation/register/RegisterViewModel.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/spoony/spoony/presentation/register/RegisterViewModel.kt b/app/src/main/java/com/spoony/spoony/presentation/register/RegisterViewModel.kt index 16a1d5d3..f8d0b5dc 100644 --- a/app/src/main/java/com/spoony/spoony/presentation/register/RegisterViewModel.kt +++ b/app/src/main/java/com/spoony/spoony/presentation/register/RegisterViewModel.kt @@ -83,7 +83,7 @@ class RegisterViewModel @Inject constructor( fun selectPlace(place: Place) { viewModelScope.launch { repository.checkDuplicatePlace( - userId = 1L, // TODO: 실제 사용자 ID로 변경 + userId = 1L, latitude = place.latitude, longitude = place.longitude ).onSuccess { isDuplicate -> From b355bfc641fd71eb6b4e4f9b23d04f4ee3c71eb8 Mon Sep 17 00:00:00 2001 From: roel Date: Thu, 23 Jan 2025 05:09:05 +0900 Subject: [PATCH 18/28] =?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 19/28] =?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 13b8f429585ed3973268e1ae637c58c76fd68021 Mon Sep 17 00:00:00 2001 From: MinJae Han Date: Thu, 23 Jan 2025 05:16:34 +0900 Subject: [PATCH 20/28] =?UTF-8?q?[MOD/#177]=20CI=20=EC=98=A4=EB=A5=98=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 --- app/src/main/java/com/spoony/spoony/data/di/ServiceModule.kt | 1 + 1 file changed, 1 insertion(+) 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 66e82001..32c01959 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 @@ -2,6 +2,7 @@ package com.spoony.spoony.data.di import com.spoony.spoony.data.service.DummyService import com.spoony.spoony.data.service.PlaceService +import com.spoony.spoony.data.service.PostService import dagger.Module import dagger.Provides import dagger.hilt.InstallIn From 4921eae5c1d8df745e3612a52ccd29993f649951 Mon Sep 17 00:00:00 2001 From: MinJae Han Date: Thu, 23 Jan 2025 05:25:28 +0900 Subject: [PATCH 21/28] =?UTF-8?q?[MOD/#177]=20baseResponse=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../spoony/data/datasource/PlaceDataSource.kt | 2 +- .../datasourceimpl/PlaceDataSourceImpl.kt | 2 +- .../spoony/data/dto/response/BaseResponse.kt | 20 ------------------- .../spoony/data/service/PlaceService.kt | 2 +- 4 files changed, 3 insertions(+), 23 deletions(-) delete mode 100644 app/src/main/java/com/spoony/spoony/data/dto/response/BaseResponse.kt diff --git a/app/src/main/java/com/spoony/spoony/data/datasource/PlaceDataSource.kt b/app/src/main/java/com/spoony/spoony/data/datasource/PlaceDataSource.kt index 26a57a97..e0ea8bf0 100644 --- a/app/src/main/java/com/spoony/spoony/data/datasource/PlaceDataSource.kt +++ b/app/src/main/java/com/spoony/spoony/data/datasource/PlaceDataSource.kt @@ -1,6 +1,6 @@ package com.spoony.spoony.data.datasource -import com.spoony.spoony.data.dto.response.BaseResponse +import com.spoony.spoony.data.dto.base.BaseResponse import com.spoony.spoony.data.dto.response.SearchPlaceResponseDto interface PlaceDataSource { diff --git a/app/src/main/java/com/spoony/spoony/data/datasourceimpl/PlaceDataSourceImpl.kt b/app/src/main/java/com/spoony/spoony/data/datasourceimpl/PlaceDataSourceImpl.kt index 614607ec..02fabf42 100644 --- a/app/src/main/java/com/spoony/spoony/data/datasourceimpl/PlaceDataSourceImpl.kt +++ b/app/src/main/java/com/spoony/spoony/data/datasourceimpl/PlaceDataSourceImpl.kt @@ -1,7 +1,7 @@ package com.spoony.spoony.data.datasourceimpl import com.spoony.spoony.data.datasource.PlaceDataSource -import com.spoony.spoony.data.dto.response.BaseResponse +import com.spoony.spoony.data.dto.base.BaseResponse import com.spoony.spoony.data.dto.response.SearchPlaceResponseDto import com.spoony.spoony.data.service.PlaceService import javax.inject.Inject diff --git a/app/src/main/java/com/spoony/spoony/data/dto/response/BaseResponse.kt b/app/src/main/java/com/spoony/spoony/data/dto/response/BaseResponse.kt deleted file mode 100644 index 25814764..00000000 --- a/app/src/main/java/com/spoony/spoony/data/dto/response/BaseResponse.kt +++ /dev/null @@ -1,20 +0,0 @@ -package com.spoony.spoony.data.dto.response - -import kotlinx.serialization.SerialName -import kotlinx.serialization.Serializable - -@Serializable -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 -) diff --git a/app/src/main/java/com/spoony/spoony/data/service/PlaceService.kt b/app/src/main/java/com/spoony/spoony/data/service/PlaceService.kt index cf103dc1..44bfa04c 100644 --- a/app/src/main/java/com/spoony/spoony/data/service/PlaceService.kt +++ b/app/src/main/java/com/spoony/spoony/data/service/PlaceService.kt @@ -1,6 +1,6 @@ package com.spoony.spoony.data.service -import com.spoony.spoony.data.dto.response.BaseResponse +import com.spoony.spoony.data.dto.base.BaseResponse import com.spoony.spoony.data.dto.response.SearchPlaceResponseDto import retrofit2.http.GET import retrofit2.http.Query From 422943361fbf2237fe9a5888be6a94f6f050369a Mon Sep 17 00:00:00 2001 From: MinJae Han Date: Thu, 23 Jan 2025 06:20:39 +0900 Subject: [PATCH 22/28] =?UTF-8?q?[MOD/#117]=20mapper=20=ED=95=A8=EC=88=98?= =?UTF-8?q?=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../register/RegisterViewModel.kt | 43 +++++++++++-------- 1 file changed, 25 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/com/spoony/spoony/presentation/register/RegisterViewModel.kt b/app/src/main/java/com/spoony/spoony/presentation/register/RegisterViewModel.kt index f8d0b5dc..04ca961d 100644 --- a/app/src/main/java/com/spoony/spoony/presentation/register/RegisterViewModel.kt +++ b/app/src/main/java/com/spoony/spoony/presentation/register/RegisterViewModel.kt @@ -2,6 +2,8 @@ package com.spoony.spoony.presentation.register import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope +import com.spoony.spoony.domain.entity.CategoryEntity +import com.spoony.spoony.domain.entity.PlaceEntity import com.spoony.spoony.domain.repository.RegisterRepository import com.spoony.spoony.presentation.register.component.SelectedPhoto import com.spoony.spoony.presentation.register.model.Category @@ -39,14 +41,7 @@ class RegisterViewModel @Inject constructor( viewModelScope.launch { repository.getCategories() .onSuccess { categoryEntities -> - val categories = categoryEntities.map { entity -> - Category( - categoryId = entity.categoryId, - categoryName = entity.categoryName, - iconUrlSelected = entity.iconUrl, - iconUrlNotSelected = entity.unSelectedIconUrl ?: entity.iconUrl - ) - } + val categories = categoryEntities.map { it.toPresentation() } _state.update { it.copy(categories = categories.toImmutableList()) } } } @@ -60,17 +55,12 @@ class RegisterViewModel @Inject constructor( viewModelScope.launch { repository.searchPlace(query) .onSuccess { placeEntities -> - val places = placeEntities.map { entity -> - Place( - placeName = entity.placeName, - placeAddress = entity.placeAddress, - placeRoadAddress = entity.placeRoadAddress, - latitude = entity.latitude, - longitude = entity.longitude - ) - } _state.update { - it.copy(searchResults = places.toImmutableList()) + it.copy( + searchResults = placeEntities.map { entity -> + entity.toPresentation() + }.toImmutableList() + ) } } } @@ -245,6 +235,23 @@ class RegisterViewModel @Inject constructor( } } +fun CategoryEntity.toPresentation(): Category = + Category( + categoryId = categoryId, + categoryName = categoryName, + iconUrlSelected = iconUrl, + iconUrlNotSelected = unSelectedIconUrl ?: iconUrl + ) + +fun PlaceEntity.toPresentation(): Place = + Place( + placeName = placeName, + placeAddress = placeAddress, + placeRoadAddress = placeRoadAddress, + latitude = latitude, + longitude = longitude + ) + sealed class RegisterSideEffect { data class ShowSnackbar(val message: String) : RegisterSideEffect() } From 60e87fb65e1b80aa181c806799cd8dce91cd465a Mon Sep 17 00:00:00 2001 From: MinJae Han Date: Thu, 23 Jan 2025 06:24:53 +0900 Subject: [PATCH 23/28] =?UTF-8?q?[MOD/#117]=20mapper=20=ED=95=A8=EC=88=98?= =?UTF-8?q?=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../spoony/presentation/register/RegisterViewModel.kt | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/spoony/spoony/presentation/register/RegisterViewModel.kt b/app/src/main/java/com/spoony/spoony/presentation/register/RegisterViewModel.kt index 04ca961d..3db48ecc 100644 --- a/app/src/main/java/com/spoony/spoony/presentation/register/RegisterViewModel.kt +++ b/app/src/main/java/com/spoony/spoony/presentation/register/RegisterViewModel.kt @@ -41,8 +41,11 @@ class RegisterViewModel @Inject constructor( viewModelScope.launch { repository.getCategories() .onSuccess { categoryEntities -> - val categories = categoryEntities.map { it.toPresentation() } - _state.update { it.copy(categories = categories.toImmutableList()) } + _state.update { state -> + state.copy( + categories = categoryEntities.map { it.toPresentation() }.toImmutableList() + ) + } } } } From 11f5dbcb6c472c6b9fb254b18a8b9c8ab2126110 Mon Sep 17 00:00:00 2001 From: MinJae Han Date: Thu, 23 Jan 2025 06:37:21 +0900 Subject: [PATCH 24/28] =?UTF-8?q?[MOD/#122]=20=EB=A6=AC=EB=B7=B0=20?= =?UTF-8?q?=EC=82=AC=ED=95=AD=20=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../spoony/spoony/data/dto/response/PlaceCheckResponseDto.kt | 2 +- .../spoony/spoony/data/repositoryimpl/RegisterRepositoryImpl.kt | 2 +- .../spoony/spoony/presentation/register/RegisterViewModel.kt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/spoony/spoony/data/dto/response/PlaceCheckResponseDto.kt b/app/src/main/java/com/spoony/spoony/data/dto/response/PlaceCheckResponseDto.kt index eeb456bb..07b932d5 100644 --- a/app/src/main/java/com/spoony/spoony/data/dto/response/PlaceCheckResponseDto.kt +++ b/app/src/main/java/com/spoony/spoony/data/dto/response/PlaceCheckResponseDto.kt @@ -6,5 +6,5 @@ import kotlinx.serialization.Serializable @Serializable data class PlaceCheckResponseDto( @SerialName("duplicate") - val duplicate: Boolean + val idDuplicated: Boolean ) diff --git a/app/src/main/java/com/spoony/spoony/data/repositoryimpl/RegisterRepositoryImpl.kt b/app/src/main/java/com/spoony/spoony/data/repositoryimpl/RegisterRepositoryImpl.kt index 576875e5..73f2d81f 100644 --- a/app/src/main/java/com/spoony/spoony/data/repositoryimpl/RegisterRepositoryImpl.kt +++ b/app/src/main/java/com/spoony/spoony/data/repositoryimpl/RegisterRepositoryImpl.kt @@ -68,7 +68,7 @@ class RegisterRepositoryImpl @Inject constructor( latitude: Double, longitude: Double ): Result = runCatching { - placeDataSource.checkDuplicatePlace(userId, latitude, longitude).data!!.duplicate + placeDataSource.checkDuplicatePlace(userId, latitude, longitude).data!!.idDuplicated } override suspend fun registerPost( diff --git a/app/src/main/java/com/spoony/spoony/presentation/register/RegisterViewModel.kt b/app/src/main/java/com/spoony/spoony/presentation/register/RegisterViewModel.kt index 3db48ecc..a71b7bbd 100644 --- a/app/src/main/java/com/spoony/spoony/presentation/register/RegisterViewModel.kt +++ b/app/src/main/java/com/spoony/spoony/presentation/register/RegisterViewModel.kt @@ -243,7 +243,7 @@ fun CategoryEntity.toPresentation(): Category = categoryId = categoryId, categoryName = categoryName, iconUrlSelected = iconUrl, - iconUrlNotSelected = unSelectedIconUrl ?: iconUrl + iconUrlNotSelected = unSelectedIconUrl ?: "" ) fun PlaceEntity.toPresentation(): Place = From bf12e519348179a1760a937a88061b8ef3018e14 Mon Sep 17 00:00:00 2001 From: roel Date: Thu, 23 Jan 2025 06:45:39 +0900 Subject: [PATCH 25/28] =?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 26/28] =?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 27/28] =?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 28/28] =?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,