Ashgen12's picture
Recruitment Copilot
14fdc5e verified
Raw
History Blame Contribute Delete
3.86 kB
from __future__ import annotations
from datetime import datetime
from sqlalchemy import DateTime, Float, Integer, String, Text
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
class Base(DeclarativeBase):
pass
class Candidate(Base):
__tablename__ = "candidates"
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
external_id: Mapped[str] = mapped_column(String(64), unique=True, index=True)
full_name: Mapped[str | None] = mapped_column(String(255), nullable=True)
email: Mapped[str | None] = mapped_column(String(255), nullable=True)
phone: Mapped[str | None] = mapped_column(String(64), nullable=True)
location: Mapped[str | None] = mapped_column(String(255), nullable=True)
years_experience: Mapped[float | None] = mapped_column(Float, nullable=True)
skills_csv: Mapped[str | None] = mapped_column(Text, nullable=True)
summary: Mapped[str | None] = mapped_column(Text, nullable=True)
source_resume_key: Mapped[str | None] = mapped_column(String(512), nullable=True)
source_resume_url: Mapped[str | None] = mapped_column(String(1024), nullable=True)
created_at: Mapped[datetime] = mapped_column(DateTime, default=datetime.utcnow)
updated_at: Mapped[datetime] = mapped_column(
DateTime,
default=datetime.utcnow,
onupdate=datetime.utcnow,
)
class QueryAudit(Base):
__tablename__ = "query_audit"
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
session_id: Mapped[str] = mapped_column(String(128), index=True)
query: Mapped[str] = mapped_column(Text)
top_k: Mapped[int] = mapped_column(Integer, default=5)
created_at: Mapped[datetime] = mapped_column(DateTime, default=datetime.utcnow)
class ApplicationStatus(Base):
__tablename__ = "application_status"
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
candidate_id: Mapped[str] = mapped_column(String(64), index=True)
candidate_name: Mapped[str | None] = mapped_column(String(255), nullable=True)
role_applied: Mapped[str | None] = mapped_column(String(255), nullable=True)
stage: Mapped[str] = mapped_column(String(128), default="Applied")
status: Mapped[str] = mapped_column(String(128), default="Open")
notes: Mapped[str | None] = mapped_column(Text, nullable=True)
updated_at: Mapped[datetime] = mapped_column(
DateTime,
default=datetime.utcnow,
onupdate=datetime.utcnow,
)
class InterviewRecord(Base):
__tablename__ = "interview_records"
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
candidate_id: Mapped[str | None] = mapped_column(String(64), nullable=True, index=True)
candidate_name: Mapped[str] = mapped_column(String(255))
candidate_email: Mapped[str] = mapped_column(String(255), index=True)
interviewer_name: Mapped[str] = mapped_column(String(255))
interviewer_email: Mapped[str] = mapped_column(String(255), index=True)
interview_round: Mapped[str] = mapped_column(String(128), default="Screening")
scheduled_on: Mapped[datetime] = mapped_column(DateTime)
end_time: Mapped[datetime] = mapped_column(DateTime)
duration_minutes: Mapped[int] = mapped_column(Integer, default=60)
meeting_link: Mapped[str | None] = mapped_column(String(1024), nullable=True)
status: Mapped[str] = mapped_column(String(64), default="Scheduled")
notes: Mapped[str | None] = mapped_column(Text, nullable=True)
created_at: Mapped[datetime] = mapped_column(DateTime, default=datetime.utcnow)
updated_at: Mapped[datetime] = mapped_column(
DateTime,
default=datetime.utcnow,
onupdate=datetime.utcnow,
)