diff --git a/src/interface/web/app/settings/page.tsx b/src/interface/web/app/settings/page.tsx index 92d13ecf..ad8b88f5 100644 --- a/src/interface/web/app/settings/page.tsx +++ b/src/interface/web/app/settings/page.tsx @@ -460,51 +460,6 @@ export default function SettingsView() { } }; - const enableFreeTrial = async () => { - const formatDate = (dateString: Date) => { - const date = new Date(dateString); - return new Intl.DateTimeFormat("en-US", { - day: "2-digit", - month: "short", - year: "numeric", - }).format(date); - }; - - try { - const response = await fetch(`/api/subscription/trial`, { - method: "POST", - }); - if (!response.ok) throw new Error("Failed to enable free trial"); - - const responseBody = await response.json(); - - // Set updated user settings - if (responseBody.trial_enabled && userConfig) { - let newUserConfig = userConfig; - newUserConfig.subscription_state = SubscriptionStates.TRIAL; - const renewalDate = new Date( - Date.now() + userConfig.length_of_free_trial * 24 * 60 * 60 * 1000, - ); - newUserConfig.subscription_renewal_date = formatDate(renewalDate); - newUserConfig.subscription_enabled_trial_at = new Date().toISOString(); - setUserConfig(newUserConfig); - - // Notify user of free trial - toast({ - title: "🎉 Trial Enabled", - description: `Your free trial will end on ${newUserConfig.subscription_renewal_date}`, - }); - } - } catch (error) { - console.error("Error enabling free trial:", error); - toast({ - title: "⚠️ Failed to Enable Free Trial", - description: - "Failed to enable free trial. Try again or contact us at team@khoj.dev", - }); - } - }; - const saveName = async () => { if (!name) return; try { @@ -912,7 +867,7 @@ export default function SettingsView() { Resubscribe )) || - (userConfig.subscription_enabled_trial_at && ( + ( - )) || ( - )} diff --git a/src/khoj/database/adapters/__init__.py b/src/khoj/database/adapters/__init__.py index 6257de7b..3ab08ef2 100644 --- a/src/khoj/database/adapters/__init__.py +++ b/src/khoj/database/adapters/__init__.py @@ -265,25 +265,6 @@ async def aget_or_create_user_by_email(input_email: str, check_deliverability=Fa return user, is_new -@arequire_valid_user -async def astart_trial_subscription(user: KhojUser) -> Subscription: - subscription = await Subscription.objects.filter(user=user).afirst() - if not subscription: - raise HTTPException(status_code=400, detail="User does not have a subscription") - - if subscription.type == Subscription.Type.TRIAL: - raise HTTPException(status_code=400, detail="User already has a trial subscription") - - if subscription.enabled_trial_at: - raise HTTPException(status_code=400, detail="User already has a trial subscription") - - subscription.type = Subscription.Type.TRIAL - subscription.enabled_trial_at = datetime.now(tz=timezone.utc) - subscription.renewal_date = datetime.now(tz=timezone.utc) + timedelta(days=LENGTH_OF_FREE_TRIAL) - await subscription.asave() - return subscription - - async def aget_user_validated_by_email_verification_code(code: str, email: str) -> tuple[Optional[KhojUser], bool]: # Normalize the email address normalized_email, _ = normalize_email(email) diff --git a/src/khoj/routers/api_subscription.py b/src/khoj/routers/api_subscription.py index b24e3a9f..3f54ec16 100644 --- a/src/khoj/routers/api_subscription.py +++ b/src/khoj/routers/api_subscription.py @@ -1,14 +1,13 @@ -import json import logging import os from datetime import datetime, timezone from asgiref.sync import sync_to_async -from fastapi import APIRouter, Request, Response +from fastapi import APIRouter, Request from starlette.authentication import requires from khoj.database import adapters -from khoj.database.models import KhojUser, Subscription +from khoj.database.models import Subscription from khoj.routers.helpers import update_telemetry_state from khoj.utils import state @@ -102,9 +101,9 @@ async def subscribe(request: Request): ) success = user is not None elif event_type in {"customer.subscription.deleted"}: - # Reset the user to trial state + # Reset user subscription state when subscription is deleted user, is_new = await adapters.set_user_subscription( - customer_email, is_recurring=False, renewal_date=None, type=Subscription.Type.TRIAL + customer_email, is_recurring=False, renewal_date=None, type=Subscription.Type.STANDARD ) success = user is not None @@ -148,19 +147,3 @@ async def update_subscription(request: Request, operation: str): return {"success": False, "message": "No subscription found that is set to cancel"} return {"success": False, "message": "Invalid operation"} - - -@subscription_router.post("/trial", response_class=Response) -@requires(["authenticated"]) -async def start_trial(request: Request) -> Response: - user: KhojUser = request.user.object - - # Start a trial for the user - updated_subscription = await adapters.astart_trial_subscription(user) - - # Return trial status as a JSON response - return Response( - content=json.dumps({"trial_enabled": updated_subscription is not None}), - media_type="application/json", - status_code=200, - )