diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index fbb14f8..3c7d95e 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -16,7 +16,8 @@ android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" - android:theme="@style/Theme.Despensapp"> + android:theme="@style/Theme.Despensapp" + android:usesCleartextTraffic="true"> { return try { val response = offApi.getProductByBarcode(barcode) @@ -37,8 +49,7 @@ class PantryRepository { suspend fun getAllProductsFromDb(): Result> { return withContext(Dispatchers.IO) { try { - Class.forName("org.mariadb.jdbc.Driver") - val connection = DriverManager.getConnection(dbUrl, dbUser, dbPassword) + val connection = getConnection() val sql = "SELECT * FROM productos" val statement = connection.prepareStatement(sql) val resultSet = statement.executeQuery() @@ -70,8 +81,7 @@ class PantryRepository { suspend fun updateProductQuantity(productId: Int, newQuantity: Int): Result { return withContext(Dispatchers.IO) { try { - Class.forName("org.mariadb.jdbc.Driver") - val connection = DriverManager.getConnection(dbUrl, dbUser, dbPassword) + val connection = getConnection() val sql = "UPDATE productos SET cantidad = ? WHERE id = ?" val statement = connection.prepareStatement(sql) statement.setInt(1, newQuantity) @@ -92,20 +102,19 @@ class PantryRepository { cantidad: Int, minCantidad: Int, unidad: String, - categoria: String, + category: String, fechaCaducidad: String? ): Result { return withContext(Dispatchers.IO) { try { - Class.forName("org.mariadb.jdbc.Driver") - val connection = DriverManager.getConnection(dbUrl, dbUser, dbPassword) + val connection = getConnection() val sql = "UPDATE productos SET nombre = ?, cantidad = ?, cantidad_minima = ?, unidad = ?, categoria = ?, fecha_caducidad = ? WHERE id = ?" val statement = connection.prepareStatement(sql) statement.setString(1, nombre) statement.setInt(2, cantidad) statement.setInt(3, minCantidad) statement.setString(4, unidad) - statement.setString(5, categoria) + statement.setString(5, category) statement.setString(6, fechaCaducidad) statement.setInt(7, productId) @@ -130,8 +139,7 @@ class PantryRepository { ): Result { return withContext(Dispatchers.IO) { try { - Class.forName("org.mariadb.jdbc.Driver") - val connection = DriverManager.getConnection(dbUrl, dbUser, dbPassword) + val connection = getConnection() val sql = "INSERT INTO productos (barcode, nombre, cantidad, cantidad_minima, unidad, categoria, imagen_url, fecha_caducidad) VALUES (?, ?, ?, ?, ?, ?, ?, ?)" val statement = connection.prepareStatement(sql) statement.setString(1, barcode) @@ -155,8 +163,7 @@ class PantryRepository { suspend fun deleteProduct(productId: Int): Result { return withContext(Dispatchers.IO) { try { - Class.forName("org.mariadb.jdbc.Driver") - val connection = DriverManager.getConnection(dbUrl, dbUser, dbPassword) + val connection = getConnection() val sql = "DELETE FROM productos WHERE id = ?" val statement = connection.prepareStatement(sql) statement.setInt(1, productId) @@ -173,8 +180,7 @@ class PantryRepository { suspend fun getProductById(productId: Int): Result { return withContext(Dispatchers.IO) { try { - Class.forName("org.mariadb.jdbc.Driver") - val connection = DriverManager.getConnection(dbUrl, dbUser, dbPassword) + val connection = getConnection() val sql = "SELECT * FROM productos WHERE id = ?" val statement = connection.prepareStatement(sql) statement.setInt(1, productId) diff --git a/app/src/main/java/com/example/despensapp/data/repository/UserRepository.kt b/app/src/main/java/com/example/despensapp/data/repository/UserRepository.kt index 366b192..248f3e4 100644 --- a/app/src/main/java/com/example/despensapp/data/repository/UserRepository.kt +++ b/app/src/main/java/com/example/despensapp/data/repository/UserRepository.kt @@ -2,21 +2,32 @@ package com.example.despensapp.data.repository import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext +import java.sql.Connection import java.sql.DriverManager import java.sql.SQLException class UserRepository { - private val url = "jdbc:mariadb://mariadb.peta9.com:3306/despensa_db" + private val publicUrl = "jdbc:mariadb://mariadb.peta9.com:3306/despensa_db" + private val localUrl = "jdbc:mariadb://192.168.1.254:3306/despensa_db" private val user = "despensa_dba" private val password = "Pedro@110387" + private fun getConnection(): Connection { + Class.forName("org.mariadb.jdbc.Driver") + return try { + // Intentar primero por la URL pública + DriverManager.setLoginTimeout(3) // Timeout corto para fallar rápido si estamos en local + DriverManager.getConnection(publicUrl, user, password) + } catch (e: SQLException) { + // Si falla (ej. NAT Loopback en WiFi local), intentar por la IP local + DriverManager.getConnection(localUrl, user, password) + } + } + suspend fun registerUser(nombre: String, email: String, contrasena: String): Result { return withContext(Dispatchers.IO) { try { - // Forzar carga del driver - Class.forName("org.mariadb.jdbc.Driver") - - val connection = DriverManager.getConnection(url, user, password) + val connection = getConnection() val sql = "INSERT INTO usuarios (nombre_completo, email, contrasena) VALUES (?, ?, ?)" val statement = connection.prepareStatement(sql) statement.setString(1, nombre) @@ -31,8 +42,6 @@ class UserRepository { } else { Result.failure(Exception("No se pudo insertar el usuario")) } - } catch (e: SQLException) { - Result.failure(e) } catch (e: Exception) { Result.failure(e) } @@ -42,8 +51,7 @@ class UserRepository { suspend fun loginUser(email: String, contrasena: String): Result { return withContext(Dispatchers.IO) { try { - Class.forName("org.mariadb.jdbc.Driver") - val connection = DriverManager.getConnection(url, user, password) + val connection = getConnection() val sql = "SELECT * FROM usuarios WHERE email = ? AND contrasena = ?" val statement = connection.prepareStatement(sql) statement.setString(1, email)