Skip to content

Commit 2d2ccf7

Browse files
authored
Merge pull request #29 from YAPP-Github/feature/#28-terms-agreement-ui
[Feature/#28] 약관동의 화면 구현
2 parents a51a446 + f29fbc7 commit 2d2ccf7

20 files changed

Lines changed: 550 additions & 11 deletions

File tree

app/src/main/java/com/threegap/bitnagil/MainNavHost.kt

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import com.threegap.bitnagil.presentation.home.HomeScreen
88
import com.threegap.bitnagil.presentation.intro.IntroScreenContainer
99
import com.threegap.bitnagil.presentation.login.LoginScreenContainer
1010
import com.threegap.bitnagil.presentation.splash.SplashScreenContainer
11+
import com.threegap.bitnagil.presentation.terms.TermsAgreementScreenContainer
1112

1213
@Composable
1314
fun MainNavHost(
@@ -33,7 +34,17 @@ fun MainNavHost(
3334
}
3435

3536
composable<Route.Login> {
36-
LoginScreenContainer()
37+
LoginScreenContainer(
38+
navigateToHome = { navigator.navController.navigate(Route.Home) },
39+
navigateToTermsAgreement = { navigator.navController.navigate(Route.TermsAgreement) },
40+
)
41+
}
42+
43+
composable<Route.TermsAgreement> {
44+
TermsAgreementScreenContainer(
45+
navigateToOnBoarding = { },
46+
navigateToBack = { navigator.navController.popBackStack() },
47+
)
3748
}
3849

3950
composable<Route.Home> {

app/src/main/java/com/threegap/bitnagil/Route.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@ sealed interface Route {
1010
@Serializable
1111
data object Intro : Route
1212

13+
@Serializable
14+
data object TermsAgreement : Route
15+
1316
@Serializable
1417
data object Login : Route
1518

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
package com.threegap.bitnagil.data.auth.datasource
22

33
import com.threegap.bitnagil.data.auth.model.request.LoginRequestDto
4+
import com.threegap.bitnagil.data.auth.model.request.TermsAgreementRequestDto
45
import com.threegap.bitnagil.data.auth.model.response.LoginResponseDto
56

67
interface AuthRemoteDataSource {
78
suspend fun login(socialAccessToken: String, loginRequestDto: LoginRequestDto): Result<LoginResponseDto>
9+
10+
suspend fun submitAgreement(termsAgreementRequestDto: TermsAgreementRequestDto): Result<Unit>
811
}

data/src/main/java/com/threegap/bitnagil/data/auth/datasourceimpl/AuthRemoteDataSourceImpl.kt

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

33
import com.threegap.bitnagil.data.auth.datasource.AuthRemoteDataSource
44
import com.threegap.bitnagil.data.auth.model.request.LoginRequestDto
5+
import com.threegap.bitnagil.data.auth.model.request.TermsAgreementRequestDto
56
import com.threegap.bitnagil.data.auth.model.response.LoginResponseDto
67
import com.threegap.bitnagil.data.auth.service.AuthService
78
import com.threegap.bitnagil.data.common.safeApiCall
@@ -14,4 +15,9 @@ class AuthRemoteDataSourceImpl @Inject constructor(
1415
safeApiCall {
1516
authService.postLogin(socialAccessToken, loginRequestDto)
1617
}
18+
19+
override suspend fun submitAgreement(termsAgreementRequestDto: TermsAgreementRequestDto): Result<Unit> =
20+
safeApiCall {
21+
authService.submitAgreement(termsAgreementRequestDto)
22+
}
1723
}
Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,23 @@
11
package com.threegap.bitnagil.data.auth.mapper
22

3+
import com.threegap.bitnagil.data.auth.model.request.TermsAgreementRequestDto
34
import com.threegap.bitnagil.data.auth.model.response.LoginResponseDto
45
import com.threegap.bitnagil.domain.auth.model.AuthSession
6+
import com.threegap.bitnagil.domain.auth.model.TermsAgreement
57
import com.threegap.bitnagil.domain.auth.model.UserRole
68

7-
internal fun LoginResponseDto.toDomain() = AuthSession(
8-
accessToken = accessToken,
9-
refreshToken = refreshToken,
10-
role = UserRole.from(role),
11-
)
9+
// toDomain
10+
internal fun LoginResponseDto.toDomain() =
11+
AuthSession(
12+
accessToken = this.accessToken,
13+
refreshToken = this.refreshToken,
14+
role = UserRole.from(this.role),
15+
)
16+
17+
// toDto
18+
internal fun TermsAgreement.toDto() =
19+
TermsAgreementRequestDto(
20+
agreedToTermsOfService = this.agreedToTermsOfService,
21+
agreedToPrivacyPolicy = this.agreedToPrivacyPolicy,
22+
isOverFourteen = this.isOverFourteen,
23+
)
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.threegap.bitnagil.data.auth.model.request
2+
3+
import kotlinx.serialization.SerialName
4+
import kotlinx.serialization.Serializable
5+
6+
@Serializable
7+
data class TermsAgreementRequestDto(
8+
@SerialName("agreedToTermsOfService")
9+
val agreedToTermsOfService: Boolean,
10+
@SerialName("agreedToPrivacyPolicy")
11+
val agreedToPrivacyPolicy: Boolean,
12+
@SerialName("isOverFourteen")
13+
val isOverFourteen: Boolean,
14+
)

data/src/main/java/com/threegap/bitnagil/data/auth/repositoryimpl/AuthRepositoryImpl.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,10 @@ package com.threegap.bitnagil.data.auth.repositoryimpl
33
import com.threegap.bitnagil.data.auth.datasource.AuthLocalDataSource
44
import com.threegap.bitnagil.data.auth.datasource.AuthRemoteDataSource
55
import com.threegap.bitnagil.data.auth.mapper.toDomain
6+
import com.threegap.bitnagil.data.auth.mapper.toDto
67
import com.threegap.bitnagil.data.auth.model.request.LoginRequestDto
78
import com.threegap.bitnagil.domain.auth.model.AuthSession
9+
import com.threegap.bitnagil.domain.auth.model.TermsAgreement
810
import com.threegap.bitnagil.domain.auth.repository.AuthRepository
911
import javax.inject.Inject
1012

@@ -20,4 +22,9 @@ class AuthRepositoryImpl @Inject constructor(
2022

2123
override suspend fun updateAuthToken(accessToken: String, refreshToken: String): Result<Unit> =
2224
authLocalDataSource.updateAuthToken(accessToken, refreshToken)
25+
26+
override suspend fun submitAgreement(termsAgreement: TermsAgreement): Result<Unit> =
27+
authRemoteDataSource.submitAgreement(
28+
termsAgreement.toDto(),
29+
)
2330
}

data/src/main/java/com/threegap/bitnagil/data/auth/service/AuthService.kt

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

33
import com.threegap.bitnagil.data.auth.model.request.LoginRequestDto
4+
import com.threegap.bitnagil.data.auth.model.request.TermsAgreementRequestDto
45
import com.threegap.bitnagil.data.auth.model.response.LoginResponseDto
56
import com.threegap.bitnagil.network.model.BaseResponse
67
import retrofit2.http.Body
@@ -15,4 +16,9 @@ interface AuthService {
1516
@Header("SocialAccessToken") socialAccessToken: String,
1617
@Body loginRequestDto: LoginRequestDto,
1718
): BaseResponse<LoginResponseDto>
19+
20+
@POST("/api/v1/auth/agreements")
21+
suspend fun submitAgreement(
22+
@Body termsAgreementRequestDto: TermsAgreementRequestDto,
23+
): BaseResponse<Unit>
1824
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package com.threegap.bitnagil.domain.auth.model
2+
3+
data class TermsAgreement(
4+
val agreedToTermsOfService: Boolean,
5+
val agreedToPrivacyPolicy: Boolean,
6+
val isOverFourteen: Boolean,
7+
) {
8+
val isValid: Boolean
9+
get() = agreedToTermsOfService && agreedToPrivacyPolicy && isOverFourteen
10+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
package com.threegap.bitnagil.domain.auth.repository
22

33
import com.threegap.bitnagil.domain.auth.model.AuthSession
4+
import com.threegap.bitnagil.domain.auth.model.TermsAgreement
45

56
interface AuthRepository {
67
suspend fun login(socialAccessToken: String, socialType: String): Result<AuthSession>
78

89
suspend fun hasToken(): Boolean
910

1011
suspend fun updateAuthToken(accessToken: String, refreshToken: String): Result<Unit>
12+
13+
suspend fun submitAgreement(termsAgreement: TermsAgreement): Result<Unit>
1114
}

0 commit comments

Comments
 (0)