Model/infrastructure/postgres/uploaded_file_table.py
Daniel Roth 5178cd02c5 UploadedFile, FileTypeEnum, FileSourceEnum importable from infrastructure.postgres.uploaded_file_table 🟩
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-09 11:50:51 +00:00

96 lines
3 KiB
Python

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