Skip to content

Commit 5b57cc8

Browse files
committed
Refactor: 루틴 조회 api 버전업
- v1 -> v2 버전업 - response 변화에 따른 모델 수정
1 parent 8edf0ee commit 5b57cc8

14 files changed

Lines changed: 124 additions & 66 deletions

File tree

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package com.threegap.bitnagil.data.routine.model.response
2+
3+
import com.threegap.bitnagil.domain.routine.model.DayRoutines
4+
import kotlinx.serialization.SerialName
5+
import kotlinx.serialization.Serializable
6+
7+
@Serializable
8+
data class DayRoutinesDto(
9+
@SerialName("routineList")
10+
val routineList: List<RoutineDto>,
11+
@SerialName("allCompleted")
12+
val allCompleted: Boolean,
13+
)
14+
15+
fun DayRoutinesDto.toDomain(): DayRoutines =
16+
DayRoutines(
17+
routineList = routineList.map { it.toDomain() },
18+
allCompleted = allCompleted,
19+
)
Lines changed: 26 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,42 @@
11
package com.threegap.bitnagil.data.routine.model.response
22

3+
import com.threegap.bitnagil.domain.routine.model.DayOfWeek
4+
import com.threegap.bitnagil.domain.routine.model.RecommendedRoutineType
5+
import com.threegap.bitnagil.domain.routine.model.Routine
36
import kotlinx.serialization.SerialName
47
import kotlinx.serialization.Serializable
58

69
@Serializable
710
data class RoutineDto(
811
@SerialName("routineId")
912
val routineId: String,
10-
@SerialName("historySeq")
11-
val historySeq: Int,
1213
@SerialName("routineName")
1314
val routineName: String,
1415
@SerialName("repeatDay")
1516
val repeatDay: List<String>,
1617
@SerialName("executionTime")
1718
val executionTime: String,
18-
@SerialName("subRoutineSearchResultDto")
19-
val subRoutines: List<SubRoutineDto>,
20-
@SerialName("modifiedYn")
21-
val isModified: Boolean,
22-
@SerialName("routineCompletionId")
23-
val routineCompletionId: Int?,
24-
@SerialName("completeYn")
25-
val isCompleted: Boolean,
26-
@SerialName("routineType")
27-
val routineType: String,
19+
@SerialName("routineDate")
20+
val routineDate: String,
21+
@SerialName("routineCompleteYn")
22+
val routineCompleteYn: Boolean,
23+
@SerialName("subRoutineNames")
24+
val subRoutineNames: List<String>,
25+
@SerialName("subRoutineCompleteYn")
26+
val subRoutineCompleteYn: List<Boolean>,
27+
@SerialName("recommendedRoutineType")
28+
val recommendedRoutineType: String?,
2829
)
30+
31+
fun RoutineDto.toDomain(): Routine =
32+
Routine(
33+
routineId = this.routineId,
34+
routineName = this.routineName,
35+
repeatDay = this.repeatDay.map { DayOfWeek.fromString(it) },
36+
executionTime = this.executionTime,
37+
routineDate = this.routineDate,
38+
routineCompleteYn = this.routineCompleteYn,
39+
subRoutineNames = this.subRoutineNames,
40+
subRoutineCompleteYn = this.subRoutineCompleteYn,
41+
recommendedRoutineType = RecommendedRoutineType.fromString(this.recommendedRoutineType),
42+
)
Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,18 @@
11
package com.threegap.bitnagil.data.routine.model.response
22

3+
import com.threegap.bitnagil.domain.routine.model.Routines
34
import kotlinx.serialization.SerialName
45
import kotlinx.serialization.Serializable
56

67
@Serializable
78
data class RoutinesResponseDto(
89
@SerialName("routines")
9-
val routines: Map<String, List<RoutineDto>>,
10+
val routines: Map<String, DayRoutinesDto>,
1011
)
12+
13+
fun RoutinesResponseDto.toDomain() =
14+
Routines(
15+
routines = this.routines.mapValues { (_, dayRoutinesDto) ->
16+
dayRoutinesDto.toDomain()
17+
},
18+
)

data/src/main/java/com/threegap/bitnagil/data/routine/service/RoutineService.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import retrofit2.http.Path
1414
import retrofit2.http.Query
1515

1616
interface RoutineService {
17-
@GET("/api/v1/routines")
17+
@GET("/api/v2/routines")
1818
suspend fun fetchRoutines(
1919
@Query("startDate") startDate: String,
2020
@Query("endDate") endDate: String,
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package com.threegap.bitnagil.domain.routine.model
2+
3+
data class DayRoutines(
4+
val routineList: List<Routine>,
5+
val allCompleted: Boolean,
6+
)
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.threegap.bitnagil.domain.routine.model
2+
3+
enum class RecommendedRoutineType {
4+
PERSONALIZED,
5+
OUTING,
6+
WAKE_UP,
7+
CONNECT,
8+
REST,
9+
GROW,
10+
OUTING_REPORT,
11+
UNKNOWN,
12+
;
13+
14+
companion object {
15+
fun fromString(categoryName: String?): RecommendedRoutineType =
16+
RecommendedRoutineType.entries.find { it.name == categoryName } ?: UNKNOWN
17+
}
18+
}

domain/src/main/java/com/threegap/bitnagil/domain/routine/model/Routine.kt

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,12 @@ package com.threegap.bitnagil.domain.routine.model
22

33
data class Routine(
44
val routineId: String,
5-
val historySeq: Int,
65
val routineName: String,
76
val repeatDay: List<DayOfWeek>,
87
val executionTime: String,
9-
val subRoutines: List<SubRoutine>,
10-
val isModified: Boolean,
11-
val routineCompletionId: Int?,
12-
val isCompleted: Boolean,
13-
val routineType: RoutineType,
14-
) {
15-
fun withSortedSubRoutines(): Routine =
16-
copy(subRoutines = subRoutines.sortedBy { it.sortOrder })
17-
}
8+
val routineDate: String,
9+
val routineCompleteYn: Boolean,
10+
val subRoutineNames: List<String>,
11+
val subRoutineCompleteYn: List<Boolean>,
12+
val recommendedRoutineType: RecommendedRoutineType?,
13+
)
Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,5 @@
11
package com.threegap.bitnagil.domain.routine.model
22

33
data class Routines(
4-
val routinesByDate: Map<String, List<Routine>>,
5-
) {
6-
fun withSortedSubRoutines(): Routines =
7-
copy(
8-
routinesByDate = routinesByDate.mapValues { (_, routinesList) ->
9-
routinesList.map { it.withSortedSubRoutines() }
10-
},
11-
)
12-
}
4+
val routines: Map<String, DayRoutines>,
5+
)

domain/src/main/java/com/threegap/bitnagil/domain/routine/usecase/FetchWeeklyRoutinesUseCase.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,4 @@ class FetchWeeklyRoutinesUseCase @Inject constructor(
99
) {
1010
suspend operator fun invoke(startDate: String, endDate: String): Result<Routines> =
1111
routineRepository.fetchWeeklyRoutines(startDate, endDate)
12-
.map { it.withSortedSubRoutines() }
1312
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package com.threegap.bitnagil.presentation.home.model
2+
3+
import android.os.Parcelable
4+
import com.threegap.bitnagil.domain.routine.model.DayRoutines
5+
import kotlinx.parcelize.Parcelize
6+
7+
@Parcelize
8+
data class DayRoutinesUiModel(
9+
val routineList: List<RoutineUiModel> = emptyList(),
10+
val allCompleted: Boolean = false,
11+
) : Parcelable
12+
13+
fun DayRoutines.toUiModel(): DayRoutinesUiModel =
14+
DayRoutinesUiModel(
15+
routineList = routineList.map { it.toUiModel() },
16+
allCompleted = allCompleted,
17+
)

0 commit comments

Comments
 (0)