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())