Implement dummy data layer

Implement dummy domain layer
This commit is contained in:
Nymos 2025-02-19 10:58:43 +03:00
parent 55b3ee8ee5
commit 328daeb684
8 changed files with 112 additions and 0 deletions

View File

@ -0,0 +1,6 @@
package com.nto.data.models
data class LoginData(
val successful: Boolean,
val message: String?
)

View File

@ -0,0 +1,7 @@
package com.nto.data.repository
import com.nto.data.models.LoginData
interface DataRepository {
suspend fun login(email: String, password: String): LoginData
}

View File

@ -0,0 +1,21 @@
package com.nto.data.repository
import com.nto.data.models.LoginData
import com.nto.data.utils.Provider
import javax.inject.Inject
class DataRepositoryImpl @Inject constructor() : DataRepository {
override suspend fun login(email: String, password: String): LoginData {
val result = Provider.provideRetrofit().login(
email, password
).execute()
if (result.isSuccessful) {
val body = result.body()
if (body != null) {
return body
}
}
return LoginData(false, result.message())
}
}

View File

@ -0,0 +1,22 @@
package com.nto.data.utils
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
import javax.inject.Singleton
@Module
@InstallIn(SingletonComponent::class)
object Provider {
@Provides
@Singleton
fun provideRetrofit(): RetrofitApi {
return Retrofit.Builder()
.baseUrl("https://test.com/")
.addConverterFactory(GsonConverterFactory.create())
.build().create(RetrofitApi::class.java)
}
}

View File

@ -0,0 +1,11 @@
package com.nto.data.utils
import com.nto.data.models.LoginData
import retrofit2.Call
import retrofit2.http.GET
import retrofit2.http.Query
interface RetrofitApi {
@GET("login")
fun login(@Query("email") email: String, @Query("password") password: String): Call<LoginData>
}

View File

@ -0,0 +1,7 @@
package com.nto.domain.repository
import com.nto.data.models.LoginData
interface DomainRepository {
suspend fun login(email: String, password: String): LoginData
}

View File

@ -0,0 +1,22 @@
package com.nto.domain.repository
import com.nto.data.models.LoginData
import com.nto.data.repository.DataRepositoryImpl
import java.io.IOException
import java.security.MessageDigest
import javax.inject.Inject
class DomainRepositoryImpl @Inject constructor(private val dataRepositoryImpl: DataRepositoryImpl) :
DomainRepository {
override suspend fun login(email: String, password: String): LoginData {
return try {
dataRepositoryImpl.login(
email = email,
password = MessageDigest.getInstance("SHA-256").digest(password.toByteArray())
.toString()
)
} catch (e: IOException) {
LoginData(false, "IO exception was thrown: ${e.message}")
}
}
}

View File

@ -0,0 +1,16 @@
package com.nto.domain.usecase
import com.nto.data.models.LoginData
import com.nto.domain.repository.DomainRepositoryImpl
import javax.inject.Inject
class LoginUseCase @Inject constructor(private val domainRepositoryImpl: DomainRepositoryImpl) {
fun checkCredentials(email: String, password: String): Boolean {
val emailRegex = Regex("^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}\$")
return password.isNotBlank() && emailRegex.matches(email)
}
suspend fun login(email: String, password: String): LoginData {
return domainRepositoryImpl.login(email, password)
}
}