Skip to content

Commit 3e4db2c

Browse files
Merge pull request #93 from SOLPLY/feature/#90-maps-api-connect
[Feature/#90] place api connect
2 parents eea274c + eddb57f commit 3e4db2c

20 files changed

Lines changed: 269 additions & 134 deletions

File tree

core/designsystem/src/main/java/com/teamsolply/solply/designsystem/component/card/SolplyPlaceCard.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import androidx.compose.runtime.Composable
1818
import androidx.compose.ui.Alignment
1919
import androidx.compose.ui.Modifier
2020
import androidx.compose.ui.draw.clip
21+
import androidx.compose.ui.layout.ContentScale
2122
import androidx.compose.ui.unit.dp
2223
import com.teamsolply.solply.designsystem.component.button.SolplySavedMarker
2324
import com.teamsolply.solply.designsystem.component.chip.CheckedBigCircle
@@ -76,7 +77,12 @@ fun SolplyPlaceCard(
7677
) {
7778
AdaptationImage(
7879
imageUrl = imgRes,
79-
modifier = Modifier.matchParentSize()
80+
modifier = Modifier
81+
.size(136.dp)
82+
.fillMaxWidth()
83+
.clip(RoundedCornerShape(20.dp))
84+
.matchParentSize(),
85+
contentScale = ContentScale.Crop
8086
)
8187
if (saved) {
8288
SolplySavedMarker(
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package com.teamsolply.solply.place.dto.response
2+
3+
import kotlinx.serialization.SerialName
4+
import kotlinx.serialization.Serializable
5+
6+
@Serializable
7+
data class GetPlacesResponseDto(
8+
@SerialName("places")
9+
val places: List<PlaceDto>
10+
)
11+
12+
@Serializable
13+
data class PlaceDto(
14+
@SerialName("placeId")
15+
val placeId: Long,
16+
17+
@SerialName("placeName")
18+
val placeName: String,
19+
20+
@SerialName("thumbnailImageUrl")
21+
val thumbnailImageUrl: String,
22+
23+
@SerialName("primaryTag")
24+
val primaryTag: String,
25+
26+
@SerialName("isBookmarked")
27+
val isBookmarked: Boolean
28+
)
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.teamsolply.solply.place.mapper
2+
3+
import com.teamsolply.solply.place.dto.response.PlaceDto
4+
import com.teamsolply.solply.place.model.PlaceEntity
5+
6+
fun PlaceDto.toEntity(): PlaceEntity {
7+
return PlaceEntity(
8+
placeId = this.placeId,
9+
placeName = this.placeName,
10+
thumbnailImageUrl = this.thumbnailImageUrl,
11+
primaryTag = this.primaryTag,
12+
isBookmarked = this.isBookmarked
13+
)
14+
}

data/place/src/main/java/com/teamsolply/solply/place/repository/PlaceRepositoryImpl.kt

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package com.teamsolply.solply.place.repository
22

33
import android.util.Log
44
import com.teamsolply.solply.model.PlaceType
5+
import com.teamsolply.solply.place.model.PlaceEntity
56
import com.teamsolply.solply.place.model.RecommendPlaceInfo
67
import com.teamsolply.solply.place.model.SaveAutoSignInEntity
78
import com.teamsolply.solply.place.model.SelectedTownInfo
@@ -90,4 +91,29 @@ class PlaceRepositoryImpl @Inject constructor(
9091
)
9192
}
9293
}
94+
95+
override suspend fun getPlaces(
96+
townId: Long,
97+
mainTagId: Long?,
98+
subTagAIdList: List<Long>?,
99+
subTagBIdList: List<Long>?
100+
): Result<List<PlaceEntity>> = runCatching {
101+
placeRemoteDataSource.getPlaces(
102+
townId = townId,
103+
isBookmarkSearch = false,
104+
mainTagId = mainTagId,
105+
subTagAIdList = subTagAIdList,
106+
subTagBIdList = subTagBIdList
107+
)
108+
}.mapCatching { responseDto ->
109+
responseDto.places.map { dto ->
110+
PlaceEntity(
111+
placeId = dto.placeId,
112+
placeName = dto.placeName,
113+
thumbnailImageUrl = dto.thumbnailImageUrl,
114+
primaryTag = dto.primaryTag,
115+
isBookmarked = dto.isBookmarked
116+
)
117+
}
118+
}
93119
}

data/place/src/main/java/com/teamsolply/solply/place/source/PlaceRemoteDataSource.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.teamsolply.solply.place.source
22

3+
import com.teamsolply.solply.place.dto.response.GetPlacesResponseDto
34
import com.teamsolply.solply.place.dto.response.GetRecommendPlaceDto
45
import com.teamsolply.solply.place.dto.response.GetTagResponseDto
56
import com.teamsolply.solply.place.dto.response.GetUserInfoResponseDto
@@ -8,4 +9,11 @@ interface PlaceRemoteDataSource {
89
suspend fun getTags(parentId: Int?): List<GetTagResponseDto>
910
suspend fun getUserInfo(): GetUserInfoResponseDto
1011
suspend fun getRecommendPlace(townId: Long): List<GetRecommendPlaceDto>
12+
suspend fun getPlaces(
13+
townId: Long,
14+
isBookmarkSearch: Boolean,
15+
mainTagId: Long?,
16+
subTagAIdList: List<Long>?,
17+
subTagBIdList: List<Long>?
18+
): GetPlacesResponseDto
1119
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.teamsolply.solply.place.model
2+
3+
data class PlaceEntity(
4+
val placeId: Long,
5+
val placeName: String,
6+
val thumbnailImageUrl: String,
7+
val primaryTag: String,
8+
val isBookmarked: Boolean
9+
)

domain/place/src/main/java/com/teamsolply/solply/place/repository/PlaceRepository.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.teamsolply.solply.place.repository
22

3+
import com.teamsolply.solply.place.model.PlaceEntity
34
import com.teamsolply.solply.place.model.RecommendPlaceInfo
45
import com.teamsolply.solply.place.model.SaveAutoSignInEntity
56
import com.teamsolply.solply.place.model.TagEntity
@@ -11,4 +12,10 @@ interface PlaceRepository {
1112
suspend fun getMainTags(): Result<List<TagEntity>>
1213
suspend fun getSubTags(parentId: Int): Result<List<TagEntity>>
1314
suspend fun getUserInfo(): Result<UserInfo>
15+
suspend fun getPlaces(
16+
townId: Long,
17+
mainTagId: Long?,
18+
subTagAIdList: List<Long>?,
19+
subTagBIdList: List<Long>?
20+
): Result<List<PlaceEntity>>
1421
}

feature/main/src/main/java/com/teamsolply/solply/main/MainNavigator.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,10 +90,14 @@ internal class MainNavigator(
9090

9191
fun navigateToMaps(
9292
mapsType: String,
93+
townId: Long,
94+
placeId: Long? = null,
9395
navOptions: NavOptions
9496
) {
9597
navController.navigateMaps(
9698
mapsType = mapsType,
99+
townId = townId,
100+
placeId = placeId,
97101
navOptions = navOptions
98102
)
99103
}

feature/main/src/main/java/com/teamsolply/solply/main/MainScreen.kt

Lines changed: 35 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -156,23 +156,38 @@ internal fun MainScreen(
156156
)
157157
placeNavGraph(
158158
paddingValues = innerPadding,
159-
navigateToMaps = { mapsType ->
159+
navigateToMaps = { mapsType, townId, placeId ->
160160
val navOptions = navOptions {}
161-
navigator.navigateToMaps(mapsType = mapsType, navOptions = navOptions)
161+
navigator.navigateToMaps(
162+
mapsType = mapsType,
163+
townId = townId,
164+
placeId = placeId,
165+
navOptions = navOptions
166+
)
162167
}
163168
)
164169
courseNavGraph(
165170
paddingValues = innerPadding,
166171
navigateToMaps = { mapsType ->
167172
val navOptions = navOptions {}
168-
navigator.navigateToMaps(mapsType = mapsType, navOptions = navOptions)
173+
// TODO. 타운 아이디
174+
navigator.navigateToMaps(
175+
mapsType = mapsType,
176+
townId = 0,
177+
navOptions = navOptions
178+
)
169179
}
170180
)
171181
mypageNavGraph(
172182
paddingValues = innerPadding,
173183
navigateToMaps = { mapsType ->
174184
val navOptions = navOptions {}
175-
navigator.navigateToMaps(mapsType = mapsType, navOptions = navOptions)
185+
// TODO. 타운 아이디
186+
navigator.navigateToMaps(
187+
mapsType = mapsType,
188+
townId = 0,
189+
navOptions = navOptions
190+
)
176191
},
177192
navigateToBack = navigator::navigateToBack,
178193
navigateToPlaceCollection = { townId, townName ->
@@ -223,15 +238,19 @@ internal fun MainScreen(
223238
},
224239
navigateToPlaceDetail = {
225240
val navOptions = navOptions {}
241+
// TODO. 타운 아이디
226242
navigator.navigateToMaps(
227243
mapsType = MapsType.PLACE_DETAIL.name,
244+
townId = 0,
228245
navOptions = navOptions
229246
)
230247
},
231248
navigateToEditCourse = {
232249
val navOptions = navOptions {}
250+
// TODO. 타운 아이디
233251
navigator.navigateToMaps(
234252
mapsType = MapsType.EDIT_COURSE.name,
253+
townId = 0,
235254
navOptions = navOptions
236255
)
237256
},
@@ -265,15 +284,25 @@ internal fun MainScreen(
265284
paddingValues = innerPadding,
266285
navigateToMaps = { mapsType ->
267286
val navOptions = navOptions {}
268-
navigator.navigateToMaps(mapsType = mapsType, navOptions = navOptions)
287+
// TODO. 타운 아이디
288+
navigator.navigateToMaps(
289+
mapsType = mapsType,
290+
townId = 0,
291+
navOptions = navOptions
292+
)
269293
},
270294
navigateToBack = navigator::navigateToBack
271295
)
272296
courseCollectionNavGraph(
273297
paddingValues = innerPadding,
274298
navigateToMaps = { mapsType ->
275299
val navOptions = navOptions { }
276-
navigator.navigateToMaps(mapsType = mapsType, navOptions = navOptions)
300+
// TODO. 타운 아이디
301+
navigator.navigateToMaps(
302+
mapsType = mapsType,
303+
townId = 0,
304+
navOptions = navOptions
305+
)
277306
},
278307
navigateToBack = navigator::navigateToBack
279308
)

feature/main/src/main/java/com/teamsolply/solply/main/component/MainBottomBar.kt

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
package com.teamsolply.solply.main.component
22

33
import androidx.compose.animation.AnimatedVisibility
4+
import androidx.compose.animation.core.tween
5+
import androidx.compose.animation.slideInHorizontally
6+
import androidx.compose.animation.slideOutHorizontally
47
import androidx.compose.foundation.background
58
import androidx.compose.foundation.layout.Arrangement
69
import androidx.compose.foundation.layout.Box
@@ -34,7 +37,17 @@ internal fun MainBottomBar(
3437
currentTab: MainNavTab?,
3538
onTabSelected: (MainNavTab) -> Unit
3639
) {
37-
AnimatedVisibility(visible = visible) {
40+
AnimatedVisibility(
41+
visible = visible,
42+
enter = slideInHorizontally(
43+
animationSpec = tween(250),
44+
initialOffsetX = { it }
45+
),
46+
exit = slideOutHorizontally(
47+
animationSpec = tween(250),
48+
targetOffsetX = { it }
49+
)
50+
) {
3851
Box(modifier = modifier.fillMaxWidth()) {
3952
Row(
4053
modifier = Modifier

0 commit comments

Comments
 (0)