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

مخطط سوبباس

تعمل Supabase كواجهة خلفية رئيسية للتطبيق. قاعدة البيانات الأساسية هي PostgreSQL. يتم وصف كل جدول وأعمدته والعلاقات بينهما أدناه.

الجدول: المستخدمين​

يخزن بيانات المستخدمين المسجلين في التطبيق.

العموداكتبالقيودالوصف
idintegerPK، الزيادة التلقائيةمعرف المستخدم الفريد
nombrevarchar(100)ليست فارغةاسم المستخدم الكامل
dnivarchar(20)فريدوثيقة الهوية الوطنية. يتم استخدامه كمعرف تسجيل الدخول
contraseniaHashvarchar(255)كلمة المرور المخزنة (نص عادي في الإصدار الحالي)
emailvarchar(100)فريدبريد إلكتروني. تستخدم لاستعادة كلمة المرور
telefonovarchar(20)رقم هاتف الاتصال
adminintegerالافتراضي 0يشير إلى ما إذا كان المستخدم لديه دور مسؤول (0 = مستخدم، 1 = مسؤول)
premiumbooleanالافتراضي خطأيشير إلى ما إذا كان المستخدم لديه اشتراك Premium نشط
fecha_ini_premdateتاريخ بدء الاشتراك المميز
fecha_fin_premdateتاريخ انتهاء الاشتراك المميز
fototextصورة الملف الشخصي المشفرة Base64

فئة البيانات المقابلة هي models/Usuario.kt.

الجدول: الآلات​

يخزن كتالوج آلات الصالة الرياضية.

العموداكتبالقيودالوصف
idintegerPK، الزيادة التلقائيةمعرف الجهاز الفريد
nombrevarchar(100)ليست فارغةالاسم المألوف للآلة
tipovarchar(50)فئة التمرين (كارديو، ظهر، ساق، صدر، إلخ)
estadointegerالافتراضي 0حقل الحالة العامة
descripciontextوصف الجهاز التفصيلي
operativabooleanصحيح افتراضييشير إلى ما إذا كان الجهاز متاحًا للحجز
mantenimiento_desdevarcharتاريخ ووقت بدء فترة الصيانة (yyyy-MM-dd HH:mm)
mantenimiento_hastavarcharتاريخ ووقت انتهاء فترة الصيانة (yyyy-MM-dd HH:mm)

فئة البيانات المقابلة هي models/Maquina.kt.

الجدول: الاحتياطيات​

يخزن حجوزات الآلات التي قام بها المستخدمون.

العموداكتبالقيودالوصف
idintegerPK، الزيادة التلقائيةمعرف الحجز الفريد
id_usuariointegerFK → users.idالمستخدم الذي قام بالحجز
id_maquinaintegerFK → Machines.idآلة محفوظة
fechadateتاريخ الحجز (yyyy-MM-dd)
hora_iniciotimeوقت بدء الفتحة المحجوزة
hora_fintimeوقت انتهاء الفترة المحجوزة
estadobooleanصحيح افتراضيtrue = نشط، false = ملغى

فئات البيانات المقابلة هي models/Reserva.kt وmodels/ReservaConDetalles.kt. يتضمن الثاني الكائنات Usuario و Maquina المضمنة، والتي تم الحصول عليها من خلال بناء جملة علاقة PostgREST (*, usuarios(*), maquinas(*)).

الطاولة: أطباق​

تخزين الأطباق الغذائية من الكتالوج.

العموداكتبالقيودالوصف
idintegerPK، الزيادة التلقائيةمعرف الطبق الفريد
id_usuariointegerFK → users.idالمستخدم الذي اقترح الطبق (لاغية لأطباق النظام)
nombrevarchar(100)ليست فارغةاسم الطبق
descripciontextوصف أو وصفة الطبق
caloriasdouble precisionمحتوى السعرات الحرارية لكل وجبة
imagen_urlvarchar(255)عنوان URL للصورة أو سلسلة Base64 لصورة اللوحة
fecha_subidatimestampسجل تاريخ الإنشاء والوقت
visibilidadbooleanصحيح افتراضييشير إلى ما إذا كان الطبق مرئيًا في الكتالوج
tiempovarcharوقت التحضير المقدر (على سبيل المثال، "30 دقيقة")
aceptadobooleanالافتراضي خطأيشير إلى ما إذا كان الطبق قد تمت الموافقة عليه من قبل المسؤول

فئة البيانات المقابلة هي models/Plato.kt.

الجدول: وزن المستخدم​

يخزن تاريخ سجلات الوزن لكل مستخدم.

العموداكتبالقيودالوصف
idintegerPK، الزيادة التلقائيةمعرف السجل الفريد
id_usuariointegerFK → users.idالمستخدم الذي ينتمي إليه السجل
pesodouble precisionليست فارغةالوزن بالكيلو جرام
fechadateتاريخ التسجيل (yyyy-MM-dd)

يفرض التطبيق قيودًا على تسجيل واحد يوميًا على مستوى واجهة المستخدم. تتحقق الشاشة مما إذا كان هناك سجل موجود بالفعل للتاريخ الحالي قبل السماح بإضافة سجل جديد.

فئة البيانات المقابلة هي models/PesoUsuario.kt.

الجدول: المدفوعات​

يخزن سجل معاملات الاشتراك المميز.

العموداكتبالقيودالوصف
idintegerPK، الزيادة التلقائيةمعرف الدفع الفريد
id_usuariointegerFK → users.idالمستخدم الذي قام بالدفع
montodouble precisionليست فارغةمبلغ المعاملة باليورو
fecha_pagodateتاريخ السداد
tipovarchar(50)وضع الاشتراك (شهري، نصف سنوي، سنوي)
metodo_pagovarchar(25)طريقة الدفع المستخدمة (بطاقة، بيزوم)

فئة البيانات المقابلة هي models/Pago.kt.

مخطط العلاقة​

usuarios (id)
|
|--< reservas (id_usuario) >-- maquinas (id)
|
|--< peso_usuario (id_usuario)
|
|--< platos (id_usuario)
|
|--< pagos (id_usuario)

العلاقات كلها واحد إلى متعدد. لم يتم تحديد أي مفاتيح خارجية صريحة على مستوى لوحة معلومات Supabase؛ تتم إدارة التكامل المرجعي على مستوى التطبيق.

الأمان على مستوى الصف​

لم يتم تكوين سياسات Supabase Row Level Security (RLS) في هذا الإصدار. يتم الوصول إلى البيانات باستخدام anon key، لذا يمكن لأي عميل لديه المفتاح القراءة والكتابة في جميع الجداول. في بيئة الإنتاج، سيكون من الضروري تحديد سياسات RLS المناسبة أو استخدام service_role key حصريًا من واجهة خلفية موثوقة.

ثوابت قاعدة البيانات​

تتمركز أسماء الجداول والأعمدة في DbConstants.kt من خلال الكائنات DbTables و DbColumns، مع تجنب استخدام السلاسل الحرفية المنتشرة في جميع أنحاء الكود:

object DbTables {
const val USUARIOS = "usuarios"
const val MAQUINAS = "maquinas"
const val PLATOS = "platos"
const val PAGOS = "pagos"
const val RESERVAS = "reservas"
const val PESO_USUARIO = "peso_usuario"
}

object DbColumns {
const val ID = "id"
const val DNI = "dni"
const val NOMBRE = "nombre"
// ...
}