resume_matcher / models.py
panchadip's picture
Upload 10 files
da06e55 verified
from sqlalchemy import Boolean, Column, ForeignKey, Integer, String, Float, Text, LargeBinary, DateTime, JSON
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import relationship
from sqlalchemy.sql import func
Base = declarative_base()
class User(Base):
__tablename__ = "users"
id = Column(Integer, primary_key=True, index=True)
email = Column(String, unique=True, index=True)
password = Column(String)
name = Column(String)
created_at = Column(DateTime, server_default=func.now())
job_descriptions = relationship("JobDescription", back_populates="user")
resumes = relationship("Resume", back_populates="user")
memories = relationship("ApplicationMemory", back_populates="user")
class JobDescription(Base):
__tablename__ = "job_descriptions"
id = Column(Integer, primary_key=True, index=True)
user_id = Column(Integer, ForeignKey("users.id"))
title = Column(String)
description = Column(Text)
embedding_data = Column(JSON)
sections = Column(JSON)
created_at = Column(DateTime, server_default=func.now())
user = relationship("User", back_populates="job_descriptions")
matches = relationship("Match", back_populates="job_description")
class Resume(Base):
__tablename__ = "resumes"
id = Column(Integer, primary_key=True, index=True)
user_id = Column(Integer, ForeignKey("users.id"))
filename = Column(String)
candidate_name = Column(String, nullable=True)
file_content = Column(LargeBinary)
parsed_data = Column(JSON)
embedding_data = Column(JSON)
summary = Column(Text)
created_at = Column(DateTime, server_default=func.now())
user = relationship("User", back_populates="resumes")
matches = relationship("Match", back_populates="resume")
class Match(Base):
__tablename__ = "matches"
id = Column(Integer, primary_key=True, index=True)
job_description_id = Column(Integer, ForeignKey("job_descriptions.id"))
resume_id = Column(Integer, ForeignKey("resumes.id"))
score = Column(Float)
is_match = Column(Boolean)
reasoning = Column(JSON)
created_at = Column(DateTime, server_default=func.now())
job_description = relationship("JobDescription", back_populates="matches")
resume = relationship("Resume", back_populates="matches")
interviews = relationship("Interview", back_populates="match")
class Interview(Base):
__tablename__ = "interviews"
id = Column(Integer, primary_key=True, index=True)
match_id = Column(Integer, ForeignKey("matches.id"))
scheduled_time = Column(DateTime)
email_sent = Column(Boolean, default=False)
status = Column(String, default="scheduled") # scheduled, completed, cancelled
notes = Column(Text, nullable=True)
created_at = Column(DateTime, server_default=func.now())
match = relationship("Match", back_populates="interviews")
class ApplicationMemory(Base):
"""Long-term memory storage for the application"""
__tablename__ = "application_memories"
id = Column(Integer, primary_key=True, index=True)
user_id = Column(Integer, ForeignKey("users.id"))
type = Column(String, index=True) # job_description, resume, match, interview, etc.
reference_id = Column(Integer) # ID of the referenced entity
data = Column(JSON) # Main data to store
metadata = Column(JSON, nullable=True) # Additional metadata
created_at = Column(DateTime, server_default=func.now())
user = relationship("User", back_populates="memories")