Untitled
unknown
python
a year ago
16 kB
3
Indexable
import uuid from enum import Enum from typing import List from sqlalchemy import ARRAY from sqlalchemy import Boolean from sqlalchemy import Column from sqlalchemy import ForeignKey from sqlalchemy import Index from sqlalchemy import Integer from sqlalchemy import JSON from sqlalchemy import String from sqlalchemy import Table from sqlalchemy.orm import Mapped from sqlalchemy.orm import mapped_column from sqlalchemy.orm import relationship from sqlalchemy.types import DateTime from snakesdk_orm.infrastructure.tables import BaseTable from snakesdk_orm.infrastructure.tables import UtcNow class TableName(str, Enum): G_LEAD = "pdms_lead" # Relations. LEAD_HEALTH_PLAN_RELATION = "pdms_lead_health_plan_relation" LEAD_BUSINESS_LINE_RELATION = "pdms_lead_business_line_relation" LOCATION_COUNTY_REGION_RELATION = "pdms_location_county_region_relation" LOCATION_STATE_REGION_RELATION = "pdms_location_state_region_relation" LEAD_LOCATION_STATE_RELATION = "pdms_lead_location_state_relation" LEAD_LOCATION_REGION_RELATION = "pdms_lead_location_region_relation" LEAD_LOCATION_COUNTY_RELATION = "pdms_lead_location_county_relation" TP_LEAD = "pdms_tp_lead" SP_LEAD = "pdms_sp_lead" IMPORT_TASK = "pdms_import_task" USER = "pdms_user" LEAD_HEALTH_PLAN = "pdms_lead_health_plan" LEAD_ADDRESS = "pdms_lead_address" TP_LEAD_SERVICE_DETAIL = "pdms_tp_lead_service_detail" LEAD_BUSINESS_LINE = "pdms_lead_business_line" LEAD_CHANGES = "pdms_lead_changes" TP_MOBILITY_TYPE = "pdms_tp_mobility_type" LOCATION_STATE = "pdms_location_state" LOCATION_LEAD_REGION = "pdms_location_lead_region" LOCATION_COUNTY = "pdms_location_county" LEAD_SP_SPECIALTY = "pdms_lead_sp_specialty" LEAD_SP_SUBSPECIALTY = "pdms_lead_sp_subspecialty" LEAD_SP_LEAD_SPECIALTY_RELATION = "pdms_sp_lead_specialty_relation" LEAD_SP_LEAD_SUBSPECIALTY_RELATION = "pdms_sp_lead_subspecialty_relation" lead_health_plan_table = Table( TableName.LEAD_HEALTH_PLAN_RELATION.value, BaseTable.metadata, Column("lead_id", ForeignKey(f"{TableName.G_LEAD}.entity_id"), primary_key=True), Column("health_plan_id", ForeignKey(f"{TableName.LEAD_HEALTH_PLAN}.entity_id"), primary_key=True), ) lead_business_lines_table = Table( TableName.LEAD_BUSINESS_LINE_RELATION.value, BaseTable.metadata, Column("lead_id", ForeignKey(f"{TableName.G_LEAD}.entity_id"), primary_key=True), Column("business_line_id", ForeignKey(f"{TableName.LEAD_BUSINESS_LINE}.entity_id"), primary_key=True), ) lead_location_states_table = Table( TableName.LEAD_LOCATION_STATE_RELATION.value, BaseTable.metadata, Column("lead_id", ForeignKey(f"{TableName.G_LEAD}.entity_id"), primary_key=True), Column("location_state_id", ForeignKey(f"{TableName.LOCATION_STATE}.entity_id"), primary_key=True), ) lead_location_regions_table = Table( TableName.LEAD_LOCATION_REGION_RELATION.value, BaseTable.metadata, Column("lead_id", ForeignKey(f"{TableName.G_LEAD}.entity_id"), primary_key=True), Column("location_region_id", ForeignKey(f"{TableName.LOCATION_LEAD_REGION}.entity_id"), primary_key=True), ) lead_location_counties_table = Table( TableName.LEAD_LOCATION_COUNTY_RELATION.value, BaseTable.metadata, Column("lead_id", ForeignKey(f"{TableName.G_LEAD}.entity_id"), primary_key=True), Column("location_county_id", ForeignKey(f"{TableName.LOCATION_COUNTY}.entity_id"), primary_key=True), ) sp_lead_specialty_table = Table( TableName.LEAD_SP_LEAD_SPECIALTY_RELATION.value, BaseTable.metadata, Column("lead_id", ForeignKey(f"{TableName.G_LEAD}.entity_id"), primary_key=True), Column("specialty_id", ForeignKey(f"{TableName.LEAD_SP_SPECIALTY}.entity_id"), primary_key=True), ) sp_lead_subspecialty_table = Table( TableName.LEAD_SP_LEAD_SUBSPECIALTY_RELATION.value, BaseTable.metadata, Column("lead_id", ForeignKey(f"{TableName.G_LEAD}.entity_id"), primary_key=True), Column("sub_specialty_id", ForeignKey(f"{TableName.LEAD_SP_SUBSPECIALTY}.entity_id"), primary_key=True), ) location_county_region_table = Table( TableName.LOCATION_COUNTY_REGION_RELATION.value, BaseTable.metadata, Column("county_id", ForeignKey(f"{TableName.LOCATION_COUNTY}.entity_id")), Column("region_id", ForeignKey(f"{TableName.LOCATION_LEAD_REGION}.entity_id")), ) location_state_region_table = Table( TableName.LOCATION_STATE_REGION_RELATION.value, BaseTable.metadata, Column("state_id", ForeignKey(f"{TableName.LOCATION_STATE}.entity_id")), Column("region_id", ForeignKey(f"{TableName.LOCATION_LEAD_REGION}.entity_id")), ) class UserTable(BaseTable): __tablename__ = TableName.USER.value username = Column(String(50), nullable=False, unique=True, comment="Username.") first_name = Column(String(50), nullable=False, comment="User firstname.") last_name = Column(String(50), nullable=False, comment="User lastname.") roles = Column(ARRAY(String), nullable=True, comment="User roles.") external_id = Column(String(50), nullable=True, unique=True, comment="User lastname.") is_active = Column(Boolean(), nullable=True, comment="True if user is active.") created_leads: Mapped[List["LeadTable"]] = relationship( back_populates="creator_user", foreign_keys="[LeadTable.creator_user_id]" ) created_import_task_leads: Mapped[List["LeadImportTaskTable"]] = relationship(back_populates="creator_user") class PdmBaseTable: @classmethod def get_field_names(cls): # TODO: move this to snakesdk_orm. return (item.name for item in cls.__table__.columns) class LocationStateTable(BaseTable): __tablename__ = TableName.LOCATION_STATE.value name = Column(String(50), nullable=False) acronym = Column(String(2), nullable=False) class LocationCountyTable(BaseTable): __tablename__ = TableName.LOCATION_COUNTY.value name = Column(String(50), nullable=False) state_id: Mapped[uuid.UUID] = mapped_column( ForeignKey(f"{TableName.LOCATION_STATE.value}.entity_id"), nullable=False ) regions = relationship("LocationLeadRegionTable", secondary=location_county_region_table, backref="counties") class LocationLeadRegionTable(BaseTable): __tablename__ = TableName.LOCATION_LEAD_REGION.value name = Column(String(50), nullable=False) lead_type = Column(String(50), nullable=False) states = relationship("LocationStateTable", secondary=location_state_region_table, backref="regions") class LeadHealthPlanTable(BaseTable): __tablename__ = TableName.LEAD_HEALTH_PLAN.value name = Column(String(50), nullable=False) class LeadBusinessLineTable(BaseTable): __tablename__ = TableName.LEAD_BUSINESS_LINE.value name = Column(String(50), nullable=False) class TpLeadMobilityTypeTable(BaseTable): __tablename__ = TableName.TP_MOBILITY_TYPE.value name = Column(String(50), nullable=False) class LeadTable(PdmBaseTable, BaseTable): __tablename__ = TableName.G_LEAD.value company_name = Column(String(100), nullable=True) dba = Column(String(100), nullable=True) phone = Column(String(100), nullable=True, unique=False) tax_id = Column(String(100), nullable=True, unique=True) email = Column(String(100), nullable=True) contact_person = Column(String(100), nullable=True) is_medicaid = Column(Boolean(), nullable=True) is_medicare = Column(Boolean(), nullable=True) status = Column(String(100), nullable=True) status_reason = Column(String(100), nullable=True) pr_assigned_id: Mapped[uuid.UUID] = mapped_column(ForeignKey(f"{TableName.USER.value}.entity_id"), nullable=True) creator_user_id: Mapped[uuid.UUID] = mapped_column(ForeignKey(f"{TableName.USER.value}.entity_id"), nullable=True) last_update_by_user_id: Mapped[uuid.UUID] = mapped_column( ForeignKey(f"{TableName.USER.value}.entity_id"), nullable=True ) pr_assigned_user: Mapped["UserTable"] = relationship("UserTable", foreign_keys=[pr_assigned_id]) creator_user: Mapped["UserTable"] = relationship("UserTable", foreign_keys=[creator_user_id]) comments = Column(String(1000), nullable=True) lead_type = Column(String(50), nullable=True) last_status_changed_at = Column(DateTime, server_default=UtcNow()) contact_title = Column(String(50), nullable=True) npi = Column(String(50), nullable=True) last_update_by_roles = Column(ARRAY(String), nullable=True, comment="User roles.") health_plans: Mapped[List[LeadHealthPlanTable]] = relationship(secondary=lead_health_plan_table) business_lines: Mapped[List[LeadBusinessLineTable]] = relationship(secondary=lead_business_lines_table) aggregate_groups = Column(ARRAY(String), nullable=True) source = Column(String(50), nullable=True) addresses: Mapped[List["LeadAddressTable"]] = relationship() location_states: Mapped[List[LocationStateTable]] = relationship(secondary=lead_location_states_table) location_counties: Mapped[List[LocationCountyTable]] = relationship(secondary=lead_location_counties_table) location_regions: Mapped[List[LocationLeadRegionTable]] = relationship(secondary=lead_location_regions_table) __mapper_args__ = { "polymorphic_identity": "lead", "polymorphic_on": "lead_type", } class TPLeadTable(LeadTable): __tablename__ = TableName.TP_LEAD.value entity_id: Mapped[uuid.UUID] = mapped_column(ForeignKey(f"{TableName.G_LEAD.value}.entity_id"), primary_key=True) services = Column(ARRAY(String)) drivers_count = Column(Integer(), nullable=True) vehicles_count = Column(Integer(), nullable=True) is_mba_qualified = Column(Boolean(), nullable=True, comment="True if TP lead is MBA qualified.") is_mba_certified = Column(Boolean(), nullable=True, comment="True if TP lead is MBA certified.") working_hours = Column(JSON, nullable=True) digital_platform_type = Column(String(50), nullable=True) credential_details = Column(JSON, nullable=True) service_details: Mapped[List["TPLeadServiceDetailTable"]] = relationship() __mapper_args__ = { "polymorphic_identity": "TRANPORTATION", } class SpLeadSpecialtyTable(BaseTable): __tablename__ = TableName.LEAD_SP_SPECIALTY.value name = Column(String(50), nullable=False) class SpLeadSubSpecialtyTable(BaseTable): __tablename__ = TableName.LEAD_SP_SUBSPECIALTY.value name = Column(String(50), nullable=False) specialty_id: Mapped[uuid.UUID] = mapped_column( ForeignKey(f"{TableName.LEAD_SP_SPECIALTY.value}.entity_id"), nullable=True ) class SPLeadTable(LeadTable): __tablename__ = TableName.SP_LEAD.value entity_id: Mapped[uuid.UUID] = mapped_column(ForeignKey(f"{TableName.G_LEAD.value}.entity_id"), primary_key=True) specialties: Mapped[List[SpLeadSpecialtyTable]] = relationship(secondary=sp_lead_specialty_table) sub_specialties: Mapped[List[SpLeadSubSpecialtyTable]] = relationship(secondary=sp_lead_subspecialty_table) providers_count = Column(Integer(), nullable=True) locations_count = Column(Integer(), nullable=True) age_range = Column(ARRAY(Integer()), nullable=True) __mapper_args__ = { "polymorphic_identity": "SPECIALIST", } class LeadAddressTable(PdmBaseTable, BaseTable): __tablename__ = TableName.LEAD_ADDRESS.value lead_id: Mapped[uuid.UUID] = mapped_column(ForeignKey(f"{TableName.G_LEAD.value}.entity_id")) address_1 = Column(String(100), nullable=True, comment="Address line 1.") address_2 = Column(String(100), nullable=True, comment="Address line 2.") city = Column(String(100), nullable=True, comment="Address city.") zip_code = Column(String(10), nullable=True, comment="Address zip code.") state_id: Mapped[uuid.UUID] = mapped_column( ForeignKey(f"{TableName.LOCATION_STATE.value}.entity_id"), nullable=True, comment="Address state identification.", ) county_id: Mapped[uuid.UUID] = mapped_column( ForeignKey(f"{TableName.LOCATION_COUNTY.value}.entity_id"), nullable=True, comment="Address county." ) region_id: Mapped[uuid.UUID] = mapped_column( ForeignKey(f"{TableName.LOCATION_LEAD_REGION.value}.entity_id"), nullable=True, comment="Address region." ) website_url = Column(String(100), nullable=True, comment="Address website URL.") phone = Column(String(50), nullable=True, comment="Address phone.") fax = Column(String(50), nullable=True, comment="Address fax.") is_main_location = Column(Boolean(), nullable=True, comment="True if current address is the main location.") state: Mapped["LocationStateTable"] = relationship("LocationStateTable", foreign_keys=[state_id]) county: Mapped["LocationCountyTable"] = relationship("LocationCountyTable", foreign_keys=[county_id]) region: Mapped["LocationLeadRegionTable"] = relationship("LocationLeadRegionTable", foreign_keys=[region_id]) class TPLeadServiceDetailTable(PdmBaseTable, BaseTable): __tablename__ = TableName.TP_LEAD_SERVICE_DETAIL.value lead_id: Mapped[uuid.UUID] = mapped_column(ForeignKey(f"{TableName.TP_LEAD.value}.entity_id")) state_id: Mapped[uuid.UUID] = mapped_column( ForeignKey(f"{TableName.LOCATION_STATE.value}.entity_id"), nullable=True, comment="Address state identification.", ) county_id: Mapped[uuid.UUID] = mapped_column( ForeignKey(f"{TableName.LOCATION_COUNTY.value}.entity_id"), nullable=True, comment="Address county." ) region_id: Mapped[uuid.UUID] = mapped_column( ForeignKey(f"{TableName.LOCATION_LEAD_REGION.value}.entity_id"), nullable=True, comment="Address region." ) mobility_type_id: Mapped[uuid.UUID] = mapped_column( ForeignKey(f"{TableName.TP_MOBILITY_TYPE.value}.entity_id"), nullable=True ) vehicles_count = Column(Integer(), nullable=True) mobility_type: Mapped["TpLeadMobilityTypeTable"] = relationship() class LeadImportTaskTable(BaseTable): __tablename__ = TableName.IMPORT_TASK.value file_path = Column(String(100), nullable=False, comment="File location path.") file_fails_path = Column(String(100), nullable=True, comment="File path location with unimported records.") import_id = Column(String(100), nullable=False, unique=True, comment="Unique Id from creator.") separator = Column(String(10), nullable=False, unique=False, comment="Data separator on csv") mappings = Column(ARRAY(String), nullable=False, comment="Mapping configuration for imports.") lead_type = Column(String(50), nullable=False, unique=False, comment="Lead type content.") csv_headers = Column(ARRAY(String), nullable=True, comment="Extracted csv headers.") records_total = Column(Integer(), nullable=True, comment="Amount of records into the file.") records_analyzed = Column(Integer(), nullable=True, comment="Amount of records analyzed.") records_duplicated = Column(Integer(), nullable=True, comment="Amount of duplicated records.") records_invalid = Column(Integer(), nullable=True, comment="Amount of invalid records.") start_at = Column(DateTime, nullable=True, comment="Date when import tasks was started.") end_at = Column(DateTime, nullable=True, comment="Date when import task was finished.") is_write = Column(Boolean(), nullable=True, comment="True if lead should be imported.") creator_user_id: Mapped[uuid.UUID] = mapped_column(ForeignKey(f"{TableName.USER.value}.entity_id"), nullable=True) creator_user: Mapped["UserTable"] = relationship(back_populates="created_import_task_leads") class LeadChangeTable(BaseTable): __tablename__ = TableName.LEAD_CHANGES.value lead_id: Mapped[uuid.UUID] = mapped_column(ForeignKey(f"{TableName.G_LEAD.value}.entity_id")) changes = Column(JSON, nullable=False) user_id: Mapped[uuid.UUID] = mapped_column(ForeignKey(f"{TableName.USER.value}.entity_id"), nullable=True) user_fullname = Column(String(50), nullable=True, comment="Change author fullname.") user_roles = Column(ARRAY(String), nullable=True, comment="User roles.") lead_type_index = Index("idx_lead_type", LocationLeadRegionTable.lead_type)
Editor is loading...
Leave a Comment