Spaces:
Sleeping
Sleeping
| 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, | |
| ) | |