File size: 3,419 Bytes
1ca9ba2 5655f74 1ca9ba2 5655f74 1ca9ba2 | 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 | 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())
|