This commit is contained in:
el 2025-06-24 18:17:53 +02:00
commit d7666f7b2c
44 changed files with 2246 additions and 0 deletions

View file

View file

@ -0,0 +1,26 @@
from sqlalchemy import Column, Integer, String, Text, DateTime, ForeignKey, Float
from sqlalchemy.sql import func
from sqlalchemy.orm import relationship
from core.database import Base
class AiInteraction(Base):
__tablename__ = "ai_interactions"
id = Column(Integer, primary_key=True, index=True)
user_id = Column(Integer, ForeignKey("users.id"), nullable=True) # Utilisateur ayant effectué l'interaction (peut être NULL pour anonyme)
document_id = Column(Integer, ForeignKey("documents.id"), nullable=True) # Document utilisé pour l'interaction (si pertinent)
job_offer_text = Column(Text, nullable=False) # Le texte de l'offre d'emploi analysée
cv_text_used = Column(Text, nullable=True) # Le texte du CV utilisé pour l'analyse (stocké pour l'historique)
ai_request = Column(Text, nullable=False) # Le prompt envoyé à l'IA
ai_response = Column(Text, nullable=False) # La réponse brute de l'IA
score = Column(Float, nullable=True) # Le score de pertinence calculé par l'IA ou le backend
analysis_results = Column(Text, nullable=True) # Les détails de l'analyse (ex: points forts/faibles)
interaction_type = Column(String, nullable=False, default="scoring") # Type d'interaction (e.g., 'scoring', 'paragraph_gen')
created_at = Column(DateTime, default=func.now())
# Relations optionnelles
user = relationship("User", back_populates="ai_interactions")
document = relationship("Document") # Pas de back_populates ici car Document n'a pas de relation "ai_interactions"
def __repr__(self):
return f"<AiInteraction(id={self.id}, user_id={self.user_id}, type='{self.interaction_type}')>"

View file

@ -0,0 +1,19 @@
from sqlalchemy import Column, Integer, String, DateTime, ForeignKey
from sqlalchemy.sql import func
from sqlalchemy.orm import relationship
from core.database import Base
class Document(Base):
__tablename__ = "documents"
id = Column(Integer, primary_key=True, index=True)
filename = Column(String, nullable=False)
filepath = Column(String, unique=True, nullable=False) # Chemin unique pour le stockage
owner_id = Column(Integer, ForeignKey("users.id")) # Clé étrangère vers l'utilisateur
uploaded_at = Column(DateTime, default=func.now())
# Relation avec l'utilisateur propriétaire
owner = relationship("User", back_populates="documents")
def __repr__(self):
return f"<Document(filename='{self.filename}', owner_id={self.owner_id})>"

22
backend/models/user.py Normal file
View file

@ -0,0 +1,22 @@
from sqlalchemy import Column, Integer, String, Boolean, DateTime
from sqlalchemy.sql import func
from sqlalchemy.orm import relationship # <-- NOUVELLE IMPORTATION
from core.database import Base
class User(Base):
__tablename__ = "users"
id = Column(Integer, primary_key=True, index=True)
email = Column(String, unique=True, index=True, nullable=False)
hashed_password = Column(String, nullable=False)
name = Column(String, nullable=True)
is_active = Column(Boolean, default=True)
created_at = Column(DateTime, default=func.now())
updated_at = Column(DateTime, default=func.now(), onupdate=func.now())
# Relation avec les documents de l'utilisateur
documents = relationship("Document", back_populates="owner") # <-- NOUVELLE LIGNE
ai_interactions = relationship("AiInteraction", back_populates="user") # <-- NOUVELLE LIGNE
def __repr__(self):
return f"<User(email='{self.email}', id={self.id})>"