mirror of
https://github.com/khoaliber/khoj.git
synced 2026-03-08 05:39:13 +00:00
Keep user subscription state. Update it when user has unsubscribed
This commit is contained in:
@@ -103,10 +103,21 @@ async def create_google_user(token: dict) -> KhojUser:
|
|||||||
return user
|
return user
|
||||||
|
|
||||||
|
|
||||||
|
async def set_user_unsubscribed(email: str, type="standard") -> KhojUser:
|
||||||
|
user = await KhojUser.objects.filter(email=email, subscription_type=type).afirst()
|
||||||
|
if user:
|
||||||
|
user.is_subscribed = False
|
||||||
|
await user.asave()
|
||||||
|
return user
|
||||||
|
else:
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
async def set_user_subscribed(email: str, type="standard") -> KhojUser:
|
async def set_user_subscribed(email: str, type="standard") -> KhojUser:
|
||||||
user = await KhojUser.objects.filter(email=email).afirst()
|
user = await KhojUser.objects.filter(email=email).afirst()
|
||||||
if user:
|
if user:
|
||||||
user.subscription_type = type
|
user.subscription_type = type
|
||||||
|
user.is_subscribed = True
|
||||||
start_date = user.subscription_renewal_date or datetime.now()
|
start_date = user.subscription_renewal_date or datetime.now()
|
||||||
user.subscription_renewal_date = start_date + timedelta(days=30)
|
user.subscription_renewal_date = start_date + timedelta(days=30)
|
||||||
await user.asave()
|
await user.asave()
|
||||||
|
|||||||
17
src/database/migrations/0014_khojuser_is_subscribed.py
Normal file
17
src/database/migrations/0014_khojuser_is_subscribed.py
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
# Generated by Django 4.2.5 on 2023-11-08 19:40
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
dependencies = [
|
||||||
|
("database", "0013_khojuser_subscription_renewal_date_and_more"),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name="khojuser",
|
||||||
|
name="is_subscribed",
|
||||||
|
field=models.BooleanField(default=False),
|
||||||
|
),
|
||||||
|
]
|
||||||
@@ -22,6 +22,7 @@ class KhojUser(AbstractUser):
|
|||||||
subscription_type = models.CharField(
|
subscription_type = models.CharField(
|
||||||
max_length=20, choices=SubscriptionType.choices, default=SubscriptionType.TRIAL
|
max_length=20, choices=SubscriptionType.choices, default=SubscriptionType.TRIAL
|
||||||
)
|
)
|
||||||
|
is_subscribed = models.BooleanField(default=False)
|
||||||
subscription_renewal_date = models.DateTimeField(null=True, default=None)
|
subscription_renewal_date = models.DateTimeField(null=True, default=None)
|
||||||
|
|
||||||
def save(self, *args, **kwargs):
|
def save(self, *args, **kwargs):
|
||||||
|
|||||||
@@ -765,12 +765,16 @@ async def subscribe(request: Request):
|
|||||||
# Retrieve the customer's details
|
# Retrieve the customer's details
|
||||||
customer_id = event["data"]["object"]["customer"]
|
customer_id = event["data"]["object"]["customer"]
|
||||||
customer = stripe.Customer.retrieve(customer_id)
|
customer = stripe.Customer.retrieve(customer_id)
|
||||||
|
customer_email = customer["email"]
|
||||||
|
# Mark the customer as unsubscribed
|
||||||
|
user = await adapters.set_user_unsubscribed(customer_email)
|
||||||
|
if not user:
|
||||||
|
success = False
|
||||||
else:
|
else:
|
||||||
logger.warn(f"Unhandled Stripe event type: {event['type']}, {event['data']['object']}")
|
logger.warn(f"Unhandled Stripe event type: {event['type']}")
|
||||||
return {"success": False}
|
return {"success": False}
|
||||||
|
|
||||||
logger.info(f'Stripe subscription {event["type"]} for {customer["email"]}')
|
logger.info(f'Stripe subscription {event["type"]} for {customer["email"]}')
|
||||||
|
|
||||||
return {"success": success}
|
return {"success": success}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user