diff --git a/bd_api/apps/account/models.py b/bd_api/apps/account/models.py index 521f8c07..9834dcb7 100644 --- a/bd_api/apps/account/models.py +++ b/bd_api/apps/account/models.py @@ -454,6 +454,23 @@ def __str__(self): def admin_email(self): return self.admin.email or "test@stripe.com" + @property + def subscribers_info(self) -> list[dict]: + info = [ + { + "email": self.admin.email, + "role": "admin", + } + ] + for subscriber in self.subscribers.all(): + info.append( + { + "email": subscriber.email, + "role": "subscriber", + } + ) + return info + @property def stripe_subscription(self): return self.subscription.plan.product.metadata.get("code", "") diff --git a/bd_api/apps/account_payment/graphql.py b/bd_api/apps/account_payment/graphql.py index d9f1c072..57594920 100644 --- a/bd_api/apps/account_payment/graphql.py +++ b/bd_api/apps/account_payment/graphql.py @@ -175,6 +175,14 @@ class Arguments: def mutate(cls, root, info, price_id): try: admin = info.context.user + + for s in [ + *admin.subscription_set.all(), + *admin.internal_subscription.all(), + ]: + if s.is_active: + return cls(errors=["Conta possui inscrição ativa"]) + price = DJStripePrice.objects.get(djstripe_id=price_id) subscription: DJStripeSubscription = admin.customer.subscribe( price=price.id, @@ -226,6 +234,14 @@ def mutate(cls, root, info, account_id, subscription_id): try: admin = info.context.user account = Account.objects.get(id=account_id) + + for s in [ + *account.subscription_set.all(), + *account.internal_subscription.all(), + ]: + if s.is_active: + return cls(errors=["Conta possui inscrição ativa"]) + subscription = Subscription.objects.get(id=subscription_id) assert admin.id == subscription.admin.id add_user(account.email)