texlab / models /user.py
syk101's picture
Upload 239 files
d05a9d0 verified
from flask_login import UserMixin
from datetime import datetime
import json
import os
# Import the Subscription model
from models.subscription import Subscription
# Simple file-based storage for users
USERS_FILE = 'data/users.json'
os.makedirs(os.path.dirname(USERS_FILE), exist_ok=True)
# Create empty users file if it doesn't exist
if not os.path.exists(USERS_FILE):
with open(USERS_FILE, 'w') as f:
json.dump({}, f)
class User(UserMixin):
def __init__(self, id, email, name, picture=None, subscription=None):
self.id = id
self.email = email
self.name = name
self.picture = picture
self.subscription = subscription or {}
@staticmethod
def get(user_id):
"""Get user by ID"""
try:
with open(USERS_FILE, 'r') as f:
users = json.load(f)
user_data = users.get(str(user_id))
if user_data:
# Get subscription info
subscription = Subscription.get_by_user_id(user_id)
return User(
id=user_data['id'],
email=user_data['email'],
name=user_data['name'],
picture=user_data.get('picture'),
subscription=subscription.__dict__ if subscription else {}
)
return None
except Exception:
return None
@staticmethod
def create_or_update(id, email, name, picture=None):
"""Create or update user"""
try:
# Load existing users
if os.path.exists(USERS_FILE):
with open(USERS_FILE, 'r') as f:
users = json.load(f)
else:
users = {}
# Update or create user
users[str(id)] = {
'id': id,
'email': email,
'name': name,
'picture': picture
}
# Save users
with open(USERS_FILE, 'w') as f:
json.dump(users, f, indent=2)
# Get subscription info
subscription = Subscription.get_by_user_id(id)
return User(id, email, name, picture, subscription.__dict__ if subscription else {})
except Exception as e:
print(f"Error creating/updating user: {e}")
return None