Skip to content

Commit 95b7c84

Browse files
authored
Merge pull request #275 from Runnect/feature/refactor-course-detail-screen
[REFACTOR] 코스 상세페이지 / 전면 리팩토링
2 parents db27254 + bc34a5d commit 95b7c84

File tree

68 files changed

+1139
-1292
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

68 files changed

+1139
-1292
lines changed

app/build.gradle

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,26 @@
11
plugins {
22
id 'com.android.application'
33
id 'org.jetbrains.kotlin.android'
4+
45
id 'kotlin-android-extensions'
5-
//serialization
6+
//id 'kotlin-parcelize'
7+
68
id 'org.jetbrains.kotlin.plugin.serialization' version '1.7.20'
7-
//hilt
89
id 'dagger.hilt.android.plugin'
9-
//plugin for databinding & hilt
10+
11+
// plugin for data binding, hilt
1012
id 'kotlin-kapt'
11-
//for hiding keys used in manifest
13+
14+
// plugin for hiding keys used in manifest
1215
id 'com.google.android.libraries.mapsplatform.secrets-gradle-plugin'
1316

1417
// Add the Google services Gradle plugin
15-
id("com.google.gms.google-services")
18+
id 'com.google.gms.google-services'
1619
}
20+
1721
Properties properties = new Properties()
1822
properties.load(project.rootProject.file('local.properties').newDataInputStream())
23+
1924
android {
2025
namespace 'com.runnect.runnect'
2126
compileSdk 33
@@ -36,6 +41,7 @@ android {
3641
buildConfigField "String", "REMOTE_KEY_APP_VERSION", properties["REMOTE_KEY_APP_VERSION"]
3742

3843
}
44+
3945
buildFeatures {
4046
buildConfig = true
4147
}
@@ -46,21 +52,23 @@ android {
4652
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
4753
}
4854
}
55+
4956
compileOptions {
5057
sourceCompatibility JavaVersion.VERSION_1_8
5158
targetCompatibility JavaVersion.VERSION_1_8
5259
}
60+
5361
kotlinOptions {
5462
jvmTarget = '1.8'
5563
}
64+
5665
buildFeatures {
5766
dataBinding true
5867
viewBinding true
5968
}
6069
}
6170

6271
dependencies {
63-
6472
implementation 'androidx.core:core-ktx:1.9.0'
6573
implementation 'androidx.appcompat:appcompat:1.5.1'
6674
implementation 'com.google.android.material:material:1.8.0'

app/src/main/java/com/runnect/runnect/data/dto/TimerData.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package com.runnect.runnect.data.dto
22

33

44
import android.os.Parcelable
5-
import com.naver.maps.geometry.LatLng
65
import kotlinx.android.parcel.Parcelize
76

87
@Parcelize

app/src/main/java/com/runnect/runnect/data/dto/request/RequestDeleteUploadCourse.kt renamed to app/src/main/java/com/runnect/runnect/data/dto/request/RequestDeleteUploadCourseDto.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import com.google.gson.annotations.SerializedName
44
import kotlinx.serialization.Serializable
55

66
@Serializable
7-
data class RequestDeleteUploadCourse(
7+
data class RequestDeleteUploadCourseDto(
88
@SerializedName("publicCourseIdList")
99
val publicCourseIdList: List<Int>
1010
)

app/src/main/java/com/runnect/runnect/data/dto/request/RequestUpdatePublicCourse.kt renamed to app/src/main/java/com/runnect/runnect/data/dto/request/RequestPatchPublicCourseDto.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@ import com.google.gson.annotations.SerializedName
44
import kotlinx.serialization.Serializable
55

66
@Serializable
7-
data class RequestUpdatePublicCourse(
7+
data class RequestPatchPublicCourseDto(
8+
@SerializedName("title")
9+
val title: String,
810
@SerializedName("description")
911
val description: String,
10-
@SerializedName("title")
11-
val title: String
1212
)

app/src/main/java/com/runnect/runnect/data/dto/response/ResponseCourseDetail.kt

Lines changed: 0 additions & 66 deletions
This file was deleted.

app/src/main/java/com/runnect/runnect/data/dto/response/ResponseDeleteUploadCourse.kt

Lines changed: 0 additions & 21 deletions
This file was deleted.
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.runnect.runnect.data.dto.response
2+
3+
import com.google.gson.annotations.SerializedName
4+
import kotlinx.serialization.Serializable
5+
@Serializable
6+
data class ResponseDeleteUploadCourseDto(
7+
@SerializedName("deletedPublicCourseCount")
8+
val deletedPublicCourseCount: Int
9+
)
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
package com.runnect.runnect.data.dto.response
2+
3+
4+
import com.runnect.runnect.domain.entity.CourseDetail
5+
import kotlinx.serialization.SerialName
6+
import kotlinx.serialization.Serializable
7+
8+
@Serializable
9+
data class ResponseGetCourseDetailDto(
10+
@SerialName("user")
11+
val user: User,
12+
@SerialName("publicCourse")
13+
val publicCourse: PublicCourse
14+
) {
15+
@Serializable
16+
data class User(
17+
@SerialName("nickname")
18+
val nickname: String,
19+
@SerialName("level")
20+
val level: Int,
21+
@SerialName("image")
22+
val image: String,
23+
@SerialName("isNowUser")
24+
val isNowUser: Boolean
25+
)
26+
27+
@Serializable
28+
data class PublicCourse(
29+
@SerialName("id")
30+
val id: Int,
31+
@SerialName("courseId")
32+
val courseId: Int,
33+
@SerialName("scrap")
34+
val scrap: Boolean,
35+
@SerialName("image")
36+
val image: String,
37+
@SerialName("title")
38+
val title: String,
39+
@SerialName("description")
40+
val description: String,
41+
@SerialName("path")
42+
val path: List<List<Double>>,
43+
@SerialName("distance")
44+
val distance: Double,
45+
@SerialName("departure")
46+
val departure: Departure
47+
) {
48+
@Serializable
49+
data class Departure(
50+
@SerialName("region")
51+
val region: String,
52+
@SerialName("city")
53+
val city: String,
54+
@SerialName("town")
55+
val town: String,
56+
@SerialName("name")
57+
val name: String?
58+
)
59+
}
60+
61+
fun toCourseDetail() = CourseDetail(
62+
stampId = user.image,
63+
level = user.level.toString(),
64+
nickname = user.nickname,
65+
isNowUser = user.isNowUser,
66+
id = publicCourse.id,
67+
courseId = publicCourse.courseId,
68+
departure = publicCourse.departure.region + ' ' +
69+
publicCourse.departure.city + ' ' +
70+
publicCourse.departure.town + ' ' +
71+
((publicCourse.departure.name) ?: ""),
72+
description = publicCourse.description,
73+
distance = publicCourse.distance.toString(),
74+
image = publicCourse.image,
75+
isScrap = publicCourse.scrap,
76+
title = publicCourse.title,
77+
path = publicCourse.path
78+
)
79+
}

app/src/main/java/com/runnect/runnect/data/dto/response/ResponseUpdatePublicCourse.kt renamed to app/src/main/java/com/runnect/runnect/data/dto/response/ResponsePatchPublicCourseDto.kt

Lines changed: 6 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -4,29 +4,17 @@ import com.google.gson.annotations.SerializedName
44
import kotlinx.serialization.Serializable
55

66
@Serializable
7-
data class ResponseUpdatePublicCourse(
8-
@SerializedName("data")
9-
val `data`: UpdatePublicCourseData,
10-
@SerializedName("message")
11-
val message: String,
12-
@SerializedName("status")
13-
val status: Int,
14-
@SerializedName("success")
15-
val success: Boolean
7+
data class ResponsePatchPublicCourseDto(
8+
@SerializedName("publicCourse")
9+
val publicCourse: PublicCourse
1610
)
1711

1812
@Serializable
1913
data class PublicCourse(
20-
@SerializedName("description")
21-
val description: String,
2214
@SerializedName("id")
2315
val id: Int,
2416
@SerializedName("title")
25-
val title: String
17+
val title: String,
18+
@SerializedName("description")
19+
val description: String
2620
)
27-
28-
@Serializable
29-
data class UpdatePublicCourseData(
30-
@SerializedName("publicCourse")
31-
val publicCourse: PublicCourse
32-
)

app/src/main/java/com/runnect/runnect/data/repository/CourseRepositoryImpl.kt

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
11
package com.runnect.runnect.data.repository
22

3-
import com.runnect.runnect.data.dto.CourseDetailDTO
3+
import com.runnect.runnect.domain.entity.CourseDetail
44
import com.runnect.runnect.data.dto.CourseLoadInfoDTO
55
import com.runnect.runnect.data.dto.CourseSearchDTO
66
import com.runnect.runnect.data.dto.RecommendCourseDTO
77
import com.runnect.runnect.data.dto.request.RequestCourseScrap
88
import com.runnect.runnect.data.dto.request.RequestPostRecordDTO
99
import com.runnect.runnect.data.dto.request.RequestPutMyDrawDTO
10-
import com.runnect.runnect.data.dto.request.RequestUpdatePublicCourse
10+
import com.runnect.runnect.data.dto.request.RequestPatchPublicCourseDto
1111
import com.runnect.runnect.data.dto.request.RequestUploadMyCourse
12+
import com.runnect.runnect.data.dto.response.PublicCourse
1213
import com.runnect.runnect.data.dto.response.ResponseCourseScrap
1314
import com.runnect.runnect.data.dto.response.ResponseGetMyDrawDetailDTO
1415
import com.runnect.runnect.data.dto.response.ResponsePostCourseDTO
1516
import com.runnect.runnect.data.dto.response.ResponsePostRecordDTO
1617
import com.runnect.runnect.data.dto.response.ResponsePutMyDrawDTO
17-
import com.runnect.runnect.data.dto.response.ResponseUpdatePublicCourse
1818
import com.runnect.runnect.data.dto.response.ResponseUploadMyCourse
1919
import com.runnect.runnect.data.source.remote.RemoteCourseDataSource
2020
import com.runnect.runnect.domain.CourseRepository
@@ -27,37 +27,40 @@ import javax.inject.Inject
2727
class CourseRepositoryImpl @Inject constructor(private val remoteCourseDataSource: RemoteCourseDataSource) :
2828
CourseRepository {
2929
override suspend fun getRecommendCourse(pageNo: String?): MutableList<RecommendCourseDTO> {
30-
return remoteCourseDataSource.getRecommendCourse(pageNo = pageNo).data.publicCourses.map { it.toData() }.toMutableList()
30+
return remoteCourseDataSource.getRecommendCourse(pageNo = pageNo).data.publicCourses.map { it.toData() }
31+
.toMutableList()
3132
}
3233

3334
override suspend fun postCourseScrap(requestCourseScrap: RequestCourseScrap): ResponseCourseScrap {
3435
return remoteCourseDataSource.postCourseScrap(requestCourseScrap = requestCourseScrap)
3536
}
3637

3738
override suspend fun getCourseSearch(keyword: String): MutableList<CourseSearchDTO> {
38-
return remoteCourseDataSource.getCourseSearch(keyword = keyword).data.publicCourses.map { it.toData() }.toMutableList()
39+
return remoteCourseDataSource.getCourseSearch(keyword = keyword).data.publicCourses.map { it.toData() }
40+
.toMutableList()
3941
}
4042

41-
override suspend fun getCourseDetail(publicCourseId: Int): CourseDetailDTO {
42-
return remoteCourseDataSource.getCourseDetail(publicCourseId = publicCourseId).data.toData()
43+
override suspend fun getCourseDetail(publicCourseId: Int): Result<CourseDetail?> = runCatching {
44+
remoteCourseDataSource.getCourseDetail(publicCourseId = publicCourseId).data?.toCourseDetail()
4345
}
4446

4547
override suspend fun getMyCourseLoad(): MutableList<CourseLoadInfoDTO> {
46-
return remoteCourseDataSource.getMyCourseLoad().data.privateCourses.map { it.toData() }.toMutableList()
48+
return remoteCourseDataSource.getMyCourseLoad().data.privateCourses.map { it.toData() }
49+
.toMutableList()
4750
}
4851

4952
override suspend fun postUploadMyCourse(requestUploadMyCourse: RequestUploadMyCourse): ResponseUploadMyCourse {
5053
return remoteCourseDataSource.postUploadMyCourse(requestUploadMyCourse = requestUploadMyCourse)
5154
}
5255

53-
override suspend fun patchUpdatePublicCourse(
56+
override suspend fun patchPublicCourse(
5457
publicCourseId: Int,
55-
requestUpdatePublicCourse: RequestUpdatePublicCourse
56-
): ResponseUpdatePublicCourse {
57-
return remoteCourseDataSource.patchUpdatePublicCourse(
58+
requestPatchPublicCourse: RequestPatchPublicCourseDto
59+
): Result<PublicCourse?> = runCatching {
60+
remoteCourseDataSource.patchPublicCourse(
5861
publicCourseId = publicCourseId,
59-
requestUpdatePublicCourse = requestUpdatePublicCourse
60-
)
62+
requestPatchPublicCourseDto = requestPatchPublicCourse
63+
).data?.publicCourse
6164
}
6265

6366
override suspend fun deleteMyDrawCourse(deleteCourseList: RequestPutMyDrawDTO): Response<ResponsePutMyDrawDTO> {

0 commit comments

Comments
 (0)