Passer au contenu principal

Couche de référentiel

La couche référentiel soustrait l'accès à Supabase au reste de l'application. Chaque référentiel encapsule les opérations CRUD pour une entité spécifique. Toutes les méthodes sont des fonctions suspend qui s'exécutent sur Dispatchers.IO.

Localisateur de services​

di/ServiceLocator.kt agit comme un point d'accès aux référentiels. Chaque référentiel est instancié de manière lazy (une seule instance, créée au premier accès) :

object ServiceLocator {
val authRepository by lazy { AuthRepository() }
val usuarioRepository by lazy { UsuarioRepository() }
val maquinaRepository by lazy { MaquinaRepository() }
val reservaRepository by lazy { ReservaRepository() }
val platoRepository by lazy { PlatoRepository() }
val pesoRepository by lazy { PesoRepository() }
val pagoRepository by lazy { PagoRepository() }
}

Les ViewModels accèdent aux référentiels via ServiceLocator.xRepository.

## AuthRepository

Gère les opérations d’authentification et d’enregistrement.

MéthodeDescriptif
getUserByDni(dni)Recherchez un utilisateur par ID. Renvoie Usuario?
userExistsByDni(dni)Vérifiez si un DNI est déjà enregistré. Renvoie Boolean
verifyCredentials(dni, email)Vérifiez la paire DNI + email pour la récupération du mot de passe
updatePassword(userId, newPass)Met à jour le champ contraseniaHash de l'utilisateur
insertUser(nombre, dni, email, pass, telefono)Enregistrez un nouvel utilisateur avec admin=0 et premium=false

##Référentiel d'utilisateurs

Gère la lecture et la mise à jour du profil utilisateur.

MéthodeDescriptif
getById(id)Obtient un utilisateur par son identifiant. Renvoie Usuario?
update(id, nombre, email, telefono, pass, foto)Mettre à jour les champs de profil modifiables
updatePremium(id, isPremium, fechaIni, fechaFin)Activer ou désactiver l'abonnement Premium

MaquinaRepository​

Gérer le catalogue de machines.

MéthodeDescriptif
getAll()Obtient la liste complète des machines. Renvoie List<Maquina>
insert(maquina)Insérer une nouvelle machine
delete(id)Supprimer une machine par ID
activateMaintenance(id, desde, hasta)Marquer la machine comme non opérationnelle avec la gamme maintenance
deactivateMaintenance(id)Réactiver la machine et nettoyer les champs de maintenance

ReservaRepository​

Gérer les réserves de machines.

MéthodeDescriptif
getAll()Obtenez toutes les réservations avec les données utilisateur et machine intégrées
getByUser(userId)Obtenir les réservations d'un utilisateur spécifique
getByMachine(machineId)Obtenir les réservations actives d'une machine
insert(reserva)Créer une nouvelle réservation
delete(id)Annuler/supprimer une réservation par ID

Les requêtes de réservation utilisent la syntaxe de relation intégrée PostgREST (*, usuarios(*), maquinas(*)) pour récupérer les données utilisateur et machine en une seule requête.

PlatonRéférentiel​

Gérer le catalogue de plats nutritionnels.

MéthodeDescriptif
getAccepted()Obtient les plats avec aceptado=true et visibilidad=true
getPending()Récupère la vaisselle avec aceptado=false (uniquement pour les administrateurs)
insert(plato)Insérez une nouvelle plaque avec aceptado=false
accept(id)Approuver un plat : aceptado=true
delete(id)Supprimer une plaque définitivement

Référentiel Peso​

Gérer les enregistrements de poids corporel.

MéthodeDescriptif
getByUser(userId)Obtient l'historique de poids d'un utilisateur, trié par date croissante
insert(pesoUsuario)Insérer un nouvel enregistrement de poids
update(id, peso)Met à jour la valeur d'un enregistrement existant
delete(id)Supprimer un enregistrement de poids

PagoRepository​

Gérer l'historique des paiements d'abonnement.

MéthodeDescriptif
getByUser(userId)Obtient les paiements d'un utilisateur, triés par date décroissante
insert(pago)Enregistrer un nouveau paiement d'abonnement