File size: 1,787 Bytes
1ca9ba2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a0f1a88
1ca9ba2
 
 
5aed951
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
import uuid
from datetime import datetime
from sqlalchemy import String, Text, DateTime, JSON, Float, Integer, func
from sqlalchemy.orm import Mapped, mapped_column
from sqlalchemy.dialects.postgresql import UUID, ARRAY
from ..database import Base


class JobDescription(Base):
    __tablename__ = "job_descriptions"

    id: Mapped[uuid.UUID] = mapped_column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
    title: Mapped[str] = mapped_column(String(255))
    raw_text: Mapped[str] = mapped_column(Text)
    parsed_requirements: Mapped[dict] = mapped_column(JSON, default=dict)
    required_skills: Mapped[list] = mapped_column(JSON, default=list)
    min_yoe: Mapped[float | None] = mapped_column(Float, nullable=True)
    max_yoe: Mapped[float | None] = mapped_column(Float, nullable=True)
    role_type: Mapped[str | None] = mapped_column(String(100), nullable=True)
    engineer_type: Mapped[str | None] = mapped_column(String(100), nullable=True)
    location: Mapped[str | None] = mapped_column(String(255), nullable=True)
    remote_allowed: Mapped[bool | None] = mapped_column(nullable=True)
    jd_quality: Mapped[dict] = mapped_column(JSON, default=dict)
    custom_weights: Mapped[dict] = mapped_column(JSON, default=dict)
    embedding_text: Mapped[str | None] = mapped_column(Text, nullable=True)
    qdrant_id: Mapped[str | None] = mapped_column(String(64), nullable=True)
    status: Mapped[str] = mapped_column(String(32), default="pending")
    session_id: Mapped[uuid.UUID | None] = mapped_column(UUID(as_uuid=True), nullable=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())