Spaces:
Running
Running
| from sqlalchemy import create_engine, event | |
| from sqlalchemy.orm import sessionmaker | |
| from sqlalchemy.pool import QueuePool | |
| import backend.config.settings as settings | |
| engine = create_engine( | |
| settings.DATABASE_URL, | |
| poolclass=QueuePool, | |
| pool_size=20, | |
| max_overflow=30, | |
| pool_pre_ping=True, | |
| pool_recycle=1800, | |
| pool_timeout=30, | |
| connect_args={} if 'postgresql' in settings.DATABASE_URL else {"check_same_thread": False} | |
| ) | |
| def set_sqlite_pragma(dbapi_connection, connection_record): | |
| if "sqlite" in settings.DATABASE_URL: | |
| cursor = dbapi_connection.cursor() | |
| cursor.execute("PRAGMA journal_mode=WAL") | |
| cursor.execute("PRAGMA synchronous=NORMAL") | |
| cursor.execute("PRAGMA busy_timeout=5000") | |
| cursor.close() | |
| SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) | |
| def get_db(): | |
| db = SessionLocal() | |
| try: | |
| yield db | |
| finally: | |
| db.close() | |
| import hashlib | |
| from datetime import datetime | |
| def hash_phone(phone: str) -> str: | |
| return hashlib.sha256(phone.encode()).hexdigest()[:32] | |
| def get_language_preference(user_hash, db): | |
| from backend.database.postgres.models.users import User | |
| user = db.query(User).filter(User.user_hash == user_hash).first() | |
| return user.language_preference if user else None | |
| def save_language_preference( | |
| user_hash, language, db | |
| ): | |
| from backend.database.postgres.models.users import User | |
| existing = db.query(User).filter(User.user_hash == user_hash).first() | |
| if existing: | |
| existing.language_preference = language | |
| existing.updated_at = datetime.utcnow() | |
| else: | |
| from core.auth import hash_password | |
| db.add(User( | |
| user_hash=user_hash, | |
| language_preference=language, | |
| pin_hash=hash_password("changeme"), # Requires password reset on first login | |
| )) | |
| db.commit() | |
| def delete_language_preference(user_hash, db): | |
| from backend.database.postgres.models.users import User | |
| user = db.query(User).filter(User.user_hash == user_hash).first() | |
| if user: | |
| user.language_preference = "en" | |
| db.commit() | |