Перейти к основному содержанию

Схема супабазы

Supabase выступает в качестве основного бэкенда приложения. Базовая база данных — PostgreSQL. Ниже описаны каждая таблица, ее столбцы и связи между ними.

Таблица: пользователи​

Хранит данные пользователей, зарегистрированных в приложении.

СтолбецТипОграниченияОписание
idintegerПК, автоинкрементУникальный идентификатор пользователя
nombrevarchar(100)НЕ НУЛЕВПолное имя пользователя
dnivarchar(20)УНИКАЛЬНЫЙДокумент, удостоверяющий личность. Используется в качестве идентификатора входа
contraseniaHashvarchar(255)Сохраненный пароль (в текущей версии — обычный текст)
emailvarchar(100)УНИКАЛЬНЫЙЭлектронная почта. Используется для восстановления пароля
telefonovarchar(20)Контактный телефон
adminintegerПО УМОЛЧАНИЮ 0Указывает, имеет ли пользователь роль администратора (0 = пользователь, 1 = администратор)
premiumbooleanПО УМОЛЧАНИЮ ложьУказывает, есть ли у пользователя активная Премиум-подписка
fecha_ini_premdateДата начала премиум-подписки
fecha_fin_premdateДата окончания премиум-подписки
fototextИзображение профиля в кодировке Base64

Соответствующий класс данных — models/Usuario.kt.

Таблица: машины​

Хранит каталог тренажеров.

СтолбецТипОграниченияОписание
idintegerПК, автоинкрементУникальный идентификатор машины
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.

Таблица: резервы​

Сохраняет резервации оборудования, сделанные пользователями.

СтолбецТипОграниченияОписание
idintegerПК, автоинкрементУникальный идентификатор бронирования
id_usuariointegerФК → user.idПользователь, сделавший бронирование
id_maquinaintegerФК → cars.idЗарезервированная машина
fechadateДата бронирования (yyyy-MM-dd)
hora_iniciotimeВремя начала зарезервированного слота
hora_fintimeВремя окончания зарезервированного слота
estadobooleanПО УМОЛЧАНИЮ правдаtrue = активно, false = отменено

Соответствующие классы данных: models/Reserva.kt и models/ReservaConDetalles.kt. Второй включает встроенные объекты Usuario и Maquina, полученные с помощью синтаксиса отношений PostgREST (*, usuarios(*), maquinas(*)).

Таблица: посуда​

Храните питательную посуду из каталога.

СтолбецТипОграниченияОписание
idintegerПК, автоинкрементУникальный идентификатор блюда
id_usuariointegerФК → user.idПользователь, предложивший блюдо (обнуляемое для системных блюд)
nombrevarchar(100)НЕ НУЛЕВНазвание блюда
descripciontextОписание или рецепт блюда
caloriasdouble precisionКалорийность одной порции
imagen_urlvarchar(255)URL-адрес изображения или строка Base64 изображения номера
fecha_subidatimestampДата и время создания записи
visibilidadbooleanПО УМОЛЧАНИЮ правдаУказывает, видно ли блюдо в каталоге
tiempovarcharПримерное время приготовления (например, «30 минут»)
aceptadobooleanПО УМОЛЧАНИЮ ложьУказывает, одобрено ли блюдо администратором

Соответствующий класс данных — models/Plato.kt.

Таблица: user_weight​

Хранит историю записей веса каждого пользователя.

СтолбецТипОграниченияОписание
idintegerПК, автоинкрементУникальный идентификатор записи
id_usuariointegerФК → user.idПользователь, которому принадлежит запись
pesodouble precisionНЕ НУЛЕВВес в килограммах
fechadateДата регистрации (yyyy-MM-dd)

Приложение накладывает ограничение на одну регистрацию в день на уровне пользовательского интерфейса. На экране проверяется, существует ли уже запись на текущую дату, прежде чем разрешить добавление новой.

Соответствующий класс данных — models/PesoUsuario.kt.

Таблица: выплаты​

Хранит историю транзакций по подписке Premium.

СтолбецТипОграниченияОписание
idintegerПК, автоинкрементУникальный идентификатор платежа
id_usuariointegerФК → user.idПользователь, совершивший платеж
montodouble precisionНЕ НУЛЕВСумма сделки в евро
fecha_pagodateДата оплаты
tipovarchar(50)Режим подписки (ежемесячная, полугодовая, годовая)
metodo_pagovarchar(25)Используемый способ оплаты (Карта, Bizum)

Соответствующий класс данных — models/Pago.kt.

Диаграмма отношений​

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

Все отношения - один-ко-многим. На уровне панели управления Supabase не определены явные внешние ключи; Ссылочная целостность управляется на уровне приложения.

Безопасность на уровне строк​

Политики безопасности на уровне строк Supabase (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"
// ...
}