diff --git a/.idea/gradle.xml b/.idea/gradle.xml
index 3df99c92..2e7035fc 100644
--- a/.idea/gradle.xml
+++ b/.idea/gradle.xml
@@ -30,6 +30,9 @@
+
+
+
diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index 61e2af80..76b8aa00 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -2,6 +2,7 @@ plugins {
id("com.wap.wapp.application")
id("com.wap.wapp.firebase")
id("com.wap.wapp.compose")
+ id("com.wap.wapp.hilt")
alias(libs.plugins.ktlint)
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index e96ebac0..4aae73fa 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -3,6 +3,7 @@
xmlns:tools="http://schemas.android.com/tools">
{
with(pluginManager){
apply("com.wap.wapp.library")
apply("com.wap.wapp.compose")
+ apply("com.wap.wapp.hilt")
}
configureBinding()
}
diff --git a/build-logic/convention/src/main/java/com/wap/wapp/plugin/AndroidHiltPlugin.kt b/build-logic/convention/src/main/java/com/wap/wapp/plugin/AndroidHiltPlugin.kt
new file mode 100644
index 00000000..39aab5d6
--- /dev/null
+++ b/build-logic/convention/src/main/java/com/wap/wapp/plugin/AndroidHiltPlugin.kt
@@ -0,0 +1,23 @@
+package com.wap.wapp.plugin
+
+import org.gradle.api.Plugin
+import org.gradle.api.Project
+import org.gradle.api.artifacts.VersionCatalogsExtension
+import org.gradle.kotlin.dsl.dependencies
+import org.gradle.kotlin.dsl.getByType
+
+class AndroidHiltPlugin: Plugin {
+ override fun apply(target: Project) {
+ with(target){
+ pluginManager.apply("com.google.dagger.hilt.android")
+ pluginManager.apply("com.google.devtools.ksp")
+
+ val libs = extensions.getByType().named("libs")
+
+ dependencies {
+ "implementation"(libs.findLibrary("hilt").get())
+ "ksp"(libs.findLibrary("hilt.ksp").get())
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/build.gradle.kts b/build.gradle.kts
index 4c008c52..dc2b8b05 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -6,6 +6,7 @@ buildscript {
dependencies {
classpath(libs.android.build)
classpath(libs.kotlin.gradle)
+ classpath(libs.hilt.gradle)
classpath(libs.google.services.gradle)
classpath(libs.firebase.crashlytics.gradle)
}
@@ -15,7 +16,9 @@ plugins {
alias(libs.plugins.android.application) apply false
alias(libs.plugins.android.library) apply false
alias(libs.plugins.kotlin.android) apply false
+ alias(libs.plugins.dagger.hilt) apply false
alias(libs.plugins.google.services) apply false
alias(libs.plugins.firebase.crashlytics) apply false
alias(libs.plugins.ktlint) apply false
+ alias(libs.plugins.ksp) apply false
}
\ No newline at end of file
diff --git a/core/data/build.gradle.kts b/core/data/build.gradle.kts
index 6f0b25df..0716272a 100644
--- a/core/data/build.gradle.kts
+++ b/core/data/build.gradle.kts
@@ -1,5 +1,6 @@
plugins {
id("com.wap.wapp.library")
+ id("com.wap.wapp.hilt")
}
android {
@@ -22,6 +23,8 @@ android {
}
dependencies {
+ implementation(project(":core:model"))
+ implementation(project(":core:network"))
testImplementation(libs.junit)
androidTestImplementation(libs.androidx.test.junit)
androidTestImplementation(libs.androidx.test.espresso)
diff --git a/core/data/src/main/java/com/wap/wapp/core/data/repository/auth/AuthRepository.kt b/core/data/src/main/java/com/wap/wapp/core/data/repository/auth/AuthRepository.kt
new file mode 100644
index 00000000..f029e6c6
--- /dev/null
+++ b/core/data/src/main/java/com/wap/wapp/core/data/repository/auth/AuthRepository.kt
@@ -0,0 +1,7 @@
+package com.wap.wapp.core.data.repository.auth
+
+interface AuthRepository {
+ suspend fun hasPendingResult(): Boolean
+
+ suspend fun signIn(email: String): Result
+}
\ No newline at end of file
diff --git a/core/data/src/main/java/com/wap/wapp/core/data/repository/auth/AuthRepositoryImpl.kt b/core/data/src/main/java/com/wap/wapp/core/data/repository/auth/AuthRepositoryImpl.kt
new file mode 100644
index 00000000..15a634c5
--- /dev/null
+++ b/core/data/src/main/java/com/wap/wapp/core/data/repository/auth/AuthRepositoryImpl.kt
@@ -0,0 +1,16 @@
+package com.wap.wapp.core.data.repository.auth
+
+import com.wap.wapp.core.network.source.auth.AuthDataSource
+import javax.inject.Inject
+
+class AuthRepositoryImpl @Inject constructor(
+ private val authDataSource: AuthDataSource
+): AuthRepository {
+ override suspend fun hasPendingResult(): Boolean {
+ return authDataSource.hasPendingResult()
+ }
+
+ override suspend fun signIn(email: String): Result {
+ return authDataSource.signIn(email)
+ }
+}
\ No newline at end of file
diff --git a/core/data/src/main/java/com/wap/wapp/core/data/repository/di/AuthRepositoryModule.kt b/core/data/src/main/java/com/wap/wapp/core/data/repository/di/AuthRepositoryModule.kt
new file mode 100644
index 00000000..5cbdfe3c
--- /dev/null
+++ b/core/data/src/main/java/com/wap/wapp/core/data/repository/di/AuthRepositoryModule.kt
@@ -0,0 +1,19 @@
+package com.wap.wapp.core.data.repository.di
+
+import com.wap.wapp.core.data.repository.auth.AuthRepository
+import com.wap.wapp.core.data.repository.auth.AuthRepositoryImpl
+import dagger.Binds
+import dagger.Module
+import dagger.hilt.InstallIn
+import dagger.hilt.android.components.ActivityComponent
+import dagger.hilt.android.scopes.ActivityScoped
+
+@Module
+@InstallIn(ActivityComponent::class)
+abstract class AuthRepositoryModule {
+ @Binds
+ @ActivityScoped
+ abstract fun providesAuthRepository(
+ authRepositoryImpl: AuthRepositoryImpl
+ ): AuthRepository
+}
\ No newline at end of file
diff --git a/core/domain/.gitignore b/core/domain/.gitignore
new file mode 100644
index 00000000..42afabfd
--- /dev/null
+++ b/core/domain/.gitignore
@@ -0,0 +1 @@
+/build
\ No newline at end of file
diff --git a/core/domain/build.gradle.kts b/core/domain/build.gradle.kts
new file mode 100644
index 00000000..27e51251
--- /dev/null
+++ b/core/domain/build.gradle.kts
@@ -0,0 +1,31 @@
+plugins {
+ id("com.wap.wapp.library")
+ id("com.wap.wapp.hilt")
+}
+
+android {
+ namespace = "com.wap.wapp.core.domain"
+
+ defaultConfig {
+ testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
+ consumerProguardFiles("consumer-rules.pro")
+ }
+
+ buildTypes {
+ release {
+ isMinifyEnabled = false
+ proguardFiles(
+ getDefaultProguardFile("proguard-android-optimize.txt"),
+ "proguard-rules.pro"
+ )
+ }
+ }
+}
+
+dependencies {
+ implementation(project(":core:data"))
+ implementation(project(":core:model"))
+ testImplementation(libs.junit)
+ androidTestImplementation(libs.androidx.test.junit)
+ androidTestImplementation(libs.androidx.test.espresso)
+}
\ No newline at end of file
diff --git a/core/domain/consumer-rules.pro b/core/domain/consumer-rules.pro
new file mode 100644
index 00000000..e69de29b
diff --git a/core/domain/proguard-rules.pro b/core/domain/proguard-rules.pro
new file mode 100644
index 00000000..481bb434
--- /dev/null
+++ b/core/domain/proguard-rules.pro
@@ -0,0 +1,21 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
\ No newline at end of file
diff --git a/core/domain/src/androidTest/java/com/wap/wapp/core/domain/ExampleInstrumentedTest.kt b/core/domain/src/androidTest/java/com/wap/wapp/core/domain/ExampleInstrumentedTest.kt
new file mode 100644
index 00000000..f413836e
--- /dev/null
+++ b/core/domain/src/androidTest/java/com/wap/wapp/core/domain/ExampleInstrumentedTest.kt
@@ -0,0 +1,24 @@
+package com.wap.wapp.core.domain
+
+import androidx.test.platform.app.InstrumentationRegistry
+import androidx.test.ext.junit.runners.AndroidJUnit4
+
+import org.junit.Test
+import org.junit.runner.RunWith
+
+import org.junit.Assert.*
+
+/**
+ * Instrumented test, which will execute on an Android device.
+ *
+ * See [testing documentation](http://d.android.com/tools/testing).
+ */
+@RunWith(AndroidJUnit4::class)
+class ExampleInstrumentedTest {
+ @Test
+ fun useAppContext() {
+ // Context of the app under test.
+ val appContext = InstrumentationRegistry.getInstrumentation().targetContext
+ assertEquals("com.wap.wapp.core.domain.test", appContext.packageName)
+ }
+}
\ No newline at end of file
diff --git a/core/domain/src/main/java/com/wap/wapp/core/domain/auth/SignInUseCase.kt b/core/domain/src/main/java/com/wap/wapp/core/domain/auth/SignInUseCase.kt
new file mode 100644
index 00000000..7774c024
--- /dev/null
+++ b/core/domain/src/main/java/com/wap/wapp/core/domain/auth/SignInUseCase.kt
@@ -0,0 +1,13 @@
+package com.wap.wapp.core.domain.auth
+
+import com.wap.wapp.core.data.repository.auth.AuthRepository
+import dagger.hilt.android.scopes.ActivityScoped
+import javax.inject.Inject
+
+@ActivityScoped
+class SignInUseCase @Inject constructor(
+ private val repository: AuthRepository
+){
+ suspend operator fun invoke(email: String): Result =
+ repository.signIn(email)
+}
\ No newline at end of file
diff --git a/core/domain/src/test/java/com/wap/wapp/core/domain/ExampleUnitTest.kt b/core/domain/src/test/java/com/wap/wapp/core/domain/ExampleUnitTest.kt
new file mode 100644
index 00000000..2d0bb472
--- /dev/null
+++ b/core/domain/src/test/java/com/wap/wapp/core/domain/ExampleUnitTest.kt
@@ -0,0 +1,17 @@
+package com.wap.wapp.core.domain
+
+import org.junit.Test
+
+import org.junit.Assert.*
+
+/**
+ * Example local unit test, which will execute on the development machine (host).
+ *
+ * See [testing documentation](http://d.android.com/tools/testing).
+ */
+class ExampleUnitTest {
+ @Test
+ fun addition_isCorrect() {
+ assertEquals(4, 2 + 2)
+ }
+}
\ No newline at end of file
diff --git a/core/model/.gitignore b/core/model/.gitignore
new file mode 100644
index 00000000..42afabfd
--- /dev/null
+++ b/core/model/.gitignore
@@ -0,0 +1 @@
+/build
\ No newline at end of file
diff --git a/core/model/build.gradle.kts b/core/model/build.gradle.kts
new file mode 100644
index 00000000..f16fa27d
--- /dev/null
+++ b/core/model/build.gradle.kts
@@ -0,0 +1,21 @@
+plugins {
+ id("com.wap.wapp.library")
+}
+
+android {
+ namespace = "com.wap.wapp.core.model"
+
+ defaultConfig {
+ consumerProguardFiles("consumer-rules.pro")
+ }
+
+ buildTypes {
+ release {
+ isMinifyEnabled = false
+ proguardFiles(
+ getDefaultProguardFile("proguard-android-optimize.txt"),
+ "proguard-rules.pro"
+ )
+ }
+ }
+}
diff --git a/core/model/consumer-rules.pro b/core/model/consumer-rules.pro
new file mode 100644
index 00000000..e69de29b
diff --git a/core/model/proguard-rules.pro b/core/model/proguard-rules.pro
new file mode 100644
index 00000000..481bb434
--- /dev/null
+++ b/core/model/proguard-rules.pro
@@ -0,0 +1,21 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
\ No newline at end of file
diff --git a/core/network/.gitignore b/core/network/.gitignore
new file mode 100644
index 00000000..42afabfd
--- /dev/null
+++ b/core/network/.gitignore
@@ -0,0 +1 @@
+/build
\ No newline at end of file
diff --git a/core/network/build.gradle.kts b/core/network/build.gradle.kts
new file mode 100644
index 00000000..c84a8b68
--- /dev/null
+++ b/core/network/build.gradle.kts
@@ -0,0 +1,33 @@
+plugins {
+ id("com.wap.wapp.library")
+ id("com.wap.wapp.hilt")
+}
+
+android {
+ namespace = "com.wap.wapp.core.network"
+
+ defaultConfig {
+ testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
+ consumerProguardFiles("consumer-rules.pro")
+ }
+
+ buildTypes {
+ release {
+ isMinifyEnabled = false
+ proguardFiles(
+ getDefaultProguardFile("proguard-android-optimize.txt"),
+ "proguard-rules.pro"
+ )
+ }
+ }
+}
+
+dependencies {
+ implementation(platform(libs.firebase.bom))
+ implementation(libs.firebase.auth)
+ implementation(libs.firebase.firestore)
+
+ testImplementation(libs.junit)
+ androidTestImplementation(libs.androidx.test.junit)
+ androidTestImplementation(libs.androidx.test.espresso)
+}
\ No newline at end of file
diff --git a/core/network/consumer-rules.pro b/core/network/consumer-rules.pro
new file mode 100644
index 00000000..e69de29b
diff --git a/core/network/proguard-rules.pro b/core/network/proguard-rules.pro
new file mode 100644
index 00000000..481bb434
--- /dev/null
+++ b/core/network/proguard-rules.pro
@@ -0,0 +1,21 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
\ No newline at end of file
diff --git a/core/network/src/androidTest/java/com/wap/wapp/core/network/ExampleInstrumentedTest.kt b/core/network/src/androidTest/java/com/wap/wapp/core/network/ExampleInstrumentedTest.kt
new file mode 100644
index 00000000..59cdc68c
--- /dev/null
+++ b/core/network/src/androidTest/java/com/wap/wapp/core/network/ExampleInstrumentedTest.kt
@@ -0,0 +1,24 @@
+package com.wap.wapp.core.network
+
+import androidx.test.platform.app.InstrumentationRegistry
+import androidx.test.ext.junit.runners.AndroidJUnit4
+
+import org.junit.Test
+import org.junit.runner.RunWith
+
+import org.junit.Assert.*
+
+/**
+ * Instrumented test, which will execute on an Android device.
+ *
+ * See [testing documentation](http://d.android.com/tools/testing).
+ */
+@RunWith(AndroidJUnit4::class)
+class ExampleInstrumentedTest {
+ @Test
+ fun useAppContext() {
+ // Context of the app under test.
+ val appContext = InstrumentationRegistry.getInstrumentation().targetContext
+ assertEquals("com.wap.wapp.core.network.test", appContext.packageName)
+ }
+}
\ No newline at end of file
diff --git a/core/network/src/main/java/com/wap/wapp/core/network/di/AuthDataSourceModule.kt b/core/network/src/main/java/com/wap/wapp/core/network/di/AuthDataSourceModule.kt
new file mode 100644
index 00000000..34a55266
--- /dev/null
+++ b/core/network/src/main/java/com/wap/wapp/core/network/di/AuthDataSourceModule.kt
@@ -0,0 +1,19 @@
+package com.wap.wapp.core.network.di
+
+import com.wap.wapp.core.network.source.auth.AuthDataSource
+import com.wap.wapp.core.network.source.auth.AuthDataSourceImpl
+import dagger.Binds
+import dagger.Module
+import dagger.hilt.InstallIn
+import dagger.hilt.android.components.ActivityComponent
+import dagger.hilt.android.scopes.ActivityScoped
+
+@Module
+@InstallIn(ActivityComponent::class)
+abstract class AuthDataSourceModule {
+ @Binds
+ @ActivityScoped
+ abstract fun providesAuthDataSource(
+ authDataSourceImpl: AuthDataSourceImpl
+ ): AuthDataSource
+}
\ No newline at end of file
diff --git a/core/network/src/main/java/com/wap/wapp/core/network/di/NetworkModule.kt b/core/network/src/main/java/com/wap/wapp/core/network/di/NetworkModule.kt
new file mode 100644
index 00000000..38df53a7
--- /dev/null
+++ b/core/network/src/main/java/com/wap/wapp/core/network/di/NetworkModule.kt
@@ -0,0 +1,24 @@
+package com.wap.wapp.core.network.di
+
+import com.google.firebase.auth.FirebaseAuth
+import com.google.firebase.auth.ktx.auth
+import com.google.firebase.firestore.FirebaseFirestore
+import com.google.firebase.firestore.ktx.firestore
+import com.google.firebase.ktx.Firebase
+import dagger.Module
+import dagger.Provides
+import dagger.hilt.InstallIn
+import dagger.hilt.components.SingletonComponent
+import javax.inject.Singleton
+
+@Module
+@InstallIn(SingletonComponent::class)
+object NetworkModule {
+ @Provides
+ @Singleton
+ fun providesFirebaseAuth(): FirebaseAuth = Firebase.auth
+
+ @Provides
+ @Singleton
+ fun providesFirestore(): FirebaseFirestore = Firebase.firestore
+}
\ No newline at end of file
diff --git a/core/network/src/main/java/com/wap/wapp/core/network/source/auth/AuthDataSource.kt b/core/network/src/main/java/com/wap/wapp/core/network/source/auth/AuthDataSource.kt
new file mode 100644
index 00000000..6cb3d979
--- /dev/null
+++ b/core/network/src/main/java/com/wap/wapp/core/network/source/auth/AuthDataSource.kt
@@ -0,0 +1,13 @@
+package com.wap.wapp.core.network.source.auth
+
+interface AuthDataSource {
+ suspend fun hasPendingResult(): Boolean
+
+ suspend fun signIn(email: String): Result
+
+ suspend fun signUp(): Result
+
+ suspend fun signOut(): Result
+
+ suspend fun resign(): Result
+}
\ No newline at end of file
diff --git a/core/network/src/main/java/com/wap/wapp/core/network/source/auth/AuthDataSourceImpl.kt b/core/network/src/main/java/com/wap/wapp/core/network/source/auth/AuthDataSourceImpl.kt
new file mode 100644
index 00000000..65f3a408
--- /dev/null
+++ b/core/network/src/main/java/com/wap/wapp/core/network/source/auth/AuthDataSourceImpl.kt
@@ -0,0 +1,46 @@
+package com.wap.wapp.core.network.source.auth
+
+import android.app.Activity
+import android.content.Context
+import com.google.firebase.auth.FirebaseAuth
+import com.google.firebase.auth.OAuthProvider
+import com.wap.wapp.core.network.utils.await
+import dagger.hilt.android.qualifiers.ActivityContext
+import javax.inject.Inject
+
+class AuthDataSourceImpl @Inject constructor(
+ private val firebaseAuth: FirebaseAuth,
+ @ActivityContext private val context: Context
+): AuthDataSource {
+ override suspend fun hasPendingResult(): Boolean {
+ return firebaseAuth.pendingAuthResult != null
+ }
+
+ override suspend fun signIn(email: String): Result {
+ return runCatching {
+ val provider = OAuthProvider.newBuilder("github.com")
+ provider.addCustomParameter("login", email)
+
+ val activityContext = context as Activity
+
+ val result = firebaseAuth.startActivityForSignInWithProvider(
+ activityContext, provider.build()
+ ).await()
+
+ val user = checkNotNull(result.user)
+ user.uid
+ }
+ }
+
+ override suspend fun signUp(): Result {
+ TODO("Not yet implemented")
+ }
+
+ override suspend fun signOut(): Result {
+ TODO("Not yet implemented")
+ }
+
+ override suspend fun resign(): Result {
+ TODO("Not yet implemented")
+ }
+}
diff --git a/core/network/src/main/java/com/wap/wapp/core/network/utils/FirebaseUtils.kt b/core/network/src/main/java/com/wap/wapp/core/network/utils/FirebaseUtils.kt
new file mode 100644
index 00000000..89b1e12a
--- /dev/null
+++ b/core/network/src/main/java/com/wap/wapp/core/network/utils/FirebaseUtils.kt
@@ -0,0 +1,19 @@
+package com.wap.wapp.core.network.utils
+
+import com.google.android.gms.tasks.Task
+import kotlinx.coroutines.ExperimentalCoroutinesApi
+import kotlinx.coroutines.suspendCancellableCoroutine
+import kotlin.coroutines.resumeWithException
+
+@OptIn(ExperimentalCoroutinesApi::class)
+suspend fun Task.await(): T {
+ return suspendCancellableCoroutine { cont ->
+ addOnCompleteListener {
+ if (it.exception != null) {
+ cont.resumeWithException(it.exception!!)
+ } else {
+ cont.resume(it.result, null)
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/core/network/src/test/java/com/wap/wapp/core/network/ExampleUnitTest.kt b/core/network/src/test/java/com/wap/wapp/core/network/ExampleUnitTest.kt
new file mode 100644
index 00000000..090134c6
--- /dev/null
+++ b/core/network/src/test/java/com/wap/wapp/core/network/ExampleUnitTest.kt
@@ -0,0 +1,17 @@
+package com.wap.wapp.core.network
+
+import org.junit.Test
+
+import org.junit.Assert.*
+
+/**
+ * Example local unit test, which will execute on the development machine (host).
+ *
+ * See [testing documentation](http://d.android.com/tools/testing).
+ */
+class ExampleUnitTest {
+ @Test
+ fun addition_isCorrect() {
+ assertEquals(4, 2 + 2)
+ }
+}
\ No newline at end of file
diff --git a/feature/auth/build.gradle.kts b/feature/auth/build.gradle.kts
index 2caed247..0850c6c7 100644
--- a/feature/auth/build.gradle.kts
+++ b/feature/auth/build.gradle.kts
@@ -22,6 +22,8 @@ android {
}
dependencies {
+ implementation(project(":core:domain"))
+ implementation(project(":core:model"))
implementation(project(":core:designresource"))
implementation(project(":core:designsystem"))
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index d6bf8432..5ac83857 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -8,6 +8,7 @@ versionCode = "1"
gradleplugin = "8.1.2"
kotlin = "1.9.10"
+ksp = "1.9.10-1.0.13"
androidx-core = "1.12.0"
androidx-appcompat = "1.6.1"
@@ -34,9 +35,12 @@ junit = "4.13.2"
material = "1.9.0"
ktlint = "11.3.1"
+hilt = "2.48"
+
[libraries]
android-build = { module = "com.android.tools.build:gradle", version.ref = "gradleplugin" }
kotlin-gradle = { group = "org.jetbrains.kotlin", name = "kotlin-gradle-plugin", version.ref = "kotlin" }
+hilt-gradle = { group = "com.google.dagger", name = "hilt-android-gradle-plugin", version.ref = "hilt" }
kotlin = { group = "org.jetbrains.kotlin", name = "kotlin-stdlib", version.ref = "kotlin" }
@@ -69,6 +73,10 @@ firebase-crashlytics = { module = "com.google.firebase:firebase-crashlytics-ktx"
firebase-auth = { module = "com.google.firebase:firebase-auth-ktx" }
firebase-firestore = { module = "com.google.firebase:firebase-firestore-ktx" }
+hilt = { module = "com.google.dagger:hilt-android", version.ref = "hilt" }
+hilt-ksp = { module = "com.google.dagger:hilt-compiler", version.ref = "hilt" }
+hilt-plugin = { group = "com.google.dagger", name = "hilt-android-gradle-plugin", version.ref = "hilt" }
+
junit = { module = "junit:junit", version.ref = "junit" }
androidx-test-junit = { module = "androidx.test.ext:junit", version.ref = "androidx-test-junit" }
androidx-test-espresso = { module = "androidx.test.espresso:espresso-core", version.ref = "androidx-test-espresso" }
@@ -102,6 +110,8 @@ compose = [
android-application = { id = "com.android.application", version.ref = "gradleplugin" }
android-library = { id = "com.android.library", version.ref = "gradleplugin" }
kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
+ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" }
google-services = { id = "com.google.gms.google-services", version.ref = "google-services-plugin" }
firebase-crashlytics = { id = "com.google.firebase.crashlytics", version.ref = "google-crashlytics-plguin" }
+dagger-hilt = { id = "com.google.dagger.hilt.android", version.ref = "hilt" }
ktlint = { id = "org.jlleitschuh.gradle.ktlint", version.ref = "ktlint" }
diff --git a/settings.gradle.kts b/settings.gradle.kts
index 0e4c7aab..33adb72b 100644
--- a/settings.gradle.kts
+++ b/settings.gradle.kts
@@ -19,5 +19,8 @@ include(":core")
include(":core:data")
include(":feature")
include(":feature:auth")
+include(":core:domain")
+include(":core:network")
include(":core:designsystem")
include(":core:designresource")
+include(":core:model")