Système d'abonnement avec Laravel

a marqué ce sujet comme résolu.

Bonjour,

J’aimerais travailler sur un projet personnel dans le but de me perfectionner avec Laravel et la programmation orientée objet.

Je n’ai encore rien attaqué, je suis sur une phase d’analyse de mon projet et la conception de ma base de données. Je me pose une question sur la conception d’un système d’abonnement avec Stripe.

J’ai vu l’existence de Laravel Spark mais celui-ci est payant et comme ce projet est à but d’apprentissage je n’ai pas de budget pour ça.

Mon idée est de proposer un outil à deux types de profil derrière un abonnement. Une fois abonné, un utilisateur va pouvoir bénéficier des services proposés.

Un système de plan avec "upgrade/downgrade" est nécessaire car elle permet de bénéficier d’outils supplémentaires en fonction du plan.

Ma question est la suivante, dans ce genre de système est-ce qu’on autorise l’utilisateur à souscrire à plusieurs abonnements avec le même compte ?

Si c’est non (ce qui me paraît logique), une fois qu’un utilisateur a laissé son abonnement expirer et qu’il souhaite de nouveau utiliser le service comment ça se passe ? Souscription d’un nouvel abonnement ou ré-ouverture de l’ancien ?

Dans ma base de données je ne sais pas si j’ai besoin d’une relation "ManyToMany" ou "OneToMany" entre mon utilisateur et les abonnements.

Merci d’avance pour vos retours.

Salut,

Je pense qu’il est préférable de créer un nouvel abonnement plutôt que de mettre à jour l’ancien, afin de garder l’historique des (ré)abonnements, mais intégrer une notion de validité/expiration.
Ainsi un utilisateur serait toujours associé au plus à un abonnement actif, mais pourrait pointer vers plusieurs abonnements expirés.

Bonjour entwanne,

Merci de ta réponse.

Au début j’imaginais un abonnement par utilisateur, abonnement qui peut se ré-activer en cas d’expiration. Mais c’est vrai que ça pourrais être logique d’avoir un historique des abonnements (déjà expirés ou annulés). Par contre garder cette contrainte d’avoir un seul abonnement actif.

Du coup ça se matérialise par une relation "OneToMany" avec un utilisateur qui peut avoir plusieurs abonnements c’est bien ça ?

Encore merci

Du coup ça se matérialise par une relation "OneToMany" avec un utilisateur qui peut avoir plusieurs abonnements c’est bien ça ?

Ariol

Tout dépend de ce que te permet ton outil de modélisation, mais en gros c’est une one-to-one (ou nul) entre un utilisateur et un abonnement actif, et une one-to-many entre utilisateur et abonnements expirés.

Je vois bien l’idée.

Par contre je vais stocker tous mes abonnements actifs et expirés dans la même table. Mais je ne vois pas comment je peux avoir deux relations différentes (one-to-one et one-to-many) entre ma table utilisateur et ma table abonnement ?

Ou alors j’ai un ID_USER dans ma table abonnement pour faire mon one-to-many et j’ai un ID_ABONNEMENT dans ma table utilisateur pour y stocker l’ID de l’abonnement actif ?

Encore merci pour ton aide

Salut

Ce que tu exprimes me semble être une solution raisonnable. Après, je ne connais pas Eloquent, peut-être permet-il de définir une relation sur une paire de champs pour la "clé étrangère" (ID utilisateur et colonne active valant X ou Y selon la relation abonnement actif ou non) ? Ce serait une forme de polymorphisme technique, et cela permettrait d’éviter une colonne supplémentaire dans l’utilisateur.

+2 -0

Hello, si besoin avec Eloquent tu peux utiliser un scope pour définir ta relation d’abonnement actif via une sous-requête.

Comme ça tu as une seule vraie relation HasMany liant les abonnements à un user, et un scope pour récupérer celui qui est actif (en ajoutant un filtre à la requête de la relation).

Cf. ce passage de la doc Eloquent

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte