Saltatu eduki nagusira

Datu ereduak

models paketeko datu-klase guztiak @Serializable edo kotlinx.serialization-rekin adierazita daude. Lehenespenez aldaezinak dira eta Supabase erantzunak deserializatzeko eta txertatzeko eta eguneratzeko eskaeren gorputzak serializatzeko erabiltzen dira.


Erabiltzailea​

Fichero: models/Usuario.kt Tabla Supabase: usuarios

@Serializable
data class Usuario(
@SerialName("id")
val id: Int = 0,
val nombre: String,
val dni: String,
val contraseniaHash: String,
val admin: Int,
val premium: Boolean,
val email: String? = null,
val telefono: String? = null,
val foto: String? = null,
@SerialName("fecha_ini_prem")
val fechaInicio: String? = null,
@SerialName("fecha_fin_prem")
val fechaFin: String? = null
)
EremuaMotaDeusezgarriaDeskribapena
idIntEzPK autoincremental (lehenetsia 0 txertatzean)
nombreStringEzIzen osoa
dniStringEzSaio-hasteko kredentzial gisa erabilitako NAN
contraseniaHashStringEzPasahitza (testu arrunta bertsio honetan)
adminIntEz0 = erabiltzailea, 1 = administratzailea
premiumBooleanEzHarpidetzaren egoera
emailString?BaiPosta elektronikoa
telefonoString?BaiHarremanetarako telefono zenbakia
fotoString?BaiProfileko irudia Base64
fechaInicioString?BaiPremium harpidetzaren hasiera-data (yyyy-MM-dd)
fechaFinString?BaiPremium harpidetzaren amaiera-data (yyyy-MM-dd)

fechaInicio eta fechaFin eremuak ProfileViewModel-n irakurtzen dira Premium harpidetzaren gainerako egunak kalkulatzeko eta ProfileScreen-n bistaratzeko.


##SaioDatuak

Fichero: models/SesionData.kt

data class SesionData(
val userId: Int,
val userName: String,
val isAdmin: Boolean,
val isPremium: Boolean,
val token: String = ""
)

SecureSessionManager-k erabilitako eredua erabiltzaileak iraun duen saioa irudikatzeko. Ez dago @Serializable-rekin ohartaturik ez dagoelako JSON-n serializatuta; eremuz eremu gordetzen da SharedPreferences-n.


Makina​

Fichero: models/Maquina.kt Tabla Supabase: maquinas

@Serializable
data class Maquina(
val id: Int,
val nombre: String,
val tipo: String? = null,
val estado: Int = 0,
val descripcion: String? = null,
val operativa: Boolean = true,
val foto: String? = null,
val mantenimiento_desde: String? = null,
val mantenimiento_hasta: String? = null
)
EremuaMotaDeusezgarriaDeskribapena
idIntEzPK autoincremental
nombreStringEzMakinaren izena
tipoString?BaiAriketa Kategoria
estadoIntEzEgoera-eremu generikoa (balio lehenetsia 0)
descripcionString?BaiDeskribapen zehatza
operativaBooleanEztrue = erreserbak egiteko erabilgarri
fotoString?BaiMakinaren irudia Base64
mantenimiento_desdeString?BaiMantentze-aldiaren hasiera (yyyy-MM-dd HH:mm)
mantenimiento_hastaString?BaiMantentze-aldiaren amaiera (yyyy-MM-dd HH:mm)

Erreserba​

Fichero: models/Reserva.kt Tabla Supabase: reservas

@Serializable
data class Reserva(
val id: Int? = null,
@SerialName("id_usuario") val idUsuario: Int,
@SerialName("id_maquina") val idMaquina: Int,
val fecha: String,
@SerialName("hora_inicio") val horaInicio: String,
@SerialName("hora_fin") val horaFin: String,
val estado: Boolean = true
)
EremuaMotaDeusezgarriaDeskribapena
idInt?BaiPK (txertatzeko nulua, Supabasek esleitutakoa)
idUsuarioIntEzFK → erabiltzaileak.id
idMaquinaIntEzFK → makinak.id
fechaStringEzErreserba data (yyyy-MM-dd)
horaInicioStringEzHasiera ordua (HH:mm)
horaFinStringEzAmaiera-ordua (HH:mm). Gehienez 60 minutu horaInicio
estadoBooleanEztrue = aktibo, false = bertan behera

ErreserbaConDetalles​

Kapsulatutako erlazioak dituzten kontsultetarako datu-klase hedatua (PostgREST JOIN inplizitua).

@Serializable
data class ReservaConDetalles(
val id: Int,
val fecha: String,
@SerialName("hora_inicio") val horaInicio: String,
@SerialName("hora_fin") val horaFin: String,
val estado: Boolean,
@SerialName("usuarios") val usuario: Usuario? = null,
@SerialName("maquinas") val maquina: Maquina? = null
)

"*, usuarios(*), maquinas(*)" zutabearekin lortzen da.


Platon​

Fichero: models/Plato.kt Tabla Supabase: platos

@Serializable
data class Plato(
val id: Int? = null,
@SerialName("id_usuario") val idUsuario: Int? = null,
val nombre: String,
val descripcion: String? = null,
val calorias: Double? = null,
@SerialName("imagen_url") val imagenUrl: String? = null,
@SerialName("fecha_subida") val fechaSubida: String? = null,
val visibilidad: Boolean = true,
val tiempo: String? = null,
val aceptado: Boolean = false
)
EremuaMotaDeusezgarriaDeskribapena
idInt?BaiPK (nulua txertatzean)
idUsuarioInt?BaiFK → users.id (sistemako plateretarako nulua)
nombreStringEzPlateraren izena
descripcionString?BaiErrezeta edo deskribapena
caloriasDouble?BaiKaloriak anoa bakoitzeko
imagenUrlString?BaiIrudiaren Base64 Katea
fechaSubidaString?BaiSorkuntza denbora-zigilua
visibilidadBooleanEztrue = katalogoan ikusgai
tiempoString?BaiTestu librean prestatzeko denbora (adibidez, "30 minutos")
aceptadoBooleanEzfalse = administratzaileak moderatzeko zain

PesoUsuario​

Fichero: models/PesoUsuario.kt Tabla Supabase: peso_usuario

@Serializable
data class PesoUsuario(
val id: Int? = null,
@SerialName("id_usuario") val idUsuario: Int,
val peso: Double,
val fecha: String
)
EremuaMotaDeusezgarriaDeskribapena
idInt?BaiPK (nulua txertatzean)
idUsuarioIntEzFK → erabiltzaileak.id
pesoDoubleEzPisua kilogramotan
fechaStringEzIzena emateko data (yyyy-MM-dd)

Ordaindu​

Fichero: models/Pago.kt Tabla Supabase: pagos

@Serializable
data class Pago(
val id: Int? = null,
@SerialName("id_usuario") val idUsuario: Int,
val monto: Double,
@SerialName("fecha_pago") val fechaPago: String,
val tipo: String,
@SerialName("metodo_pago") val metodoPago: String
)
EremuaMotaDeusezgarriaDeskribapena
idInt?BaiPK (nulua txertatzean)
idUsuarioIntEzFK → erabiltzaileak.id
montoDoubleEzZenbatekoa eurotan
fechaPagoStringEzOrdainketa data (yyyy-MM-dd)
tipoStringEzModalitatea: Hilerokoa, Semestralekoa, Urtekoa
metodoPagoStringEzMetodoa: Txartela, Bizum