Spaces:
Sleeping
Sleeping
File size: 3,861 Bytes
14fdc5e | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 | 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,
)
|