from __future__ import annotations from datetime import date, datetime from sqlalchemy import Integer, String, Date, DateTime, Boolean, Float, Text from sqlalchemy.orm import Mapped, mapped_column from app.models.base import Base class Candidate(Base): """Модель анкеты кандидата.""" __tablename__ = "candidates" id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True) telegram_id: Mapped[int] = mapped_column(Integer, unique=True, index=True) username: Mapped[str | None] = mapped_column(String(100), default=None) full_name: Mapped[str | None] = mapped_column(String(120)) gender: Mapped[str | None] = mapped_column(String(20)) birth_date: Mapped[date | None] = mapped_column(Date) height_cm: Mapped[float | None] = mapped_column(Float) weight_kg: Mapped[float | None] = mapped_column(Float) country: Mapped[str | None] = mapped_column(String(80)) city: Mapped[str | None] = mapped_column(String(120)) citizenship: Mapped[str | None] = mapped_column(String(80)) visa_status: Mapped[str | None] = mapped_column(String(60)) languages: Mapped[str | None] = mapped_column(String(200)) education: Mapped[str | None] = mapped_column(String(120)) occupation: Mapped[str | None] = mapped_column(String(120)) income_range: Mapped[str | None] = mapped_column(String(60)) religion: Mapped[str | None] = mapped_column(String(80)) marital_status: Mapped[str | None] = mapped_column(String(60)) has_children: Mapped[bool | None] = mapped_column(Boolean, default=None) children_notes: Mapped[str | None] = mapped_column(String(200)) smoking: Mapped[str | None] = mapped_column(String(20)) alcohol: Mapped[str | None] = mapped_column(String(20)) health_notes: Mapped[str | None] = mapped_column(String(300)) hobbies_tags: Mapped[str | None] = mapped_column(String(300)) hobbies_free: Mapped[str | None] = mapped_column(Text) goal: Mapped[str | None] = mapped_column(String(120)) partner_prefs: Mapped[str | None] = mapped_column(Text) avatar_file_id: Mapped[str | None] = mapped_column(String(200)) gallery_file_ids: Mapped[str | None] = mapped_column(Text) consent_personal: Mapped[bool] = mapped_column(Boolean, default=False) consent_policy: Mapped[bool] = mapped_column(Boolean, default=False) is_verified: Mapped[bool] = mapped_column(Boolean, default=False) is_active: Mapped[bool] = mapped_column(Boolean, default=True) created_at: Mapped[datetime] = mapped_column(DateTime, default=datetime.utcnow) updated_at: Mapped[datetime] = mapped_column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)