"""Script corrigé pour créer l'utilisateur de test.""" import sys import os import sqlite3 from datetime import datetime # Chemins corrects Windows BASE_DIR = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) BACKEND_DIR = os.path.join(BASE_DIR, 'backend') DB_PATH = os.path.join(BASE_DIR, 'chartbastan.db') # Importations correctes depuis backend sys.path.insert(0, BACKEND_DIR) from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker, Session from sqlalchemy import Column, Integer, String, DateTime, Boolean from sqlalchemy.ext.declarative import declarative_base from passlib.context import CryptContext # Définition du modèle User pour éviter les problèmes de cache Base = declarative_base() class User(Base): __tablename__ = 'users' id = Column(Integer, primary_key=True, index=True) email = Column(String, unique=True, nullable=False, index=True) name = Column(String, nullable=True) password_hash = Column(String, nullable=True) is_premium = Column(Boolean, default=False, nullable=False) referral_code = Column(String, unique=True, nullable=True, index=True) created_at = Column(DateTime, default=datetime.utcnow, nullable=False) updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) daily_predictions_count = Column(Integer, default=0) last_prediction_date = Column(DateTime, nullable=True) def main(): """Créer l'utilisateur de test.""" print("=== Création de l'utilisateur de test ===") print(f"Chemin de la base de données : {DB_PATH}") print(f"Dossier backend : {BACKEND_DIR}") # Créer l'engine et créer les tables print("Création de la base de données...") engine = create_engine(f'sqlite:///{DB_PATH}', echo=False) # Créer les tables Base.metadata.create_all(engine) print("Tables créées avec succès !") # Créer une session SessionLocal = sessionmaker(bind=engine, autocommit=False, autoflush=False) session = SessionLocal() # Hashage du mot de passe pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto") password_hash = pwd_context.hash("password123") print(f"Hash du mot de passe : {password_hash[:20]}...") try: # Vérifier si l'utilisateur existe déjà existing_user = session.query(User).filter(User.email == "test@example.com").first() if existing_user: print(f"⚠️ Utilisateur existe déjà : ID={existing_user.id}") print(f" Email : {existing_user.email}") print(f" Nom : {existing_user.name}") # Mettre à jour le mot de passe existing_user.password_hash = password_hash session.commit() print(f"✅ Mot de passe mis à jour pour l'utilisateur ID={existing_user.id}") print(f" Email : {existing_user.email}") print(f" Nom : {existing_user.name}") sys.exit(0) # Créer l'utilisateur de test print("\nCréation de l'utilisateur de test...") new_user = User( email="test@example.com", name="Utilisateur Test", password_hash=password_hash, is_premium=False, referral_code="TESTCODE", created_at=datetime.utcnow(), updated_at=datetime.utcnow() ) session.add(new_user) session.commit() session.refresh(new_user) print(f"✅ Utilisateur créé avec succès !") print(f" ID : {new_user.id}") print(f" Email : {new_user.email}") print(f" Nom : {new_user.name}") print(f" Mot de passe hash : {new_user.password_hash[:20]}...") print(f" Premium : {'Oui' if new_user.is_premium else 'Non'}") print(f" Code de parrainage : {new_user.referral_code}") print(f" Créé le : {new_user.created_at.isoformat()}") finally: session.close() print("\n=== Identifiants de connexion ===") print(f" Email : test@example.com") print(f" Mot de passe : password123") print(f" URL du backend : http://127.0.0.1:8000") print("\nVous pouvez maintenant vous connecter via le frontend !")