| import uuid |
| from datetime import datetime |
| from sqlalchemy import String, DateTime, JSON, Float, ForeignKey, func, Integer |
| from sqlalchemy.orm import Mapped, mapped_column |
| from sqlalchemy.dialects.postgresql import UUID |
| from ..database import Base |
|
|
|
|
| class MatchResult(Base): |
| __tablename__ = "match_results" |
|
|
| id: Mapped[uuid.UUID] = mapped_column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) |
| jd_id: Mapped[uuid.UUID] = mapped_column(UUID(as_uuid=True), ForeignKey("job_descriptions.id", ondelete="CASCADE"), index=True) |
| candidate_id: Mapped[uuid.UUID] = mapped_column(UUID(as_uuid=True), ForeignKey("candidates.id", ondelete="CASCADE"), index=True) |
| session_id: Mapped[uuid.UUID | None] = mapped_column(UUID(as_uuid=True), ForeignKey("sessions.id", ondelete="CASCADE"), nullable=True, index=True) |
|
|
| rank: Mapped[int | None] = mapped_column(nullable=True) |
| stage1_score: Mapped[float] = mapped_column(Float, default=0.0) |
| stage2_score: Mapped[float | None] = mapped_column(Float, nullable=True) |
| final_score: Mapped[float] = mapped_column(Float, default=0.0) |
|
|
| component_scores: Mapped[dict] = mapped_column(JSON, default=dict) |
| gaps: Mapped[list] = mapped_column(JSON, default=list) |
| explanation: Mapped[str | None] = mapped_column(String, nullable=True) |
| explanation_generated_at: Mapped[datetime | None] = mapped_column(DateTime(timezone=True), nullable=True) |
|
|
| weights_used: Mapped[dict] = mapped_column(JSON, default=dict) |
| created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), server_default=func.now()) |
|
|