Skip to content

Commit 103751b

Browse files
authored
Merge branch 'develop' into feature/#23-home-ui
2 parents cef21ac + bc9f7a0 commit 103751b

65 files changed

Lines changed: 3060 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
@@ -8,6 +8,8 @@ import com.threegap.bitnagil.data.onboarding.datasource.OnBoardingDataSource
88
import com.threegap.bitnagil.data.onboarding.datasourceImpl.OnBoardingDataSourceImpl
99
import com.threegap.bitnagil.data.routine.datasource.RoutineRemoteDataSource
1010
import com.threegap.bitnagil.data.routine.datasourceImpl.RoutineRemoteDataSourceImpl
11+
import com.threegap.bitnagil.data.writeroutine.datasource.WriteRoutineDataSource
12+
import com.threegap.bitnagil.data.writeroutine.datasourceImpl.WriteRoutineDataSourceImpl
1113
import dagger.Binds
1214
import dagger.Module
1315
import dagger.hilt.InstallIn
@@ -33,4 +35,8 @@ abstract class DataSourceModule {
3335
@Binds
3436
@Singleton
3537
abstract fun bindRoutineDataSource(routineDataSourceImpl: RoutineRemoteDataSourceImpl): RoutineRemoteDataSource
38+
39+
@Binds
40+
@Singleton
41+
abstract fun bindWriteRoutineDataSource(writeRoutineDataSourceImpl: WriteRoutineDataSourceImpl): WriteRoutineDataSource
3642
}

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@ import com.threegap.bitnagil.data.routine.repositoryImpl.RoutineRepositoryImpl
66
import com.threegap.bitnagil.domain.auth.repository.AuthRepository
77
import com.threegap.bitnagil.domain.onboarding.repository.OnBoardingRepository
88
import com.threegap.bitnagil.domain.routine.repository.RoutineRepository
9+
import com.threegap.bitnagil.data.writeroutine.repositoryImpl.WriteRoutineRepositoryImpl
10+
import com.threegap.bitnagil.domain.auth.repository.AuthRepository
11+
import com.threegap.bitnagil.domain.onboarding.repository.OnBoardingRepository
12+
import com.threegap.bitnagil.domain.writeroutine.repository.WriteRoutineRepository
913
import dagger.Binds
1014
import dagger.Module
1115
import dagger.hilt.InstallIn
@@ -27,4 +31,8 @@ abstract class RepositoryModule {
2731
@Binds
2832
@Singleton
2933
abstract fun bindRoutineRepository(routineRepositoryImpl: RoutineRepositoryImpl): RoutineRepository
34+
35+
@Binds
36+
@Singleton
37+
abstract fun bindWriteRoutineRepository(writeRoutineRepositoryImpl: WriteRoutineRepositoryImpl): WriteRoutineRepository
3038
}

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
@@ -3,6 +3,7 @@ package com.threegap.bitnagil.di.data
33
import com.threegap.bitnagil.data.auth.service.AuthService
44
import com.threegap.bitnagil.data.onboarding.service.OnBoardingService
55
import com.threegap.bitnagil.data.routine.service.RoutineService
6+
import com.threegap.bitnagil.data.writeroutine.service.WriteRoutineService
67
import com.threegap.bitnagil.di.core.Auth
78
import com.threegap.bitnagil.di.core.NoneAuth
89
import com.threegap.bitnagil.network.token.ReissueService
@@ -32,6 +33,11 @@ object ServiceModule {
3233
fun provideRoutineService(@Auth retrofit: Retrofit): RoutineService =
3334
retrofit.create(RoutineService::class.java)
3435

36+
@Provides
37+
@Singleton
38+
fun providerWriteRoutineService(@Auth retrofit: Retrofit): WriteRoutineService =
39+
retrofit.create(WriteRoutineService::class.java)
40+
3541
@Provides
3642
@Singleton
3743
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)