diff --git a/data/src/main/java/com/nto/data/models/LoginData.kt b/data/src/main/java/com/nto/data/models/LoginData.kt new file mode 100644 index 0000000..c0b4225 --- /dev/null +++ b/data/src/main/java/com/nto/data/models/LoginData.kt @@ -0,0 +1,6 @@ +package com.nto.data.models + +data class LoginData( + val successful: Boolean, + val message: String? +) \ No newline at end of file diff --git a/data/src/main/java/com/nto/data/repository/DataRepository.kt b/data/src/main/java/com/nto/data/repository/DataRepository.kt new file mode 100644 index 0000000..20bfea6 --- /dev/null +++ b/data/src/main/java/com/nto/data/repository/DataRepository.kt @@ -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 +} \ No newline at end of file diff --git a/data/src/main/java/com/nto/data/repository/DataRepositoryImpl.kt b/data/src/main/java/com/nto/data/repository/DataRepositoryImpl.kt new file mode 100644 index 0000000..1cfa144 --- /dev/null +++ b/data/src/main/java/com/nto/data/repository/DataRepositoryImpl.kt @@ -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()) + } + +} \ No newline at end of file diff --git a/data/src/main/java/com/nto/data/utils/Provider.kt b/data/src/main/java/com/nto/data/utils/Provider.kt new file mode 100644 index 0000000..277ef7f --- /dev/null +++ b/data/src/main/java/com/nto/data/utils/Provider.kt @@ -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) + } +} \ No newline at end of file diff --git a/data/src/main/java/com/nto/data/utils/RetrofitApi.kt b/data/src/main/java/com/nto/data/utils/RetrofitApi.kt new file mode 100644 index 0000000..025adfb --- /dev/null +++ b/data/src/main/java/com/nto/data/utils/RetrofitApi.kt @@ -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 +} \ No newline at end of file diff --git a/domain/src/main/java/com/nto/domain/repository/DomainRepository.kt b/domain/src/main/java/com/nto/domain/repository/DomainRepository.kt new file mode 100644 index 0000000..220e078 --- /dev/null +++ b/domain/src/main/java/com/nto/domain/repository/DomainRepository.kt @@ -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 +} \ No newline at end of file diff --git a/domain/src/main/java/com/nto/domain/repository/DomainRepositoryImpl.kt b/domain/src/main/java/com/nto/domain/repository/DomainRepositoryImpl.kt new file mode 100644 index 0000000..90c3884 --- /dev/null +++ b/domain/src/main/java/com/nto/domain/repository/DomainRepositoryImpl.kt @@ -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}") + } + } +} \ No newline at end of file diff --git a/domain/src/main/java/com/nto/domain/usecase/LoginUseCase.kt b/domain/src/main/java/com/nto/domain/usecase/LoginUseCase.kt new file mode 100644 index 0000000..1601108 --- /dev/null +++ b/domain/src/main/java/com/nto/domain/usecase/LoginUseCase.kt @@ -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) + } +} \ No newline at end of file