backend
This commit is contained in:
commit
d7666f7b2c
44 changed files with 2246 additions and 0 deletions
0
backend/models/__init__.py
Normal file
0
backend/models/__init__.py
Normal file
26
backend/models/ai_interaction.py
Normal file
26
backend/models/ai_interaction.py
Normal 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}')>"
|
19
backend/models/document.py
Normal file
19
backend/models/document.py
Normal 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
22
backend/models/user.py
Normal 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})>"
|
Loading…
Add table
Add a link
Reference in a new issue