from __future__ import annotations import enum from typing import ClassVar, Optional from sqlalchemy import TIMESTAMP, BigInteger, Column, Text from sqlalchemy import Enum as SqlEnum from sqlmodel import Field, SQLModel class FileTypeEnum(enum.Enum): PHOTO_PACK = "photo_pack" SITE_NOTE = "site_note" RD_SAP_SITE_NOTE = "rd_sap_site_note" PAS_2023_VENTILATION = "pas_2023_ventilation" PAS_2023_CONDITION = "pas_2023_condition" PAS_SIGNIFICANCE = "pas_significance" PAR_PHOTO_PACK = "par_photo_pack" PAS_2023_PROPERTY = "pas_2023_property" PAS_2023_OCCUPANCY = "pas_2023_occupancy" ECMK_SITE_NOTE = "ecmk_site_note" ECMK_RD_SAP_SITE_NOTE = "ecmk_rd_sap_site_note" ECMK_SURVEY_XML = "ecmk_survey_xml" MAGIC_PLAN_JSON = "magic_plan_json" IMPROVEMENT_OPTION_EVALUATION = "improvement_option_evaluation" MEDIUM_TERM_IMPROVEMENT_PLAN = "medium_term_improvement_plan" RETROFIT_DESIGN_DOC = "retrofit_design_doc" MCS_COMPLIANCE_CERTIFICATE = "mcs_compliance_certificate" OTHER = "other" VENTILATION_AUDIT = "ventilation_audit" class FileSourceEnum(enum.Enum): PAS_HUB = "pas hub" COORDINATION_HUB = "coordination_hub" SHAREPOINT = "sharepoint" HUBSPOT = "hubspot" ECMK = "ecmk" MAGIC_PLAN = "magic_plan" AUDIT_GENERATOR = "audit_generator" def _enum_values(enum_cls: type[enum.Enum]) -> list[str]: return [e.value for e in enum_cls] class UploadedFile(SQLModel, table=True): __tablename__: ClassVar[str] = "uploaded_files" # pyright: ignore[reportIncompatibleVariableOverride] id: Optional[int] = Field( default=None, sa_column=Column(BigInteger, primary_key=True, autoincrement=True), ) s3_file_bucket: str = Field(sa_column=Column(Text, nullable=False)) s3_file_key: str = Field(sa_column=Column(Text, nullable=False)) s3_upload_timestamp: object = Field( sa_column=Column(TIMESTAMP(timezone=True), nullable=False) ) landlord_property_id: Optional[str] = Field( default=None, sa_column=Column(Text, nullable=True) ) uprn: Optional[int] = Field( default=None, sa_column=Column(BigInteger, nullable=True) ) hubspot_listing_id: Optional[int] = Field( default=None, sa_column=Column(BigInteger, nullable=True) ) hubspot_deal_id: Optional[str] = Field( default=None, sa_column=Column(Text, nullable=True) ) file_type: Optional[str] = Field( default=None, sa_column=Column( SqlEnum( FileTypeEnum, name="file_type", create_type=False, values_callable=_enum_values, ), nullable=True, ), ) file_source: Optional[str] = Field( default=None, sa_column=Column( SqlEnum( FileSourceEnum, name="file_source", create_type=False, values_callable=_enum_values, ), nullable=True, ), )