112 lines
4.2 KiB
Python
112 lines
4.2 KiB
Python
"""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 !")
|