mirror of
https://github.com/khoaliber/khoj.git
synced 2026-03-07 21:29:13 +00:00
Fix updating subscription when invoice paid. Revert renewal_date logic
The actual issue was that `get_or_create_user_by_email' tried to create a subscription even if it already existed. With updated logic: - New subscription is only created when it doesn't already exist in `get_or_create_user_by_email' - `set_user_subscription' just updates the subscription state as user subscription object creation is already managed by `get_or_create_user_by_email'. So the other conditionals are unnecessary
This commit is contained in:
@@ -89,6 +89,8 @@ async def get_or_create_user_by_email(email: str) -> KhojUser:
|
|||||||
user, _ = await KhojUser.objects.filter(email=email).aupdate_or_create(defaults={"username": email, "email": email})
|
user, _ = await KhojUser.objects.filter(email=email).aupdate_or_create(defaults={"username": email, "email": email})
|
||||||
await user.asave()
|
await user.asave()
|
||||||
|
|
||||||
|
user_subscription = await Subscription.objects.filter(user=user).afirst()
|
||||||
|
if not user_subscription:
|
||||||
await Subscription.objects.acreate(user=user, type="trial")
|
await Subscription.objects.acreate(user=user, type="trial")
|
||||||
|
|
||||||
return user
|
return user
|
||||||
@@ -124,19 +126,11 @@ def get_user_subscription(email: str) -> Optional[Subscription]:
|
|||||||
async def set_user_subscription(
|
async def set_user_subscription(
|
||||||
email: str, is_recurring=None, renewal_date=None, type="standard"
|
email: str, is_recurring=None, renewal_date=None, type="standard"
|
||||||
) -> Optional[Subscription]:
|
) -> Optional[Subscription]:
|
||||||
# Get or create the user object
|
# Get or create the user object and their subscription
|
||||||
user = await get_or_create_user_by_email(email)
|
user = await get_or_create_user_by_email(email)
|
||||||
|
|
||||||
user_subscription = await Subscription.objects.filter(user=user).afirst()
|
user_subscription = await Subscription.objects.filter(user=user).afirst()
|
||||||
if not user_subscription:
|
|
||||||
user = await get_user_by_email(email)
|
# Update the user subscription state
|
||||||
if not user:
|
|
||||||
return None
|
|
||||||
user_subscription = await Subscription.objects.acreate(
|
|
||||||
user=user, type=type, is_recurring=is_recurring, renewal_date=renewal_date
|
|
||||||
)
|
|
||||||
return user_subscription
|
|
||||||
elif user_subscription:
|
|
||||||
user_subscription.type = type
|
user_subscription.type = type
|
||||||
if is_recurring is not None:
|
if is_recurring is not None:
|
||||||
user_subscription.is_recurring = is_recurring
|
user_subscription.is_recurring = is_recurring
|
||||||
@@ -146,8 +140,6 @@ async def set_user_subscription(
|
|||||||
user_subscription.renewal_date = renewal_date
|
user_subscription.renewal_date = renewal_date
|
||||||
await user_subscription.asave()
|
await user_subscription.asave()
|
||||||
return user_subscription
|
return user_subscription
|
||||||
else:
|
|
||||||
return None
|
|
||||||
|
|
||||||
|
|
||||||
def subscription_to_state(subscription: Subscription) -> str:
|
def subscription_to_state(subscription: Subscription) -> str:
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ async def subscribe(request: Request):
|
|||||||
if event_type in {"invoice.paid"}:
|
if event_type in {"invoice.paid"}:
|
||||||
# Mark the user as subscribed and update the next renewal date on payment
|
# Mark the user as subscribed and update the next renewal date on payment
|
||||||
subscription = stripe.Subscription.list(customer=customer_id).data[0]
|
subscription = stripe.Subscription.list(customer=customer_id).data[0]
|
||||||
renewal_date = datetime.fromtimestamp(subscription["lines"]["data"][0]["period"]["end"], tz=timezone.utc)
|
renewal_date = datetime.fromtimestamp(subscription["current_period_end"], tz=timezone.utc)
|
||||||
user = await adapters.set_user_subscription(customer_email, is_recurring=True, renewal_date=renewal_date)
|
user = await adapters.set_user_subscription(customer_email, is_recurring=True, renewal_date=renewal_date)
|
||||||
success = user is not None
|
success = user is not None
|
||||||
elif event_type in {"customer.subscription.updated"}:
|
elif event_type in {"customer.subscription.updated"}:
|
||||||
|
|||||||
Reference in New Issue
Block a user