Skip to content

Commit 960e900

Browse files
authored
Merge #60 -> develop
[Feat/#60] 지역관리 api 연결완료
2 parents 590993a + 35fc846 commit 960e900

File tree

29 files changed

+363
-132
lines changed

29 files changed

+363
-132
lines changed

app/src/main/AndroidManifest.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@
1010
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
1111
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_HEALTH"/>
1212

13+
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
14+
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
15+
1316
<application
1417
android:name="com.paw.key.PawKeyApplication"
1518
android:allowBackup="true"

app/src/main/java/com/paw/key/core/designsystem/component/CourseCard.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.paw.key.core.designsystem.component
22

3+
import android.util.Log
34
import androidx.compose.foundation.Image
45
import androidx.compose.foundation.background
56
import androidx.compose.foundation.clickable
@@ -38,13 +39,15 @@ import androidx.compose.ui.unit.dp
3839
import coil.compose.AsyncImage
3940
import coil.request.ImageRequest
4041
import com.paw.key.core.designsystem.theme.PawKeyTheme
42+
import com.paw.key.core.util.noRippleClickable
4143
import kotlin.String
4244

4345
@Composable
4446
fun CourseCard(
4547
title: String,
4648
petName:String,
4749
date: String,
50+
onCLickItem : () -> Unit,
4851
modifier: Modifier = Modifier
4952
) {
5053
Column(
@@ -53,6 +56,9 @@ fun CourseCard(
5356
.fillMaxWidth()
5457
.size(width = 328.dp , height = 240.dp)
5558
.background(Color.White, shape = RoundedCornerShape(20.dp))
59+
.noRippleClickable {
60+
onCLickItem()
61+
}
5662
) {
5763
// 지도 썸네일
5864
Box(
@@ -168,6 +174,7 @@ fun CourseCardPreview() {
168174
title = "홍대 주변 좋은 산책 코스",
169175
petName = "반려견 이름",
170176
date = "2025/05/17",
177+
onCLickItem = {}
171178
)
172179
}
173180
}

app/src/main/java/com/paw/key/core/designsystem/component/CourseDetail.kt

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -53,28 +53,6 @@ fun CourseDetail(
5353
modifier = modifier
5454
.fillMaxWidth()
5555
) {
56-
Row(
57-
modifier = Modifier
58-
.fillMaxWidth()
59-
.padding(vertical = 16.dp),
60-
verticalAlignment = Alignment.CenterVertically
61-
) {
62-
Icon(
63-
imageVector = ImageVector.vectorResource(R.drawable.ic_arrow_left_black),
64-
contentDescription = "뒤로가기"
65-
)
66-
Box(
67-
modifier = Modifier.weight(1f),
68-
contentAlignment = Alignment.Center
69-
) {
70-
Text(
71-
text = "저장한 산책 루트",
72-
style = PawKeyTheme.typography.body16Sb
73-
)
74-
}
75-
Spacer(modifier = Modifier.width(24.dp))
76-
}
77-
7856
AsyncImage(
7957
model = ImageRequest.Builder(LocalContext.current)
8058
.data("https://pawkey-server.com/image.jpg")

app/src/main/java/com/paw/key/data/di/RepositoryModule.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
package com.paw.key.data.di
22

33
import com.paw.key.data.repositoryimpl.DummyRepositoryImpl
4+
import com.paw.key.data.repositoryimpl.RegionRepositoryImpl
45
import com.paw.key.data.repositoryimpl.WalkSharedResultRepositoryImpl
56
import com.paw.key.domain.repository.DummyRepository
7+
import com.paw.key.domain.repository.RegionRepository
68
import com.paw.key.domain.repository.WalkSharedResultRepository
79
import dagger.Binds
810
import dagger.Module
@@ -25,4 +27,10 @@ interface RepositoryModule {
2527
walkSharedResultRepositoryImpl: WalkSharedResultRepositoryImpl
2628
): WalkSharedResultRepository
2729

30+
/*Home*/
31+
@Binds
32+
@Singleton
33+
fun bindsRegionRepository(
34+
regionRepositoryImpl: RegionRepositoryImpl
35+
): RegionRepository
2836
}

app/src/main/java/com/paw/key/data/di/ServiceModule.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.paw.key.data.di
22

33
import com.paw.key.data.service.DummyService
4+
import com.paw.key.data.service.RegionService
45
import dagger.Module
56
import dagger.Provides
67
import dagger.hilt.InstallIn
@@ -17,4 +18,10 @@ object ServiceModule {
1718
fun providesDummyService(retrofit: Retrofit ): DummyService =
1819
retrofit.create(DummyService::class.java)
1920

21+
@Provides
22+
@Singleton
23+
fun providesRegionService(retrofit: Retrofit ): RegionService =
24+
retrofit.create(RegionService::class.java)
25+
26+
2027
}

app/src/main/java/com/paw/key/data/dto/response/BaseResponse.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import kotlinx.serialization.Serializable
66
@Serializable
77
data class BaseResponse<T>(
88
@SerialName("code")
9-
val code: Int,
9+
val code: String,
1010
@SerialName("message")
1111
val message: String,
1212
@SerialName("data")
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package com.paw.key.data.dto.response.region
2+
3+
import kotlinx.serialization.SerialName
4+
import kotlinx.serialization.Serializable
5+
6+
@Serializable
7+
data class RegionResponseDto(
8+
@SerialName("regionName")
9+
val regionName: String,
10+
@SerialName("geometryDto")
11+
val geometryDto: GeometryDto
12+
)
13+
14+
@Serializable
15+
data class GeometryDto(
16+
@SerialName("type")
17+
val type: String,
18+
@SerialName("coordinates")
19+
val coordinates: List<List<List<List<Double>>>>
20+
)
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package com.paw.key.data.mapper
2+
3+
import com.paw.key.data.dto.response.region.GeometryDto
4+
import com.paw.key.data.dto.response.region.RegionResponseDto
5+
import com.paw.key.domain.model.entity.region.GeometryEntity
6+
import com.paw.key.domain.model.entity.region.RegionDataEntity
7+
import javax.inject.Inject
8+
9+
class RegionMapper @Inject constructor() {
10+
fun mapDtoToEntity(dto: RegionResponseDto): RegionDataEntity {
11+
return RegionDataEntity(
12+
regionName = dto.regionName,
13+
geometry = dto.geometryDto.toEntity()
14+
)
15+
}
16+
17+
private fun GeometryDto.toEntity(): GeometryEntity {
18+
return GeometryEntity(
19+
type = this.type,
20+
coordinates = this.coordinates.map { polygon ->
21+
polygon.map { ring ->
22+
ring.map { point ->
23+
// 서버에서 위도 경도 다름
24+
Pair(point[1], point[0])
25+
}
26+
}
27+
}
28+
)
29+
}
30+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package com.paw.key.data.remote.datasource
2+
3+
import com.paw.key.data.service.RegionService
4+
import javax.inject.Inject
5+
6+
class RegionDataSource @Inject constructor (
7+
private val regionService: RegionService
8+
) {
9+
suspend fun getRegionGeometry(userId: Int, regionId: Int) = regionService.getRegionGeometry(userId, regionId)
10+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package com.paw.key.data.repositoryimpl
2+
3+
import com.paw.key.data.mapper.RegionMapper
4+
import com.paw.key.data.remote.datasource.RegionDataSource
5+
import com.paw.key.domain.model.entity.region.RegionDataEntity
6+
import com.paw.key.domain.repository.RegionRepository
7+
import javax.inject.Inject
8+
9+
10+
class RegionRepositoryImpl @Inject constructor(
11+
private val regionDataSource: RegionDataSource,
12+
private val mapper: RegionMapper
13+
) : RegionRepository {
14+
override suspend fun getRegionGeometry(userId: Int, regionId: Int): Result<RegionDataEntity> = runCatching {
15+
regionDataSource.getRegionGeometry(userId, regionId).data.let {
16+
mapper.mapDtoToEntity(it)
17+
}
18+
}
19+
}

0 commit comments

Comments
 (0)