Skip to content

Commit

Permalink
Merge pull request #24 from Team-Ampersand/feature/23_write_auth_doma…
Browse files Browse the repository at this point in the history
…in_logic

🔀 :: (#23) write auth domain logic
  • Loading branch information
Cjsghkd authored Sep 8, 2023
2 parents 3ca0e0e + 371729f commit 814742f
Show file tree
Hide file tree
Showing 17 changed files with 156 additions and 0 deletions.
1 change: 1 addition & 0 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ android {

dependencies {
implementation(project(":data"))
implementation(project(":domain"))

implementation(Dependency.Androidx.CORE_KTX)
implementation(Dependency.Androidx.APP_COMPAT)
Expand Down
15 changes: 15 additions & 0 deletions app/src/main/java/com/msg/dotori/module/RepositoryModule.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.msg.dotori.module

import com.msg.data.repository.AuthRepositoryImpl
import com.msg.domain.repository.AuthRepository
import dagger.Binds
import dagger.Module
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent

@Module
@InstallIn(SingletonComponent::class)
interface RepositoryModule {
@Binds
fun bindsAuthRepository(authRepositoryImpl: AuthRepositoryImpl): AuthRepository
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,13 @@
package com.msg.data.remote.dto.auth

import com.msg.domain.model.auth.LoginRequestModel

data class LoginRequest(
val email: String,
val password: String
)

fun LoginRequestModel.asLoginRequest() = LoginRequest(
email = email,
password = password
)
Original file line number Diff line number Diff line change
@@ -1,8 +1,17 @@
package com.msg.data.remote.dto.auth

import com.msg.domain.model.auth.LoginResponseModel

data class LoginResponse(
val accessToken: String,
val refreshToken: String,
val expiresAt: String,
val roles: Role
)

fun LoginResponse.asLoginResponseModel() = LoginResponseModel(
accessToken = accessToken,
refreshToken = refreshToken,
expiresAt = expiresAt,
roles = roles.asRoleModel()
)
12 changes: 12 additions & 0 deletions data/src/main/java/com/msg/data/remote/dto/auth/Role.kt
Original file line number Diff line number Diff line change
@@ -1,8 +1,20 @@
package com.msg.data.remote.dto.auth

import com.msg.domain.model.auth.RoleModel


enum class Role {
ROLE_ADMIN,
ROLE_MEMBER,
ROLE_COUNCILLOR,
ROLE_DEVELOPER
}

fun Role.asRoleModel(): RoleModel {
return when (this) {
Role.ROLE_ADMIN -> RoleModel.ROLE_ADMIN
Role.ROLE_MEMBER -> RoleModel.ROLE_MEMBER
Role.ROLE_COUNCILLOR -> RoleModel.ROLE_COUNCILLOR
Role.ROLE_DEVELOPER -> RoleModel.ROLE_DEVELOPER
}
}
Empty file.
30 changes: 30 additions & 0 deletions data/src/main/java/com/msg/data/repository/AuthRepositoryImpl.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package com.msg.data.repository

import com.msg.data.local.datasource.LocalDataSource
import com.msg.data.remote.datasource.auth.AuthDataSource
import com.msg.data.remote.dto.auth.asLoginRequest
import com.msg.data.remote.dto.auth.asLoginResponseModel
import com.msg.domain.model.auth.LoginRequestModel
import com.msg.domain.model.auth.LoginResponseModel
import com.msg.domain.repository.AuthRepository
import javax.inject.Inject

class AuthRepositoryImpl @Inject constructor(
private val authDataSource: AuthDataSource,
private val localDataSource: LocalDataSource
): AuthRepository {
override suspend fun login(loginRequest: LoginRequestModel): LoginResponseModel = authDataSource.login(loginRequest.asLoginRequest()).asLoginResponseModel()

override suspend fun tokenReissue(): LoginResponseModel = authDataSource.tokenReissue().asLoginResponseModel()
override suspend fun saveToken(
accessToken: String,
refreshToken: String,
accessExp: String,
refreshExp: String
) = localDataSource.saveToken(
accessToken,
refreshToken,
accessExp,
refreshExp
)
}
Empty file.
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.msg.domain.model.auth

data class LoginRequestModel(
val email: String,
val password: String
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.msg.domain.model.auth

data class LoginResponseModel(
val accessToken: String,
val refreshToken: String,
val expiresAt: String,
val roles: RoleModel
)
8 changes: 8 additions & 0 deletions domain/src/main/java/com/msg/domain/model/auth/RoleModel.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.msg.domain.model.auth

enum class RoleModel {
ROLE_ADMIN,
ROLE_MEMBER,
ROLE_COUNCILLOR,
ROLE_DEVELOPER
}
Empty file.
17 changes: 17 additions & 0 deletions domain/src/main/java/com/msg/domain/repository/AuthRepository.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.msg.domain.repository

import com.msg.domain.model.auth.LoginRequestModel
import com.msg.domain.model.auth.LoginResponseModel

interface AuthRepository {
suspend fun login(loginRequest: LoginRequestModel): LoginResponseModel

suspend fun tokenReissue(): LoginResponseModel

suspend fun saveToken(
accessToken: String,
refreshToken: String,
accessExp: String,
refreshExp: String
)
}
Empty file.
11 changes: 11 additions & 0 deletions domain/src/main/java/com/msg/domain/usecase/auth/LoginUseCase.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.msg.domain.usecase.auth

import com.msg.domain.model.auth.LoginRequestModel
import com.msg.domain.repository.AuthRepository
import javax.inject.Inject

class LoginUseCase @Inject constructor(
private val authRepository: AuthRepository
) {
suspend operator fun invoke(loginRequestModel: LoginRequestModel) = kotlin.runCatching { authRepository.login(loginRequestModel) }
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package com.msg.domain.usecase.auth

import com.msg.domain.repository.AuthRepository
import javax.inject.Inject

class SaveTokenUseCase @Inject constructor(
private val authRepository: AuthRepository
) {
suspend operator fun invoke(
accessToken: String,
refreshToken: String,
accessExp: String,
refreshExp: String
) = kotlin.runCatching {
authRepository.saveToken(
accessToken,
refreshToken,
accessExp,
refreshExp
)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.msg.domain.usecase.auth

import com.msg.domain.repository.AuthRepository
import javax.inject.Inject

class TokenReissueUseCase @Inject constructor(
private val authRepository: AuthRepository
) {
suspend operator fun invoke() = kotlin.runCatching { authRepository.tokenReissue() }
}

0 comments on commit 814742f

Please sign in to comment.