Portrait de Patrice GADEGBEPatrice GADEGBE

Rentapp

Rentapp est un prototype d’application de paiement des loyers, destiné à des locataires et à des propriétaires, dont le développement s’est interrompu en 2022 avant l’intégration d’un prestataire de paiement.

Rôle
Auteur de l’API ; application mobile développée avec un second contributeur
Période
De février à octobre 2022
État
Prototype. Prototype inachevé, paiement simulé
Technologies
Django 3.2, Django REST Framework, PostgreSQL, Flutter, flutter_bloc
Dépôts
Deux
Architecture de RentappUne application Flutter appelle une API Django servie par nginx et gunicorn, qui enregistre ses données dans PostgreSQL.ApplicationFlutter, flutter_blocjeton en stockage sécuriséAPIDjango 3.2, REST Frameworknginx et gunicornPostgreSQLbaux, échéances, paiementsHTTP, jetonORM
Figure 1. Architecture de Rentapp à l’automne 2022. Aucun prestataire de paiement ni passerelle de SMS n’y figure, faute d’avoir été intégrés.

Contexte

Rentapp devait permettre à un locataire de régler son loyer depuis son téléphone, par carte bancaire ou par argent mobile, et à un propriétaire de suivre les règlements de ses résidences. Le serveur modélise à cette fin les propriétaires, les résidences, les locataires, les baux, les échéances mensuelles et les paiements, tandis que l’application de 2022 proposait au locataire une vue de ses mois, une feuille de paiement et un reçu.

Le projet a connu deux remaniements successifs et n’a jamais été relié à un prestataire de paiement. Il m’a semblé préférable de le présenter pour ce qu’il est, à savoir un prototype dont certains choix de modélisation méritent d’être conservés.

Problème

Un bail produit une échéance par mois, et la solution habituelle consiste à les créer par une tâche planifiée, ce qui suppose un ordonnanceur à déployer et à surveiller pour un prototype qui n’en avait pas d’autre usage. Il fallait par ailleurs pouvoir dire sans ambiguïté si une échéance était réglée, et par quel moyen, et identifier un locataire par son numéro de téléphone plutôt que par une adresse électronique.

Réponse apportée

Des échéances générées à la lecture

Les échéances ne sont créées par aucune tâche de fond. Lorsqu’un locataire consulte ce qu’il doit, le bail parcourt les mois écoulés depuis sa création et crée l’échéance de chaque mois qui n’en possède pas encore, au montant du loyer.

def generate_due_payments(self):
    months = Util.months_between(self.created_at.date(), datetime.date.today())
    for month in months:
        PaymentDue.objects.get_or_create(due_date__month=month.month, due_date__year=month.year,
                                         defaults={
                                             'contract': self,
                                             'label': "Due",
                                             'amount': self.rent,
                                             'due_date': month,
                                         })
Extrait 1. Génération des échéances d’un bail, appelée à la lecture.

Un paiement rattaché à son instrument

Une échéance est réglée lorsqu’elle pointe vers un paiement, et l’arriéré d’un locataire se déduit de la somme des échéances qui n’en ont pas. Le paiement porte une référence unique et une contrainte de base de données lui impose de désigner une carte ou un compte d’argent mobile, si bien qu’aucun règlement ne peut être enregistré sans son moyen. Le reçu était quant à lui produit sur le téléphone, sous la forme d’un PDF muni d’un code QR.

Téléphone, code à usage unique et code PIN

La connexion par nom d’utilisateur et mot de passe a été remplacée en août 2022 par un parcours en trois temps : le numéro de téléphone et l’identifiant de l’appareil, un code à usage unique valable deux minutes, puis un code PIN choisi à l’inscription. L’inscription exige une validation récente du code, le même appareil et l’acceptation des conditions.

Limites et perspectives

Le paiement est simulé de bout en bout, aucun prestataire n’étant intégré, et aucune passerelle n’envoie le code à usage unique, que le serveur ne renvoie qu’en environnement de développement. L’extrait ci-dessus comporte de surcroît un défaut : la recherche d’une échéance existante ne porte que sur le mois et l’année, et non sur le bail, de sorte que deux baux partageraient la même échéance.

Le remaniement de la connexion a enfin désactivé les routes métier de l’API, que l’application continuait d’appeler lorsque le travail s’est arrêté ; les deux dépôts ne sont donc plus alignés. Les tests sont restés à l’état d’ébauches. L’application mobile a été ramenée en avril 2026 à un simple écran d’accueil, et une reprise du projet devrait repartir du modèle de données plutôt que du code existant.

Retour aux autres projets