diff --git a/src/app/build.gradle b/src/app/build.gradle
index 36bf23c..8694db6 100644
--- a/src/app/build.gradle
+++ b/src/app/build.gradle
@@ -5,7 +5,18 @@ plugins {
id "dagger.hilt.android.plugin"
}
+def keystorePropertiesFile = rootProject.file("app/keys/keystore.properties")
+def keystoreProperties = new Properties()
+keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
+
android {
+ signingConfigs {
+ release {
+ storeFile file(keystoreProperties['store'])
+ storePassword keystoreProperties['password']
+ keyPassword keystoreProperties['password']
+ }
+ }
namespace 'fr.iut.alldev.allin'
compileSdk 34
@@ -24,8 +35,15 @@ android {
buildTypes {
release {
+ minifyEnabled true
+ proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+ signingConfig signingConfigs.debug
+ }
+
+ debug {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+ signingConfig signingConfigs.debug
}
}
compileOptions {
diff --git a/src/app/debug/app-debug.aab b/src/app/debug/app-debug.aab
new file mode 100644
index 0000000..d2b5176
Binary files /dev/null and b/src/app/debug/app-debug.aab differ
diff --git a/src/app/keys/keystore.jks b/src/app/keys/keystore.jks
new file mode 100644
index 0000000..bb4e75c
Binary files /dev/null and b/src/app/keys/keystore.jks differ
diff --git a/src/app/keys/keystore.properties b/src/app/keys/keystore.properties
new file mode 100644
index 0000000..fe9ab09
--- /dev/null
+++ b/src/app/keys/keystore.properties
@@ -0,0 +1,2 @@
+store=keys/keystore.jks
+password=placeYourBets
\ No newline at end of file
diff --git a/src/app/keys/private_key.pepk b/src/app/keys/private_key.pepk
new file mode 100644
index 0000000..be8173b
Binary files /dev/null and b/src/app/keys/private_key.pepk differ
diff --git a/src/app/release/app-release.aab b/src/app/release/app-release.aab
new file mode 100644
index 0000000..621d252
Binary files /dev/null and b/src/app/release/app-release.aab differ
diff --git a/src/app/src/debug/res/values/strings.xml b/src/app/src/debug/res/values/strings.xml
new file mode 100644
index 0000000..851c1c6
--- /dev/null
+++ b/src/app/src/debug/res/values/strings.xml
@@ -0,0 +1,4 @@
+
+
+ Allin_DEBUG
+
\ No newline at end of file
diff --git a/src/app/src/main/AndroidManifest.xml b/src/app/src/main/AndroidManifest.xml
index b5080f8..7a815cd 100644
--- a/src/app/src/main/AndroidManifest.xml
+++ b/src/app/src/main/AndroidManifest.xml
@@ -2,6 +2,8 @@
+
+
Unit,
+ onConfirm: ()->Unit = onDismiss
+) {
+ if(enabled) {
+ AlertDialog(
+ title = {
+ Text(
+ text = title,
+ fontSize = 20.sp,
+ style = AllInTheme.typography.h1
+ )
+ },
+ text = {
+ Text(
+ text = text,
+ style = AllInTheme.typography.r
+ )
+ },
+ confirmButton = {
+ TextButton(
+ onClick = onConfirm
+ ) {
+ Text(
+ text = confirmText,
+ fontSize = 15.sp,
+ style = AllInTheme.typography.h1.copy(
+ brush = AllInTheme.colors.allIn_MainGradient
+ )
+ )
+ }
+
+ },
+ onDismissRequest = onDismiss,
+ containerColor = AllInTheme.themeColors.main_surface,
+ titleContentColor = AllInTheme.themeColors.on_main_surface,
+ textContentColor = AllInTheme.themeColors.on_background_2,
+ )
+ }
+}
+
+@Preview
+@Preview(uiMode = Configuration.UI_MODE_NIGHT_YES)
+@Composable
+private fun AllInAlertDialogPreview() {
+ AllInTheme {
+ AllInAlertDialog(
+ title = "Titre",
+ text = "Lorem Ipsum",
+ onDismiss = {}
+ )
+ }
+}
\ No newline at end of file
diff --git a/src/app/src/main/java/fr/iut/alldev/allin/ui/login/LoginScreen.kt b/src/app/src/main/java/fr/iut/alldev/allin/ui/login/LoginScreen.kt
index d9af848..2e11705 100644
--- a/src/app/src/main/java/fr/iut/alldev/allin/ui/login/LoginScreen.kt
+++ b/src/app/src/main/java/fr/iut/alldev/allin/ui/login/LoginScreen.kt
@@ -1,12 +1,19 @@
package fr.iut.alldev.allin.ui.login
import androidx.compose.animation.AnimatedVisibility
-import androidx.compose.foundation.*
+import androidx.compose.foundation.ExperimentalFoundationApi
+import androidx.compose.foundation.background
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.relocation.BringIntoViewRequester
+import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.text.ClickableText
+import androidx.compose.foundation.verticalScroll
+import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Text
-import androidx.compose.runtime.*
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
@@ -17,13 +24,10 @@ import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import androidx.hilt.navigation.compose.hiltViewModel
import fr.iut.alldev.allin.R
-import fr.iut.alldev.allin.ui.core.AllInGradientButton
-import fr.iut.alldev.allin.ui.core.AllInLoading
-import fr.iut.alldev.allin.ui.core.AllInPasswordField
-import fr.iut.alldev.allin.ui.core.AllInTextField
+import fr.iut.alldev.allin.ui.core.*
import fr.iut.alldev.allin.ui.theme.AllInTheme
-@OptIn(ExperimentalFoundationApi::class)
+@OptIn(ExperimentalFoundationApi::class, ExperimentalMaterial3Api::class)
@Composable
fun LoginScreen(
navigateToDashboard: ()->Unit,
@@ -33,6 +37,10 @@ fun LoginScreen(
val bringIntoViewRequester = BringIntoViewRequester()
val loading by remember{ loginViewModel.loading }
+ var hasLoginError by remember{ loginViewModel.hasError }
+
+ val (username, setUsername) = remember{ loginViewModel.username }
+ val (password, setPassword) = remember{ loginViewModel.password }
Box(
Modifier
@@ -68,15 +76,15 @@ fun LoginScreen(
AllInTextField(
modifier = Modifier.fillMaxWidth(),
placeholder = stringResource(id = R.string.username),
- value = "",
- onValueChange = { },
+ value = username,
+ onValueChange = setUsername,
bringIntoViewRequester = bringIntoViewRequester
)
AllInPasswordField(
modifier = Modifier.fillMaxWidth(),
placeholder = stringResource(id = R.string.password),
- value = "",
- onValueChange = { },
+ value = password,
+ onValueChange = setPassword,
bringIntoViewRequester = bringIntoViewRequester
)
}
@@ -135,4 +143,10 @@ fun LoginScreen(
AnimatedVisibility(visible = loading) {
AllInLoading()
}
+ AllInAlertDialog(
+ enabled = hasLoginError,
+ title = stringResource(id = R.string.Login_Error_Title),
+ text = stringResource(id = R.string.Login_Error_Content),
+ onDismiss = { hasLoginError = false }
+ )
}
\ No newline at end of file
diff --git a/src/app/src/main/java/fr/iut/alldev/allin/ui/login/LoginViewModel.kt b/src/app/src/main/java/fr/iut/alldev/allin/ui/login/LoginViewModel.kt
index 2fbe80f..a92bba6 100644
--- a/src/app/src/main/java/fr/iut/alldev/allin/ui/login/LoginViewModel.kt
+++ b/src/app/src/main/java/fr/iut/alldev/allin/ui/login/LoginViewModel.kt
@@ -4,6 +4,7 @@ import androidx.compose.runtime.mutableStateOf
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import dagger.hilt.android.lifecycle.HiltViewModel
+import fr.iut.alldev.allin.data.repository.UserRepository
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
@@ -11,18 +12,30 @@ import javax.inject.Inject
@HiltViewModel
class LoginViewModel @Inject constructor(
+ private val userRepository: UserRepository
) : ViewModel() {
var loading = mutableStateOf(false)
+ var hasError = mutableStateOf(false)
+
+ val username = mutableStateOf("")
+ val password = mutableStateOf("")
fun onLogin(
navigateToDashboard: ()->Unit
){
viewModelScope.launch {
loading.value = true
+
withContext(Dispatchers.IO) {
- Thread.sleep(3000)
+ try{
+ userRepository.login(username.value, password.value)
+ } catch (e: retrofit2.HttpException){
+ hasError.value = true
+ }
+ }
+ if(!hasError.value){
+ navigateToDashboard()
}
- navigateToDashboard()
loading.value = false
}
}
diff --git a/src/app/src/main/java/fr/iut/alldev/allin/ui/register/RegisterScreen.kt b/src/app/src/main/java/fr/iut/alldev/allin/ui/register/RegisterScreen.kt
index 014fbf8..5fcdacb 100644
--- a/src/app/src/main/java/fr/iut/alldev/allin/ui/register/RegisterScreen.kt
+++ b/src/app/src/main/java/fr/iut/alldev/allin/ui/register/RegisterScreen.kt
@@ -1,5 +1,6 @@
package fr.iut.alldev.allin.ui.register
+import androidx.compose.animation.AnimatedVisibility
import androidx.compose.foundation.*
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.relocation.BringIntoViewRequester
@@ -19,6 +20,7 @@ import androidx.compose.ui.unit.sp
import androidx.hilt.navigation.compose.hiltViewModel
import fr.iut.alldev.allin.R
import fr.iut.alldev.allin.ui.core.AllInGradientButton
+import fr.iut.alldev.allin.ui.core.AllInLoading
import fr.iut.alldev.allin.ui.core.AllInPasswordField
import fr.iut.alldev.allin.ui.core.AllInTextField
import fr.iut.alldev.allin.ui.theme.AllInTheme
@@ -30,6 +32,8 @@ fun RegisterScreen(
navigateToLogin: () -> Unit,
registerViewModel: RegisterViewModel = hiltViewModel(),
) {
+ val loading by remember{ registerViewModel.loading }
+
val (username, setUsername) = remember{ registerViewModel.username }
val (email, setEmail) = remember{ registerViewModel.email }
val (password, setPassword) = remember{ registerViewModel.password }
@@ -118,7 +122,9 @@ fun RegisterScreen(
) {
AllInGradientButton(
text = stringResource(id = R.string.Register),
- onClick = navigateToDashboard
+ onClick = {
+ registerViewModel.onRegister(navigateToDashboard)
+ }
)
Spacer(modifier = Modifier.height(30.dp))
Row(
@@ -145,4 +151,7 @@ fun RegisterScreen(
}
}
}
+ AnimatedVisibility(visible = loading) {
+ AllInLoading()
+ }
}
\ No newline at end of file
diff --git a/src/app/src/main/java/fr/iut/alldev/allin/ui/register/RegisterViewModel.kt b/src/app/src/main/java/fr/iut/alldev/allin/ui/register/RegisterViewModel.kt
index 50cee46..53cd8aa 100644
--- a/src/app/src/main/java/fr/iut/alldev/allin/ui/register/RegisterViewModel.kt
+++ b/src/app/src/main/java/fr/iut/alldev/allin/ui/register/RegisterViewModel.kt
@@ -2,8 +2,12 @@ package fr.iut.alldev.allin.ui.register
import androidx.compose.runtime.mutableStateOf
import androidx.lifecycle.ViewModel
+import androidx.lifecycle.viewModelScope
import dagger.hilt.android.lifecycle.HiltViewModel
import fr.iut.alldev.allin.data.repository.UserRepository
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.launch
+import kotlinx.coroutines.withContext
import javax.inject.Inject
@HiltViewModel
@@ -11,8 +15,28 @@ class RegisterViewModel @Inject constructor(
val userRepository: UserRepository
) : ViewModel() {
+ var loading = mutableStateOf(false)
+
val username = mutableStateOf("")
val email = mutableStateOf("")
val password = mutableStateOf("")
val passwordValidation = mutableStateOf("")
+
+ fun onRegister(
+ navigateToDashboard: ()->Unit
+ ){
+ viewModelScope.launch {
+ loading.value = true
+
+ withContext(Dispatchers.IO) {
+ userRepository.register(
+ username.value,
+ email.value,
+ password.value
+ )
+ }
+ navigateToDashboard()
+ loading.value = false
+ }
+ }
}
\ No newline at end of file
diff --git a/src/app/src/main/res/values-fr/strings.xml b/src/app/src/main/res/values-fr/strings.xml
index 2d04fbf..3cca4a7 100644
--- a/src/app/src/main/res/values-fr/strings.xml
+++ b/src/app/src/main/res/values-fr/strings.xml
@@ -11,6 +11,7 @@
S\'inscrire
Valider
Annuler
+ OK
Bets
@@ -36,6 +37,8 @@
Te revoilà !
Bon retour parmis nous tu nous as manqué !
+ Erreur de connexion
+ La connexion a échoué\nVeuillez réessayer.
Le sujet du bet.
Généralement la question à laquelle les participants devront répondre.
diff --git a/src/app/src/main/res/values/strings.xml b/src/app/src/main/res/values/strings.xml
index cc235c7..d339f48 100644
--- a/src/app/src/main/res/values/strings.xml
+++ b/src/app/src/main/res/values/strings.xml
@@ -14,6 +14,7 @@
Register
Validate
Cancel
+ OK
Bets
@@ -40,6 +41,8 @@
Welcome back !
We missed you.
+ Connection error
+ Failed to login\nPlease try again.
Question
Answer
diff --git a/src/build.gradle b/src/build.gradle
index 3acbbfe..8ffeef2 100644
--- a/src/build.gradle
+++ b/src/build.gradle
@@ -4,11 +4,13 @@ buildscript {
accompanist_version = '0.25.1'
hilt_version = "2.45"
}
+
}// Top-level build file where you can add configuration options common to all sub-projects/modules.
plugins {
id 'com.android.application' version '7.4.2' apply false
id 'com.android.library' version '7.4.2' apply false
id 'org.jetbrains.kotlin.android' version '1.7.0' apply false
- id("com.google.dagger.hilt.android") version "$hilt_version" apply false
+ id 'com.google.dagger.hilt.android' version "$hilt_version" apply false
+ id 'org.jetbrains.kotlin.plugin.serialization' version '1.7.0' apply false
+}
-}
\ No newline at end of file
diff --git a/src/data/build.gradle b/src/data/build.gradle
index f99eae0..853b789 100644
--- a/src/data/build.gradle
+++ b/src/data/build.gradle
@@ -2,9 +2,21 @@ plugins {
id 'com.android.library'
id 'org.jetbrains.kotlin.android'
id "kotlin-kapt"
+ id "kotlinx-serialization"
}
+def keystorePropertiesFile = rootProject.file("app/keys/keystore.properties")
+def keystoreProperties = new Properties()
+keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
+
android {
+ signingConfigs {
+ release {
+ storeFile file(keystoreProperties['store'])
+ storePassword keystoreProperties['password']
+ keyPassword keystoreProperties['password']
+ }
+ }
namespace 'fr.iut.alldev.allin.data'
compileSdk 34
@@ -18,8 +30,15 @@ android {
buildTypes {
release {
+ minifyEnabled true
+ proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+ signingConfig signingConfigs.debug
+ }
+
+ debug {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+ signingConfig signingConfigs.debug
}
}
compileOptions {
@@ -43,4 +62,11 @@ dependencies {
//Hilt
implementation "com.google.dagger:hilt-android:$hilt_version"
kapt "com.google.dagger:hilt-android-compiler:$hilt_version"
+
+ // Retrofit
+ api "com.squareup.retrofit2:retrofit:2.9.0"
+ implementation "com.squareup.okhttp3:okhttp:4.11.0"
+ implementation "com.squareup.okhttp3:logging-interceptor:4.11.0"
+ api "org.jetbrains.kotlinx:kotlinx-serialization-json:1.5.1"
+ implementation "com.jakewharton.retrofit:retrofit2-kotlinx-serialization-converter:0.8.0"
}
\ No newline at end of file
diff --git a/src/data/src/debug/java/fr/iut/alldev/allin/data/di/DebugModule.kt b/src/data/src/debug/java/fr/iut/alldev/allin/data/di/DebugModule.kt
new file mode 100644
index 0000000..75aa252
--- /dev/null
+++ b/src/data/src/debug/java/fr/iut/alldev/allin/data/di/DebugModule.kt
@@ -0,0 +1,9 @@
+package fr.iut.alldev.allin.data.di
+
+import dagger.Module
+import dagger.hilt.InstallIn
+import dagger.hilt.components.SingletonComponent
+
+@Module(includes = [DebugNetworkModule::class])
+@InstallIn(SingletonComponent::class)
+object DebugModule
\ No newline at end of file
diff --git a/src/data/src/debug/java/fr/iut/alldev/allin/data/di/DebugNetworkModule.kt b/src/data/src/debug/java/fr/iut/alldev/allin/data/di/DebugNetworkModule.kt
new file mode 100644
index 0000000..8b47e52
--- /dev/null
+++ b/src/data/src/debug/java/fr/iut/alldev/allin/data/di/DebugNetworkModule.kt
@@ -0,0 +1,25 @@
+package fr.iut.alldev.allin.data.di
+
+import dagger.Module
+import dagger.Provides
+import dagger.hilt.InstallIn
+import dagger.hilt.components.SingletonComponent
+import okhttp3.OkHttpClient
+import okhttp3.logging.HttpLoggingInterceptor
+import javax.inject.Singleton
+
+@Module
+@InstallIn(SingletonComponent::class)
+internal object DebugNetworkModule {
+
+ @Provides
+ @Singleton
+ fun provideOkHttpClient(): OkHttpClient =
+ OkHttpClient.Builder()
+ .addInterceptor(
+ HttpLoggingInterceptor().apply {
+ level = HttpLoggingInterceptor.Level.BODY
+ }
+ )
+ .build()
+}
\ No newline at end of file
diff --git a/src/data/src/main/java/fr/iut/alldev/allin/data/api/AllInApi.kt b/src/data/src/main/java/fr/iut/alldev/allin/data/api/AllInApi.kt
new file mode 100644
index 0000000..e96d2d4
--- /dev/null
+++ b/src/data/src/main/java/fr/iut/alldev/allin/data/api/AllInApi.kt
@@ -0,0 +1,19 @@
+package fr.iut.alldev.allin.data.api
+
+import fr.iut.alldev.allin.data.api.model.CheckUser
+import fr.iut.alldev.allin.data.api.model.ResponseUser
+import retrofit2.http.Body
+import retrofit2.http.POST
+
+
+interface AllInApi {
+ @POST("users/login")
+ suspend fun login(
+ @Body body: CheckUser
+ ): ResponseUser
+
+ @POST("users/register")
+ suspend fun register(
+ @Body body: ResponseUser
+ ): ResponseUser
+}
\ No newline at end of file
diff --git a/src/data/src/main/java/fr/iut/alldev/allin/data/api/model/ResponseUser.kt b/src/data/src/main/java/fr/iut/alldev/allin/data/api/model/ResponseUser.kt
new file mode 100644
index 0000000..122e39b
--- /dev/null
+++ b/src/data/src/main/java/fr/iut/alldev/allin/data/api/model/ResponseUser.kt
@@ -0,0 +1,20 @@
+package fr.iut.alldev.allin.data.api.model
+
+import androidx.annotation.Keep
+import kotlinx.serialization.Serializable
+
+@Keep
+@Serializable
+data class ResponseUser(
+ val username: String,
+ val email: String,
+ val password: String,
+ var nbCoins: Int,
+)
+
+@Keep
+@Serializable
+data class CheckUser(
+ val username: String,
+ val password: String,
+)
\ No newline at end of file
diff --git a/src/data/src/main/java/fr/iut/alldev/allin/data/di/ApiModule.kt b/src/data/src/main/java/fr/iut/alldev/allin/data/di/ApiModule.kt
new file mode 100644
index 0000000..9bc2238
--- /dev/null
+++ b/src/data/src/main/java/fr/iut/alldev/allin/data/di/ApiModule.kt
@@ -0,0 +1,23 @@
+package fr.iut.alldev.allin.data.di
+
+import dagger.Module
+import dagger.Provides
+import dagger.hilt.InstallIn
+import dagger.hilt.components.SingletonComponent
+import fr.iut.alldev.allin.data.api.AllInApi
+import fr.iut.alldev.allin.data.di.NetworkModule.createRetrofit
+import okhttp3.HttpUrl
+import okhttp3.OkHttpClient
+import javax.inject.Singleton
+
+@Module
+@InstallIn(SingletonComponent::class)
+class ApiModule {
+
+ @Provides
+ @Singleton
+ fun provideAllInApi(@AllInUrl url: HttpUrl, okHttpClient: OkHttpClient): AllInApi {
+ val retrofit = createRetrofit(url = url, okHttpClient = okHttpClient)
+ return retrofit.create(AllInApi::class.java)
+ }
+}
\ No newline at end of file
diff --git a/src/data/src/main/java/fr/iut/alldev/allin/data/di/NetworkModule.kt b/src/data/src/main/java/fr/iut/alldev/allin/data/di/NetworkModule.kt
new file mode 100644
index 0000000..05ada4a
--- /dev/null
+++ b/src/data/src/main/java/fr/iut/alldev/allin/data/di/NetworkModule.kt
@@ -0,0 +1,41 @@
+package fr.iut.alldev.allin.data.di
+
+import com.jakewharton.retrofit2.converter.kotlinx.serialization.asConverterFactory
+import dagger.Module
+import dagger.Provides
+import dagger.hilt.InstallIn
+import dagger.hilt.components.SingletonComponent
+import kotlinx.serialization.json.Json
+import okhttp3.HttpUrl
+import okhttp3.HttpUrl.Companion.toHttpUrl
+import okhttp3.MediaType.Companion.toMediaType
+import okhttp3.OkHttpClient
+import retrofit2.Retrofit
+import javax.inject.Qualifier
+
+internal val json by lazy {
+ Json {
+ ignoreUnknownKeys = true
+ encodeDefaults = false
+ }
+}
+
+@Qualifier
+@Retention(AnnotationRetention.BINARY)
+annotation class AllInUrl
+
+@Module
+@InstallIn(SingletonComponent::class)
+internal object NetworkModule {
+
+ @AllInUrl
+ @Provides
+ fun provideUrl(): HttpUrl = "https://codefirst.iut.uca.fr/containers/AllDev-api/".toHttpUrl()
+
+ fun createRetrofit(url: HttpUrl, okHttpClient: OkHttpClient): Retrofit =
+ Retrofit.Builder()
+ .client(okHttpClient)
+ .addConverterFactory(json.asConverterFactory("application/json".toMediaType()))
+ .baseUrl(url)
+ .build()
+}
\ No newline at end of file
diff --git a/src/data/src/main/java/fr/iut/alldev/allin/data/repository/UserRepository.kt b/src/data/src/main/java/fr/iut/alldev/allin/data/repository/UserRepository.kt
index 2b7ebe4..d441409 100644
--- a/src/data/src/main/java/fr/iut/alldev/allin/data/repository/UserRepository.kt
+++ b/src/data/src/main/java/fr/iut/alldev/allin/data/repository/UserRepository.kt
@@ -1,4 +1,13 @@
package fr.iut.alldev.allin.data.repository
abstract class UserRepository {
+ abstract suspend fun login(
+ username: String,
+ password: String
+ )
+ abstract suspend fun register(
+ username: String,
+ email: String,
+ password: String
+ )
}
\ No newline at end of file
diff --git a/src/data/src/main/java/fr/iut/alldev/allin/data/repository/impl/UserRepositoryImpl.kt b/src/data/src/main/java/fr/iut/alldev/allin/data/repository/impl/UserRepositoryImpl.kt
index 7e0194f..d946253 100644
--- a/src/data/src/main/java/fr/iut/alldev/allin/data/repository/impl/UserRepositoryImpl.kt
+++ b/src/data/src/main/java/fr/iut/alldev/allin/data/repository/impl/UserRepositoryImpl.kt
@@ -1,10 +1,32 @@
package fr.iut.alldev.allin.data.repository.impl
+import fr.iut.alldev.allin.data.api.AllInApi
+import fr.iut.alldev.allin.data.api.model.CheckUser
+import fr.iut.alldev.allin.data.api.model.ResponseUser
import fr.iut.alldev.allin.data.repository.UserRepository
import javax.inject.Inject
class UserRepositoryImpl @Inject constructor(
-
+ private val api: AllInApi,
) : UserRepository() {
+ override suspend fun login(username: String, password: String) {
+ api.login(
+ CheckUser(
+ username = username,
+ password = password
+ )
+ )
+ }
+
+ override suspend fun register(username: String, email: String, password: String) {
+ api.register(
+ ResponseUser(
+ username = username,
+ email = email,
+ password = password,
+ nbCoins = 0
+ )
+ )
+ }
}
\ No newline at end of file
diff --git a/src/data/src/release/java/fr.iut.alldev.allin.data.di/ReleaseModule.kt b/src/data/src/release/java/fr.iut.alldev.allin.data.di/ReleaseModule.kt
new file mode 100644
index 0000000..02df214
--- /dev/null
+++ b/src/data/src/release/java/fr.iut.alldev.allin.data.di/ReleaseModule.kt
@@ -0,0 +1,13 @@
+package fr.iut.alldev.allin.data.di
+
+import dagger.Module
+import dagger.Provides
+import dagger.hilt.InstallIn
+import dagger.hilt.components.SingletonComponent
+import okhttp3.OkHttpClient
+import okhttp3.logging.HttpLoggingInterceptor
+import javax.inject.Singleton
+
+@Module(includes = [ReleaseNetworkModule::class])
+@InstallIn(SingletonComponent::class)
+object ReleaseModule
\ No newline at end of file
diff --git a/src/data/src/release/java/fr.iut.alldev.allin.data.di/ReleaseNetworkModule.kt b/src/data/src/release/java/fr.iut.alldev.allin.data.di/ReleaseNetworkModule.kt
new file mode 100644
index 0000000..328e8a8
--- /dev/null
+++ b/src/data/src/release/java/fr.iut.alldev.allin.data.di/ReleaseNetworkModule.kt
@@ -0,0 +1,20 @@
+package fr.iut.alldev.allin.data.di
+
+import dagger.Module
+import dagger.Provides
+import dagger.hilt.InstallIn
+import dagger.hilt.components.SingletonComponent
+import okhttp3.OkHttpClient
+import okhttp3.logging.HttpLoggingInterceptor
+import javax.inject.Singleton
+
+@Module
+@InstallIn(SingletonComponent::class)
+internal object ReleaseNetworkModule {
+
+ @Provides
+ @Singleton
+ fun provideOkHttpClient(): OkHttpClient =
+ OkHttpClient.Builder()
+ .build()
+}
\ No newline at end of file