From 5e58de6eb18ef9a74df891335f80cf21b6f10104 Mon Sep 17 00:00:00 2001 From: Jun-te Kim Date: Thu, 15 May 2025 08:39:25 +0000 Subject: [PATCH] re added new versioning table --- .github/workflows/hubspot_to_invoice.yml | 2 +- .../versions/427e65da69c1_initial_table.py | 354 ++++++++++++++++++ 2 files changed, 355 insertions(+), 1 deletion(-) create mode 100644 alembic/versions/427e65da69c1_initial_table.py diff --git a/.github/workflows/hubspot_to_invoice.yml b/.github/workflows/hubspot_to_invoice.yml index 937c7fe..951c082 100644 --- a/.github/workflows/hubspot_to_invoice.yml +++ b/.github/workflows/hubspot_to_invoice.yml @@ -5,7 +5,7 @@ on: workflow_dispatch: jobs: - sharepoint-validator: + hubspot-deals-to-db: runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v3 diff --git a/alembic/versions/427e65da69c1_initial_table.py b/alembic/versions/427e65da69c1_initial_table.py new file mode 100644 index 0000000..328f3bf --- /dev/null +++ b/alembic/versions/427e65da69c1_initial_table.py @@ -0,0 +1,354 @@ +"""Initial table + +Revision ID: 427e65da69c1 +Revises: +Create Date: 2025-05-14 15:36:08.611971 + +""" +from typing import Sequence, Union + +from alembic import op +import sqlalchemy as sa +import sqlmodel + + +# revision identifiers, used by Alembic. +revision: str = '427e65da69c1' +down_revision: Union[str, None] = None +branch_labels: Union[str, Sequence[str], None] = None +depends_on: Union[str, Sequence[str], None] = None + + +def upgrade() -> None: + """Upgrade schema.""" + # ### commands auto generated by Alembic - please adjust! ### + op.create_table('buildings', + sa.Column('id', sa.Uuid(), nullable=False), + sa.Column('address', sqlmodel.sql.sqltypes.AutoString(), nullable=False), + sa.Column('postcode', sqlmodel.sql.sqltypes.AutoString(), nullable=False), + sa.Column('UPRN', sqlmodel.sql.sqltypes.AutoString(), nullable=False), + sa.Column('landlord_id', sqlmodel.sql.sqltypes.AutoString(), nullable=False), + sa.Column('domna_id', sqlmodel.sql.sqltypes.AutoString(), nullable=False), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('companyinfo', + sa.Column('id', sa.Uuid(), nullable=False), + sa.Column('address', sqlmodel.sql.sqltypes.AutoString(), nullable=False), + sa.Column('trading_name', sqlmodel.sql.sqltypes.AutoString(), nullable=False), + sa.Column('post_code', sqlmodel.sql.sqltypes.AutoString(), nullable=False), + sa.Column('fax_number', sqlmodel.sql.sqltypes.AutoString(), nullable=True), + sa.Column('related_party_disclosure', sqlmodel.sql.sqltypes.AutoString(), nullable=True), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('door', + sa.Column('id', sa.Uuid(), nullable=False), + sa.Column('no_of_doors', sa.Integer(), nullable=False), + sa.Column('no_of_insulated_doors', sa.Integer(), nullable=False), + sa.Column('u_value_w_m2_k', sqlmodel.sql.sqltypes.AutoString(), nullable=True), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('floors', + sa.Column('id', sa.Uuid(), nullable=False), + sa.Column('floor_type', sqlmodel.sql.sqltypes.AutoString(), nullable=False), + sa.Column('ground_floor_construction', sqlmodel.sql.sqltypes.AutoString(), nullable=False), + sa.Column('ground_floor_insulation_type', sqlmodel.sql.sqltypes.AutoString(), nullable=True), + sa.Column('floor_insulation_thickness_mm', sa.Float(), nullable=True), + sa.Column('u_value_known', sa.Boolean(), nullable=False), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('fluegasheatrecoverysystem', + sa.Column('id', sa.Uuid(), nullable=False), + sa.Column('fghrs_present', sa.Boolean(), nullable=False), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('heatingsystemcontrols', + sa.Column('id', sa.Uuid(), nullable=False), + sa.Column('control_type', sqlmodel.sql.sqltypes.AutoString(), nullable=False), + sa.Column('flue_type', sqlmodel.sql.sqltypes.AutoString(), nullable=False), + sa.Column('fan_assisted_flue', sa.Boolean(), nullable=False), + sa.Column('heat_emitter_type', sqlmodel.sql.sqltypes.AutoString(), nullable=False), + sa.Column('electricity_meter_type', sqlmodel.sql.sqltypes.AutoString(), nullable=True), + sa.Column('mains_gas_available', sa.Boolean(), nullable=True), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('heatingtype', + sa.Column('id', sa.Uuid(), nullable=False), + sa.Column('heating_type', sqlmodel.sql.sqltypes.AutoString(), nullable=False), + sa.Column('fuel_type', sqlmodel.sql.sqltypes.AutoString(), nullable=False), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('hotwatercylinder', + sa.Column('id', sa.Uuid(), nullable=False), + sa.Column('volume', sqlmodel.sql.sqltypes.AutoString(), nullable=False), + sa.Column('insulation_type', sqlmodel.sql.sqltypes.AutoString(), nullable=False), + sa.Column('insulation_thickness', sqlmodel.sql.sqltypes.AutoString(), nullable=False), + sa.Column('thermostat', sa.Boolean(), nullable=False), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('insulation', + sa.Column('id', sa.Uuid(), nullable=False), + sa.Column('type', sqlmodel.sql.sqltypes.AutoString(), nullable=False), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('lighting', + sa.Column('id', sa.Uuid(), nullable=False), + sa.Column('total_no_of_light_fittings', sa.Integer(), nullable=False), + sa.Column('total_no_of_lel_fittings', sa.Integer(), nullable=False), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('otherdetails', + sa.Column('id', sa.Uuid(), nullable=False), + sa.Column('electricity_meter_type', sqlmodel.sql.sqltypes.AutoString(), nullable=False), + sa.Column('main_gas_avalible', sa.Boolean(), nullable=False), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('photovoltaicpanel', + sa.Column('id', sa.Uuid(), nullable=False), + sa.Column('pvs_are_connected_to_dwelling_electricity_meter', sa.Boolean(), nullable=False), + sa.Column('percentage_of_external_roof_area_with_pvs', sqlmodel.sql.sqltypes.AutoString(), nullable=False), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('presitenotessummaryinfo', + sa.Column('id', sa.Uuid(), nullable=False), + sa.Column('reference_number', sqlmodel.sql.sqltypes.AutoString(), nullable=False), + sa.Column('epc_language', sqlmodel.sql.sqltypes.AutoString(), nullable=False), + sa.Column('uprn', sqlmodel.sql.sqltypes.AutoString(), nullable=True), + sa.Column('postcode', sqlmodel.sql.sqltypes.AutoString(), nullable=False), + sa.Column('region', sqlmodel.sql.sqltypes.AutoString(), nullable=False), + sa.Column('address', sqlmodel.sql.sqltypes.AutoString(), nullable=False), + sa.Column('town', sqlmodel.sql.sqltypes.AutoString(), nullable=False), + sa.Column('county', sqlmodel.sql.sqltypes.AutoString(), nullable=True), + sa.Column('property_tenure', sqlmodel.sql.sqltypes.AutoString(), nullable=False), + sa.Column('transaction_type', sqlmodel.sql.sqltypes.AutoString(), nullable=False), + sa.Column('inspection_date', sa.DateTime(), nullable=False), + sa.Column('current_sap', sqlmodel.sql.sqltypes.AutoString(), nullable=False), + sa.Column('potential_sap', sqlmodel.sql.sqltypes.AutoString(), nullable=False), + sa.Column('current_ei', sqlmodel.sql.sqltypes.AutoString(), nullable=False), + sa.Column('potential_ei', sqlmodel.sql.sqltypes.AutoString(), nullable=False), + sa.Column('current_annual_emissions', sqlmodel.sql.sqltypes.AutoString(), nullable=False), + sa.Column('current_annual_emission_including_0925_multiplayer', sqlmodel.sql.sqltypes.AutoString(), nullable=False), + sa.Column('current_annual_energy_costs', sqlmodel.sql.sqltypes.AutoString(), nullable=False), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('roofs', + sa.Column('id', sa.Uuid(), nullable=False), + sa.Column('construction', sqlmodel.sql.sqltypes.AutoString(), nullable=False), + sa.Column('insulation_type', sqlmodel.sql.sqltypes.AutoString(), nullable=False), + sa.Column('insulation_thickness', sqlmodel.sql.sqltypes.AutoString(), nullable=False), + sa.Column('u_value_known', sa.Boolean(), nullable=False), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('showerandbaths', + sa.Column('id', sa.Uuid(), nullable=False), + sa.Column('no_of_rooms_with_baths_and_or_shower', sa.Integer(), nullable=False), + sa.Column('no_of_rooms_with_mixer_shower_and_no_baths', sa.Integer(), nullable=False), + sa.Column('no_of_rooms_with_mixer_shower_and_baths', sa.Integer(), nullable=False), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('solarwaterheating', + sa.Column('id', sa.Uuid(), nullable=False), + sa.Column('solar_water_heating_details_known', sa.Boolean(), nullable=False), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('ventilationandcooling', + sa.Column('id', sa.Uuid(), nullable=False), + sa.Column('no_of_open_fireplaces', sa.Integer(), nullable=False), + sa.Column('ventilation_type', sqlmodel.sql.sqltypes.AutoString(), nullable=False), + sa.Column('space_cooling_system_present', sa.Boolean(), nullable=False), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('walls', + sa.Column('id', sa.Uuid(), nullable=False), + sa.Column('construction', sqlmodel.sql.sqltypes.AutoString(), nullable=False), + sa.Column('insulation', sqlmodel.sql.sqltypes.AutoString(), nullable=False), + sa.Column('insulation_thickness_mm', sqlmodel.sql.sqltypes.AutoString(), nullable=False), + sa.Column('wall_thickness_measured', sa.Boolean(), nullable=False), + sa.Column('wall_thickness_mm', sa.Integer(), nullable=True), + sa.Column('u_value_known', sa.Boolean(), nullable=False), + sa.Column('u_value_w_m2_k', sa.Float(), nullable=True), + sa.Column('dry_lining', sa.Boolean(), nullable=False), + sa.Column('alternative_wall_present', sa.Boolean(), nullable=False), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('waterheating', + sa.Column('id', sa.Uuid(), nullable=False), + sa.Column('heating_type', sqlmodel.sql.sqltypes.AutoString(), nullable=False), + sa.Column('fuel_type', sqlmodel.sql.sqltypes.AutoString(), nullable=False), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('windturbine', + sa.Column('id', sa.Uuid(), nullable=False), + sa.Column('wind_turbine', sa.Boolean(), nullable=False), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('assessorinfo', + sa.Column('id', sa.Uuid(), nullable=False), + sa.Column('accreditation_number', sqlmodel.sql.sqltypes.AutoString(), nullable=False), + sa.Column('name', sqlmodel.sql.sqltypes.AutoString(), nullable=False), + sa.Column('phone_number', sqlmodel.sql.sqltypes.AutoString(), nullable=True), + sa.Column('email_address', sqlmodel.sql.sqltypes.AutoString(), nullable=True), + sa.Column('company_id', sa.Uuid(), nullable=True), + sa.ForeignKeyConstraint(['company_id'], ['companyinfo.id'], ), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('heating', + sa.Column('id', sa.Uuid(), nullable=False), + sa.Column('type', sqlmodel.sql.sqltypes.AutoString(), nullable=False), + sa.Column('heating_source', sqlmodel.sql.sqltypes.AutoString(), nullable=False), + sa.Column('efficiency_source', sqlmodel.sql.sqltypes.AutoString(), nullable=False), + sa.Column('heating_fuel', sqlmodel.sql.sqltypes.AutoString(), nullable=False), + sa.Column('brand_name', sqlmodel.sql.sqltypes.AutoString(), nullable=False), + sa.Column('model_name', sqlmodel.sql.sqltypes.AutoString(), nullable=False), + sa.Column('model_qualifer', sqlmodel.sql.sqltypes.AutoString(), nullable=False), + sa.Column('sap_2009_table', sqlmodel.sql.sqltypes.AutoString(), nullable=True), + sa.Column('percentage_of_heated_floor_area_served', sqlmodel.sql.sqltypes.AutoString(), nullable=True), + sa.Column('controls_id', sa.Uuid(), nullable=True), + sa.ForeignKeyConstraint(['controls_id'], ['heatingsystemcontrols.id'], ), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('propertydetail', + sa.Column('id', sa.Uuid(), nullable=False), + sa.Column('age_band', sqlmodel.sql.sqltypes.AutoString(), nullable=False), + sa.Column('wall_id', sa.Uuid(), nullable=True), + sa.Column('roof_id', sa.Uuid(), nullable=True), + sa.Column('floor_id', sa.Uuid(), nullable=True), + sa.ForeignKeyConstraint(['floor_id'], ['floors.id'], ), + sa.ForeignKeyConstraint(['roof_id'], ['roofs.id'], ), + sa.ForeignKeyConstraint(['wall_id'], ['walls.id'], ), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('dimension', + sa.Column('id', sa.Uuid(), nullable=False), + sa.Column('floor_area_m2', sa.Float(), nullable=False), + sa.Column('room_height_m', sa.Float(), nullable=False), + sa.Column('loss_perimeter_m', sa.Float(), nullable=False), + sa.Column('party_wall_length_m', sa.Float(), nullable=False), + sa.Column('property_detail_id', sa.Uuid(), nullable=True), + sa.ForeignKeyConstraint(['property_detail_id'], ['propertydetail.id'], ), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('documents', + sa.Column('id', sa.Uuid(), nullable=False), + sa.Column('assessor_id', sa.Uuid(), nullable=False), + sa.Column('created_at', sa.DateTime(), nullable=False), + sa.Column('document_type', sa.Enum('QUIDOS_PRESITE_NOTE', 'CHARTED_SURVEYOR_REPORT', 'ENERGY_PERFORMANCE_REPORT', 'U_VALUE_CALCULATOR_REPORT', 'OVERWRITING_U_VALUE_DECLARATION_FORM', name='reporttype'), nullable=False), + sa.Column('building_id', sa.Uuid(), nullable=False), + sa.Column('target_table', sqlmodel.sql.sqltypes.AutoString(), nullable=False), + sa.Column('target_id', sa.Uuid(), nullable=False), + sa.ForeignKeyConstraint(['assessor_id'], ['assessorinfo.id'], ), + sa.ForeignKeyConstraint(['building_id'], ['buildings.id'], ), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('propertydescription', + sa.Column('id', sa.Uuid(), nullable=False), + sa.Column('built_form', sqlmodel.sql.sqltypes.AutoString(), nullable=False), + sa.Column('detachment_or_position', sqlmodel.sql.sqltypes.AutoString(), nullable=False), + sa.Column('no_of_main_property', sa.Integer(), nullable=False), + sa.Column('no_of_extension_1', sa.Integer(), nullable=True), + sa.Column('no_of_extension_2', sa.Integer(), nullable=True), + sa.Column('no_of_extension_3', sa.Integer(), nullable=True), + sa.Column('no_of_extension_4', sa.Integer(), nullable=True), + sa.Column('no_of_habitable_rooms', sa.Integer(), nullable=False), + sa.Column('no_of_heated_rooms', sa.Integer(), nullable=False), + sa.Column('heated_basement', sa.Boolean(), nullable=False), + sa.Column('conservatory_type', sqlmodel.sql.sqltypes.AutoString(), nullable=False), + sa.Column('percentage_of_draught_proofed', sa.Integer(), nullable=False), + sa.Column('terrain_type', sqlmodel.sql.sqltypes.AutoString(), nullable=False), + sa.Column('conservatory', sa.Boolean(), nullable=False), + sa.Column('main_property_id', sa.Uuid(), nullable=False), + sa.Column('ex1_property_id', sa.Uuid(), nullable=True), + sa.Column('ex2_property_id', sa.Uuid(), nullable=True), + sa.Column('ex3_property_id', sa.Uuid(), nullable=True), + sa.Column('ex4_property_id', sa.Uuid(), nullable=True), + sa.Column('door_id', sa.Uuid(), nullable=True), + sa.Column('ventilation_and_cooling_id', sa.Uuid(), nullable=True), + sa.Column('lighting_id', sa.Uuid(), nullable=True), + sa.Column('water_heating_id', sa.Uuid(), nullable=True), + sa.Column('hot_water_cylinder_id', sa.Uuid(), nullable=True), + sa.Column('solar_water_heating_id', sa.Uuid(), nullable=True), + sa.Column('shower_and_baths_id', sa.Uuid(), nullable=True), + sa.Column('flue_gas_heat_recovery_system_id', sa.Uuid(), nullable=True), + sa.Column('photovoltaic_panel_id', sa.Uuid(), nullable=True), + sa.Column('wind_turbine_id', sa.Uuid(), nullable=True), + sa.Column('other_details_id', sa.Uuid(), nullable=True), + sa.Column('main_heating_id', sa.Uuid(), nullable=True), + sa.Column('main_heating2_id', sa.Uuid(), nullable=True), + sa.Column('secondary_heating_type_id', sa.Uuid(), nullable=True), + sa.ForeignKeyConstraint(['door_id'], ['door.id'], ), + sa.ForeignKeyConstraint(['ex1_property_id'], ['propertydetail.id'], ), + sa.ForeignKeyConstraint(['ex2_property_id'], ['propertydetail.id'], ), + sa.ForeignKeyConstraint(['ex3_property_id'], ['propertydetail.id'], ), + sa.ForeignKeyConstraint(['ex4_property_id'], ['propertydetail.id'], ), + sa.ForeignKeyConstraint(['flue_gas_heat_recovery_system_id'], ['fluegasheatrecoverysystem.id'], ), + sa.ForeignKeyConstraint(['hot_water_cylinder_id'], ['hotwatercylinder.id'], ), + sa.ForeignKeyConstraint(['lighting_id'], ['lighting.id'], ), + sa.ForeignKeyConstraint(['main_heating2_id'], ['heating.id'], ), + sa.ForeignKeyConstraint(['main_heating_id'], ['heating.id'], ), + sa.ForeignKeyConstraint(['main_property_id'], ['propertydetail.id'], ), + sa.ForeignKeyConstraint(['other_details_id'], ['otherdetails.id'], ), + sa.ForeignKeyConstraint(['photovoltaic_panel_id'], ['photovoltaicpanel.id'], ), + sa.ForeignKeyConstraint(['secondary_heating_type_id'], ['heatingtype.id'], ), + sa.ForeignKeyConstraint(['shower_and_baths_id'], ['showerandbaths.id'], ), + sa.ForeignKeyConstraint(['solar_water_heating_id'], ['solarwaterheating.id'], ), + sa.ForeignKeyConstraint(['ventilation_and_cooling_id'], ['ventilationandcooling.id'], ), + sa.ForeignKeyConstraint(['water_heating_id'], ['waterheating.id'], ), + sa.ForeignKeyConstraint(['wind_turbine_id'], ['windturbine.id'], ), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('windows', + sa.Column('id', sa.Uuid(), nullable=False), + sa.Column('glazing_type', sqlmodel.sql.sqltypes.AutoString(), nullable=False), + sa.Column('area_m2', sa.Float(), nullable=False), + sa.Column('roof_window', sa.Boolean(), nullable=False), + sa.Column('orientation', sqlmodel.sql.sqltypes.AutoString(), nullable=False), + sa.Column('u_value_w_m2_k', sa.Integer(), nullable=False), + sa.Column('g_value', sa.Integer(), nullable=False), + sa.Column('property_detail_id', sa.Uuid(), nullable=True), + sa.ForeignKeyConstraint(['property_detail_id'], ['propertydetail.id'], ), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('presitenote', + sa.Column('id', sa.Uuid(), nullable=False), + sa.Column('summary_info_id', sa.Uuid(), nullable=False), + sa.Column('assessor_id', sa.Uuid(), nullable=False), + sa.Column('pre_site_note_description_id', sa.Uuid(), nullable=True), + sa.ForeignKeyConstraint(['assessor_id'], ['assessorinfo.id'], ), + sa.ForeignKeyConstraint(['pre_site_note_description_id'], ['propertydescription.id'], ), + sa.ForeignKeyConstraint(['summary_info_id'], ['presitenotessummaryinfo.id'], ), + sa.PrimaryKeyConstraint('id') + ) + # ### end Alembic commands ### + + +def downgrade() -> None: + """Downgrade schema.""" + # ### commands auto generated by Alembic - please adjust! ### + op.drop_table('presitenote') + op.drop_table('windows') + op.drop_table('propertydescription') + op.drop_table('documents') + op.drop_table('dimension') + op.drop_table('propertydetail') + op.drop_table('heating') + op.drop_table('assessorinfo') + op.drop_table('windturbine') + op.drop_table('waterheating') + op.drop_table('walls') + op.drop_table('ventilationandcooling') + op.drop_table('solarwaterheating') + op.drop_table('showerandbaths') + op.drop_table('roofs') + op.drop_table('presitenotessummaryinfo') + op.drop_table('photovoltaicpanel') + op.drop_table('otherdetails') + op.drop_table('lighting') + op.drop_table('insulation') + op.drop_table('hotwatercylinder') + op.drop_table('heatingtype') + op.drop_table('heatingsystemcontrols') + op.drop_table('fluegasheatrecoverysystem') + op.drop_table('floors') + op.drop_table('door') + op.drop_table('companyinfo') + op.drop_table('buildings') + # ### end Alembic commands ###