انتقل إلى المحتوى الرئيسي

Modelos de datos

#نماذج البيانات

جميع فئات البيانات في الحزمة models تمت الإشارة إليها بـ @Serializable لـ kotlinx.serialization. إنها غير قابلة للتغيير بشكل افتراضي وتستخدم لإلغاء تسلسل استجابات Supabase ولتسلسل نصوص طلبات الإدراج والتحديث.


مستخدم​

فيشيرو: models/Usuario.kt الطبلة سوباباسي: 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
)
المجالاكتبلاغيةالوصف
idIntلاPK التزايدي التلقائي (الافتراضي 0 عند الإدراج)
nombreStringلاالاسم الكامل
dniStringلايستخدم DNI كبيانات اعتماد لتسجيل الدخول
contraseniaHashStringلاكلمة المرور (نص عادي في هذا الإصدار)
adminIntلا0 = المستخدم، 1 = المسؤول
premiumBooleanلاحالة الاشتراك
emailString?نعمالبريد الإلكتروني
telefonoString?نعمرقم هاتف الاتصال
fotoString?نعمصورة الملف الشخصي في Base64
fechaInicioString?نعمتاريخ بدء الاشتراك المميز (yyyy-MM-dd)
fechaFinString?نعمتاريخ انتهاء الاشتراك المميز (yyyy-MM-dd)

تتم قراءة الحقول fechaInicio و fechaFin في ProfileViewModel لحساب الأيام المتبقية من الاشتراك المميز وعرضها في ProfileScreen.


##بيانات الجلسة

فيشيرو: models/SesionData.kt

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

النموذج المستخدم بواسطة SecureSessionManager لتمثيل الجلسة المستمرة للمستخدم. لم تتم إضافة تعليقات توضيحية إليه بـ @Serializable لأنه لم يتم تسلسله إلى JSON؛ يتم تخزينه حقلاً بحقل في SharedPreferences.


آلة​

فيشيرو: models/Maquina.kt الطبلة سوباباسي: 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
)
المجالاكتبلاغيةالوصف
idIntلاتزايد تلقائي PK
nombreStringلااسم الآلة
tipoString?نعمفئة التمرين
estadoIntلاحقل الحالة العامة (القيمة الافتراضية 0)
descripcionString?نعموصف تفصيلي
operativaBooleanلاtrue = متاح للحجز
fotoString?نعمصورة الجهاز في Base64
mantenimiento_desdeString?نعمبداية فترة الصيانة (yyyy-MM-dd HH:mm)
mantenimiento_hastaString?نعمنهاية فترة الصيانة (yyyy-MM-dd HH:mm)

ريسيرفا​

فيشيرو: models/Reserva.kt الطبلة سوباباسي: 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
)
المجالاكتبلاغيةالوصف
idInt?نعمPK (خالية عند الإدراج، تم تعيينها بواسطة Supabase)
idUsuarioIntلاFK → users.id
idMaquinaIntلاFK → Machines.id
fechaStringلاتاريخ الحجز (yyyy-MM-dd)
horaInicioStringلاوقت البدء (HH:mm)
horaFinStringلاوقت الانتهاء (HH:mm). الحد الأقصى 60 دقيقة بعد horaInicio
estadoBooleanلاtrue = نشط، false = ملغى

ريسيرفاكونديتالي​

فئة البيانات الموسعة للاستعلامات ذات العلاقات المضمنة (PostgREST الانضمام الضمني).

@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(*)".


##أفلاطون

فيشيرو: models/Plato.kt الطبلة سوباباسي: 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
)
المجالاكتبلاغيةالوصف
idInt?نعمPK (فارغة عند الإدراج)
idUsuarioInt?نعمFK → users.id (فارغ لأطباق النظام)
nombreStringلااسم الطبق
descripcionString?نعموصفة أو وصف
caloriasDouble?نعمالسعرات الحرارية لكل وجبة
imagenUrlString?نعمصورة Base64 سلسلة
fechaSubidaString?نعمالطابع الزمني للإنشاء
visibilidadBooleanلاtrue = مرئي في الكتالوج
tiempoString?نعموقت التحضير بالنص الحر (على سبيل المثال "30 minutos")
aceptadoBooleanلاfalse = في انتظار الإشراف من قبل المسؤول

بيزو أوسواريو​

فيشيرو: models/PesoUsuario.kt الطبلة سوباباسي: peso_usuario

@Serializable
data class PesoUsuario(
val id: Int? = null,
@SerialName("id_usuario") val idUsuario: Int,
val peso: Double,
val fecha: String
)
المجالاكتبلاغيةالوصف
idInt?نعمPK (فارغة عند الإدراج)
idUsuarioIntلاFK → users.id
pesoDoubleلاالوزن بالكيلو جرام
fechaStringلاتاريخ التسجيل (yyyy-MM-dd)

يدفع​

فيشيرو: models/Pago.kt الطبلة سوباباسي: 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
)
المجالاكتبلاغيةالوصف
idInt?نعمPK (فارغة عند الإدراج)
idUsuarioIntلاFK → users.id
montoDoubleلاالمبلغ باليورو
fechaPagoStringلاتاريخ الدفع (yyyy-MM-dd)
tipoStringلاالطريقة: شهرية، نصف سنوية، سنوية
metodoPagoStringلاالطريقة: بطاقة، بيزوم