| import uuid |
| from datetime import datetime |
| from sqlalchemy import String, Text, DateTime, JSON, Float, Integer, Boolean, func, ForeignKey |
| from sqlalchemy.orm import Mapped, mapped_column |
| from sqlalchemy.dialects.postgresql import UUID |
| from ..database import Base |
|
|
|
|
| class Candidate(Base): |
| __tablename__ = "candidates" |
|
|
| id: Mapped[uuid.UUID] = mapped_column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) |
| external_id: Mapped[str | None] = mapped_column(String(128), nullable=True, index=True) |
|
|
| name: Mapped[str | None] = mapped_column(String(255), nullable=True) |
| email: Mapped[str | None] = mapped_column(String(255), nullable=True) |
|
|
| looking_for: Mapped[str | None] = mapped_column(String(100), nullable=True) |
| currently_employed: Mapped[bool | None] = mapped_column(Boolean, nullable=True) |
| notice_period: Mapped[str | None] = mapped_column(String(100), nullable=True) |
| open_to_working_at: Mapped[str | None] = mapped_column(String(255), nullable=True) |
| role_type: Mapped[str | None] = mapped_column(String(100), nullable=True) |
| engineer_type: Mapped[str | None] = mapped_column(String(100), nullable=True) |
|
|
| years_of_experience: Mapped[float | None] = mapped_column(Float, nullable=True) |
| programming_languages: Mapped[list] = mapped_column(JSON, default=list) |
| backend_frameworks: Mapped[list] = mapped_column(JSON, default=list) |
| frontend_technologies: Mapped[list] = mapped_column(JSON, default=list) |
| gen_ai_experience: Mapped[bool | None] = mapped_column(Boolean, nullable=True) |
| recent_experience_type: Mapped[str | None] = mapped_column(String(100), nullable=True) |
| education_status: Mapped[str | None] = mapped_column(String(100), nullable=True) |
| degree: Mapped[str | None] = mapped_column(String(255), nullable=True) |
|
|
| parsed_summary: Mapped[str | None] = mapped_column(Text, nullable=True) |
| parsed_skills: Mapped[str | None] = mapped_column(Text, nullable=True) |
| parsed_work_experience: Mapped[list] = mapped_column(JSON, default=list) |
|
|
| most_recent_company: Mapped[str | None] = mapped_column(String(255), nullable=True) |
| most_recent_company_description: Mapped[str | None] = mapped_column(Text, nullable=True) |
| most_recent_company_is_funded: Mapped[bool | None] = mapped_column(Boolean, nullable=True) |
| most_recent_company_is_product_company: Mapped[bool | None] = mapped_column(Boolean, nullable=True) |
| most_recent_company_total_funding: Mapped[float | None] = mapped_column(Float, nullable=True) |
| most_recent_company_funding_status: Mapped[str | None] = mapped_column(String(100), nullable=True) |
|
|
| time_in_current_company: Mapped[float | None] = mapped_column(Float, nullable=True) |
| is_actively_or_passively_looking: Mapped[str | None] = mapped_column(String(100), nullable=True) |
|
|
| session_id: Mapped[uuid.UUID | None] = mapped_column(UUID(as_uuid=True), ForeignKey("sessions.id", ondelete="SET NULL"), nullable=True, index=True) |
| growth_velocity: Mapped[float] = mapped_column(Float, default=0.5) |
| embedding_hash: Mapped[str | None] = mapped_column(String(64), nullable=True) |
| qdrant_id: Mapped[str | None] = mapped_column(String(64), nullable=True, index=True) |
|
|
| created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), server_default=func.now()) |
| updated_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), server_default=func.now(), onupdate=func.now()) |
|
|