"""PostgreSQL: app_job_data 表模型""" from datetime import datetime from typing import Optional from sqlalchemy import BigInteger, DateTime, SmallInteger, String, Text from sqlalchemy.orm import Mapped, mapped_column from app.core.database import PgBase class AppJobData(PgBase): """爬虫岗位原始数据""" __tablename__ = "app_job_data" id: Mapped[int] = mapped_column(BigInteger, primary_key=True, autoincrement=True, comment="自增主键") urllistid: Mapped[int] = mapped_column(BigInteger, nullable=False, comment="关联urllistid") job_title: Mapped[Optional[str]] = mapped_column(String(255), comment="职位名称") salary: Mapped[Optional[str]] = mapped_column(String(128), comment="薪资") location: Mapped[Optional[str]] = mapped_column(String(2048), comment="工作地点") company: Mapped[Optional[str]] = mapped_column(String(255), comment="公司名称") experience: Mapped[Optional[str]] = mapped_column(String(64), comment="经验要求") education: Mapped[Optional[str]] = mapped_column(String(64), comment="学历要求") description: Mapped[str] = mapped_column(Text, nullable=False, comment="岗位详情(职责+要求+介绍)") detail_url: Mapped[str] = mapped_column(String(1024), nullable=False, comment="详情页URL") recruit_category: Mapped[int] = mapped_column(SmallInteger, default=3, nullable=False, comment="招聘分类: 0=校招 1=实习 2=社招 3=其他") content_hash: Mapped[str] = mapped_column(String(64), nullable=False, comment="内容哈希,用于去重") sources: Mapped[int] = mapped_column(SmallInteger, default=0, nullable=False, comment="数据来源 0=官网 1=平台") expire_at: Mapped[datetime] = mapped_column(DateTime, nullable=False, comment="发布日期") created_at: Mapped[datetime] = mapped_column(DateTime, nullable=False, comment="创建时间") updated_at: Mapped[datetime] = mapped_column(DateTime, nullable=False, comment="更新时间") clean_status: Mapped[str] = mapped_column(String(20), default="pending", nullable=False, comment="清洗状态: pending/cleaning/cleaned/discarded") clean_started_at: Mapped[Optional[datetime]] = mapped_column(DateTime, comment="清洗开始时间") cleaned_at: Mapped[Optional[datetime]] = mapped_column(DateTime, comment="清洗完成时间")