Skip to content

Commit 3dfc856

Browse files
authored
Merge pull request #38 from YAPP-Github/feature/#33-write_routine
[Feature/#33] 루틴 등록/수정 화면 구현
2 parents c5e853f + 3f716d7 commit 3dfc856

51 files changed

Lines changed: 2342 additions & 0 deletions

File tree

Some content is hidden

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

app/src/main/java/com/threegap/bitnagil/di/data/DataSourceModule.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ import com.threegap.bitnagil.data.auth.datasourceimpl.AuthLocalDataSourceImpl
66
import com.threegap.bitnagil.data.auth.datasourceimpl.AuthRemoteDataSourceImpl
77
import com.threegap.bitnagil.data.onboarding.datasource.OnBoardingDataSource
88
import com.threegap.bitnagil.data.onboarding.datasourceImpl.OnBoardingDataSourceImpl
9+
import com.threegap.bitnagil.data.writeroutine.datasource.WriteRoutineDataSource
10+
import com.threegap.bitnagil.data.writeroutine.datasourceImpl.WriteRoutineDataSourceImpl
911
import dagger.Binds
1012
import dagger.Module
1113
import dagger.hilt.InstallIn
@@ -27,4 +29,8 @@ abstract class DataSourceModule {
2729
@Binds
2830
@Singleton
2931
abstract fun bindOnBoardingDataSource(onBoardingDataSourceImpl: OnBoardingDataSourceImpl): OnBoardingDataSource
32+
33+
@Binds
34+
@Singleton
35+
abstract fun bindWriteRoutineDataSource(writeRoutineDataSourceImpl: WriteRoutineDataSourceImpl): WriteRoutineDataSource
3036
}

app/src/main/java/com/threegap/bitnagil/di/data/RepositoryModule.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@ package com.threegap.bitnagil.di.data
22

33
import com.threegap.bitnagil.data.auth.repositoryimpl.AuthRepositoryImpl
44
import com.threegap.bitnagil.data.onboarding.repositoryImpl.OnBoardingRepositoryImpl
5+
import com.threegap.bitnagil.data.writeroutine.repositoryImpl.WriteRoutineRepositoryImpl
56
import com.threegap.bitnagil.domain.auth.repository.AuthRepository
67
import com.threegap.bitnagil.domain.onboarding.repository.OnBoardingRepository
8+
import com.threegap.bitnagil.domain.writeroutine.repository.WriteRoutineRepository
79
import dagger.Binds
810
import dagger.Module
911
import dagger.hilt.InstallIn
@@ -21,4 +23,8 @@ abstract class RepositoryModule {
2123
@Binds
2224
@Singleton
2325
abstract fun bindOnBoardingRepository(onBoardingRepositoryImpl: OnBoardingRepositoryImpl): OnBoardingRepository
26+
27+
@Binds
28+
@Singleton
29+
abstract fun bindWriteRoutineRepository(writeRoutineRepositoryImpl: WriteRoutineRepositoryImpl): WriteRoutineRepository
2430
}

app/src/main/java/com/threegap/bitnagil/di/data/ServiceModule.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package com.threegap.bitnagil.di.data
22

33
import com.threegap.bitnagil.data.auth.service.AuthService
44
import com.threegap.bitnagil.data.onboarding.service.OnBoardingService
5+
import com.threegap.bitnagil.data.writeroutine.service.WriteRoutineService
56
import com.threegap.bitnagil.di.core.Auth
67
import com.threegap.bitnagil.di.core.NoneAuth
78
import com.threegap.bitnagil.network.token.ReissueService
@@ -26,6 +27,11 @@ object ServiceModule {
2627
fun providerOnBoardingService(@Auth retrofit: Retrofit): OnBoardingService =
2728
retrofit.create(OnBoardingService::class.java)
2829

30+
@Provides
31+
@Singleton
32+
fun providerWriteRoutineService(@Auth retrofit: Retrofit): WriteRoutineService =
33+
retrofit.create(WriteRoutineService::class.java)
34+
2935
@Provides
3036
@Singleton
3137
fun provideReissueService(@NoneAuth retrofit: Retrofit): ReissueService =
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package com.threegap.bitnagil.data.writeroutine.datasource
2+
3+
import com.threegap.bitnagil.data.writeroutine.model.dto.RoutineDto
4+
import com.threegap.bitnagil.data.writeroutine.model.request.EditRoutineRequest
5+
import com.threegap.bitnagil.data.writeroutine.model.request.RegisterRoutineRequest
6+
7+
interface WriteRoutineDataSource {
8+
suspend fun registerRoutine(request: RegisterRoutineRequest): Result<Unit>
9+
suspend fun editRoutine(request: EditRoutineRequest): Result<Unit>
10+
suspend fun getRoutine(routineId: String): Result<RoutineDto>
11+
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package com.threegap.bitnagil.data.writeroutine.datasourceImpl
2+
3+
import com.threegap.bitnagil.data.common.safeApiCall
4+
import com.threegap.bitnagil.data.writeroutine.datasource.WriteRoutineDataSource
5+
import com.threegap.bitnagil.data.writeroutine.model.dto.RoutineDto
6+
import com.threegap.bitnagil.data.writeroutine.model.dto.SubRoutineDto
7+
import com.threegap.bitnagil.data.writeroutine.model.request.EditRoutineRequest
8+
import com.threegap.bitnagil.data.writeroutine.model.request.RegisterRoutineRequest
9+
import com.threegap.bitnagil.data.writeroutine.service.WriteRoutineService
10+
import javax.inject.Inject
11+
12+
class WriteRoutineDataSourceImpl @Inject constructor(
13+
private val writeRoutineService: WriteRoutineService,
14+
) : WriteRoutineDataSource {
15+
override suspend fun registerRoutine(request: RegisterRoutineRequest): Result<Unit> {
16+
return safeApiCall {
17+
writeRoutineService.postRoutine(request)
18+
}
19+
}
20+
21+
override suspend fun editRoutine(request: EditRoutineRequest): Result<Unit> {
22+
return safeApiCall {
23+
writeRoutineService.patchRoutine(request)
24+
}
25+
}
26+
27+
override suspend fun getRoutine(routineId: String): Result<RoutineDto> {
28+
val routineDto = RoutineDto(
29+
routineId = routineId,
30+
routineName = "임시 루틴",
31+
repeatDay = listOf("MON"),
32+
executionTime = "12:00",
33+
subRoutineInfos = listOf(
34+
SubRoutineDto(
35+
subRoutineId = "id1",
36+
subRoutineName = "서브루틴 1",
37+
sortOrder = 1,
38+
),
39+
),
40+
)
41+
return Result.success(routineDto)
42+
}
43+
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package com.threegap.bitnagil.data.writeroutine.model.dto
2+
3+
import com.threegap.bitnagil.domain.writeroutine.model.Date
4+
import com.threegap.bitnagil.domain.writeroutine.model.RepeatDay
5+
import com.threegap.bitnagil.domain.writeroutine.model.Routine
6+
import com.threegap.bitnagil.domain.writeroutine.model.Time
7+
import kotlinx.serialization.SerialName
8+
import kotlinx.serialization.Serializable
9+
10+
@Serializable
11+
data class RoutineDto(
12+
@SerialName("routineId")
13+
val routineId: String,
14+
@SerialName("routineName")
15+
val routineName: String,
16+
@SerialName("repeatDay")
17+
val repeatDay: List<String>,
18+
@SerialName("executionTime")
19+
val executionTime: String,
20+
@SerialName("subRoutineInfos")
21+
val subRoutineInfos: List<SubRoutineDto>,
22+
) {
23+
fun toRoutine(): Routine {
24+
val dividedTimeStrings = executionTime.split(":")
25+
require(dividedTimeStrings.size >= 2) { "Invalid time format: $executionTime Expected format: HH:mm / HH:mm:ss" }
26+
27+
val startTime = Time(
28+
hour = dividedTimeStrings[0].toIntOrNull() ?: throw IllegalArgumentException("Invalid hour: ${dividedTimeStrings[0]}"),
29+
minute = dividedTimeStrings[1].toIntOrNull() ?: throw IllegalArgumentException("Invalid minute: ${dividedTimeStrings[1]}"),
30+
)
31+
32+
return Routine(
33+
id = routineId,
34+
name = routineName,
35+
subRoutines = subRoutineInfos.map { it.toSubRoutine() },
36+
repeatDays = repeatDay.mapNotNull {
37+
try {
38+
RepeatDay.valueOf(it)
39+
} catch (e: IllegalArgumentException) {
40+
null
41+
}
42+
},
43+
startTime = startTime,
44+
endDate = Date(
45+
year = 2099,
46+
month = 12,
47+
day = 31,
48+
),
49+
)
50+
}
51+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.threegap.bitnagil.data.writeroutine.model.dto
2+
3+
import com.threegap.bitnagil.domain.writeroutine.model.SubRoutine
4+
import kotlinx.serialization.SerialName
5+
import kotlinx.serialization.Serializable
6+
7+
@Serializable
8+
data class SubRoutineDto(
9+
@SerialName("subRoutineId")
10+
val subRoutineId: String,
11+
@SerialName("subRoutineName")
12+
val subRoutineName: String,
13+
@SerialName("sortOrder")
14+
val sortOrder: Int,
15+
) {
16+
fun toSubRoutine(): SubRoutine {
17+
return SubRoutine(
18+
id = subRoutineId,
19+
name = subRoutineName,
20+
sort = sortOrder,
21+
)
22+
}
23+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package com.threegap.bitnagil.data.writeroutine.model.dto
2+
3+
import com.threegap.bitnagil.domain.writeroutine.model.SubRoutineDiff
4+
import kotlinx.serialization.SerialName
5+
import kotlinx.serialization.Serializable
6+
7+
@Serializable
8+
data class SubRoutineInfosDiffDto(
9+
@SerialName("subRoutineId")
10+
val subRoutineId: String?,
11+
@SerialName("subRoutineName")
12+
val subRoutineName: String?,
13+
@SerialName("sortOrder")
14+
val sortOrder: Int?,
15+
) {
16+
companion object {
17+
fun fromSubRoutineDiff(subRoutineDiff: SubRoutineDiff): SubRoutineInfosDiffDto {
18+
return SubRoutineInfosDiffDto(
19+
subRoutineId = subRoutineDiff.id,
20+
subRoutineName = subRoutineDiff.name,
21+
sortOrder = subRoutineDiff.sort,
22+
)
23+
}
24+
}
25+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package com.threegap.bitnagil.data.writeroutine.model.request
2+
3+
import com.threegap.bitnagil.data.writeroutine.model.dto.SubRoutineInfosDiffDto
4+
import kotlinx.serialization.SerialName
5+
import kotlinx.serialization.Serializable
6+
7+
@Serializable
8+
data class EditRoutineRequest(
9+
@SerialName("routineId")
10+
val routineId: String,
11+
@SerialName("routineName")
12+
val routineName: String,
13+
@SerialName("repeatDay")
14+
val repeatDay: List<String>,
15+
@SerialName("executionTime")
16+
val executionTime: String,
17+
@SerialName("subRoutineInfos")
18+
val subRoutineInfos: List<SubRoutineInfosDiffDto>,
19+
)
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.threegap.bitnagil.data.writeroutine.model.request
2+
3+
import kotlinx.serialization.SerialName
4+
import kotlinx.serialization.Serializable
5+
6+
@Serializable
7+
data class RegisterRoutineRequest(
8+
@SerialName("routineName")
9+
val routineName: String,
10+
@SerialName("repeatDay")
11+
val repeatDay: List<String>,
12+
@SerialName("executionTime")
13+
val executionTime: String,
14+
@SerialName("subRoutineName")
15+
val subRoutineName: List<String>,
16+
)

0 commit comments

Comments
 (0)