Añadir la opcion de conexion local a la app
This commit is contained in:
@@ -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">
|
||||
<activity
|
||||
android:name=".MainActivity"
|
||||
android:exported="true"
|
||||
|
||||
@@ -7,11 +7,13 @@ import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.withContext
|
||||
import retrofit2.Retrofit
|
||||
import retrofit2.converter.gson.GsonConverterFactory
|
||||
import java.sql.Connection
|
||||
import java.sql.DriverManager
|
||||
import java.sql.SQLException
|
||||
|
||||
class PantryRepository {
|
||||
private val dbUrl = "jdbc:mariadb://mariadb.peta9.com:3306/despensa_db"
|
||||
private val publicDbUrl = "jdbc:mariadb://mariadb.peta9.com:3306/despensa_db"
|
||||
private val localDbUrl = "jdbc:mariadb://192.168.1.254:3306/despensa_db"
|
||||
private val dbUser = "despensa_dba"
|
||||
private val dbPassword = "Pedro@110387"
|
||||
|
||||
@@ -21,6 +23,16 @@ class PantryRepository {
|
||||
.build()
|
||||
.create(OpenFoodFactsApi::class.java)
|
||||
|
||||
private fun getConnection(): Connection {
|
||||
Class.forName("org.mariadb.jdbc.Driver")
|
||||
return try {
|
||||
DriverManager.setLoginTimeout(3)
|
||||
DriverManager.getConnection(publicDbUrl, dbUser, dbPassword)
|
||||
} catch (e: SQLException) {
|
||||
DriverManager.getConnection(localDbUrl, dbUser, dbPassword)
|
||||
}
|
||||
}
|
||||
|
||||
suspend fun getProductFromOFF(barcode: String): Result<OFFProduct?> {
|
||||
return try {
|
||||
val response = offApi.getProductByBarcode(barcode)
|
||||
@@ -37,8 +49,7 @@ class PantryRepository {
|
||||
suspend fun getAllProductsFromDb(): Result<List<Product>> {
|
||||
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<Boolean> {
|
||||
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<Boolean> {
|
||||
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<Boolean> {
|
||||
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<Boolean> {
|
||||
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<Product?> {
|
||||
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)
|
||||
|
||||
@@ -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<Boolean> {
|
||||
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<Boolean> {
|
||||
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)
|
||||
|
||||
Reference in New Issue
Block a user