texlab / models /subscription.py
syk101's picture
Upload 239 files
d05a9d0 verified
from datetime import datetime
import json
import os
# Simple file-based storage for subscriptions
SUBSCRIPTIONS_FILE = 'data/subscriptions.json'
# Create data directory if it doesn't exist
os.makedirs(os.path.dirname(SUBSCRIPTIONS_FILE), exist_ok=True)
# Create empty subscriptions file if it doesn't exist
if not os.path.exists(SUBSCRIPTIONS_FILE):
with open(SUBSCRIPTIONS_FILE, 'w') as f:
json.dump({}, f)
class Subscription:
def __init__(self, user_id, plan_id, start_date, end_date, is_active=True):
self.user_id = user_id
self.plan_id = plan_id
self.start_date = start_date
self.end_date = end_date
self.is_active = is_active
self.created_at = datetime.now().isoformat()
@staticmethod
def get_by_user_id(user_id):
"""Get subscription by user ID"""
try:
with open(SUBSCRIPTIONS_FILE, 'r') as f:
subscriptions = json.load(f)
user_subscription = subscriptions.get(str(user_id))
if user_subscription:
return Subscription(
user_id=user_subscription['user_id'],
plan_id=user_subscription['plan_id'],
start_date=user_subscription['start_date'],
end_date=user_subscription['end_date'],
is_active=user_subscription['is_active']
)
return None
except Exception:
return None
@staticmethod
def create_or_update(user_id, plan_id, start_date, end_date, is_active=True):
"""Create or update subscription"""
try:
# Load existing subscriptions
if os.path.exists(SUBSCRIPTIONS_FILE):
with open(SUBSCRIPTIONS_FILE, 'r') as f:
subscriptions = json.load(f)
else:
subscriptions = {}
# Update or create subscription
subscriptions[str(user_id)] = {
'user_id': user_id,
'plan_id': plan_id,
'start_date': start_date,
'end_date': end_date,
'is_active': is_active,
'created_at': datetime.now().isoformat()
}
# Save subscriptions
with open(SUBSCRIPTIONS_FILE, 'w') as f:
json.dump(subscriptions, f, indent=2)
return Subscription(user_id, plan_id, start_date, end_date, is_active)
except Exception as e:
print(f"Error creating/updating subscription: {e}")
return None
@staticmethod
def cancel(user_id):
"""Cancel subscription for user"""
try:
# Load existing subscriptions
if os.path.exists(SUBSCRIPTIONS_FILE):
with open(SUBSCRIPTIONS_FILE, 'r') as f:
subscriptions = json.load(f)
else:
return False
# Update subscription status
if str(user_id) in subscriptions:
subscriptions[str(user_id)]['is_active'] = False
# Save subscriptions
with open(SUBSCRIPTIONS_FILE, 'w') as f:
json.dump(subscriptions, f, indent=2)
return True
return False
except Exception as e:
print(f"Error canceling subscription: {e}")
return False