File size: 3,690 Bytes
7ad8558
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
from pathlib import Path

from sqlalchemy import create_engine, inspect, text
from sqlalchemy.orm import DeclarativeBase, sessionmaker


BASE_DIR = Path(__file__).resolve().parent.parent
DATA_DIR = BASE_DIR / "data"
DATA_DIR.mkdir(parents=True, exist_ok=True)
DATABASE_URL = f"sqlite:///{DATA_DIR / 'app.db'}"


class Base(DeclarativeBase):
    pass


engine = create_engine(DATABASE_URL, connect_args={"check_same_thread": False})
SessionLocal = sessionmaker(bind=engine, autoflush=False, autocommit=False)


def get_db():
    db = SessionLocal()
    try:
        yield db
    finally:
        db.close()


def ensure_property_schema() -> None:
    inspector = inspect(engine)
    if "properties" not in inspector.get_table_names():
        return

    existing_columns = {column["name"] for column in inspector.get_columns("properties")}
    migrations = {
        "num_bloco": "ALTER TABLE properties ADD COLUMN num_bloco VARCHAR(30)",
        "num_inscricao": "ALTER TABLE properties ADD COLUMN num_inscricao VARCHAR(30)",
        "cod_endloc_logradouro": "ALTER TABLE properties ADD COLUMN cod_endloc_logradouro VARCHAR(30)",
        "nme_endloc_logradouro": "ALTER TABLE properties ADD COLUMN nme_endloc_logradouro VARCHAR(150)",
        "num_endloc_endereco": "ALTER TABLE properties ADD COLUMN num_endloc_endereco VARCHAR(30)",
        "num_endloc_unidade": "ALTER TABLE properties ADD COLUMN num_endloc_unidade VARCHAR(30)",
        "nme_endloc_bairro_cdl": "ALTER TABLE properties ADD COLUMN nme_endloc_bairro_cdl VARCHAR(120)",
        "rh_nome": "ALTER TABLE properties ADD COLUMN rh_nome VARCHAR(80)",
        "rh_valor": "ALTER TABLE properties ADD COLUMN rh_valor FLOAT",
        "coord_x": "ALTER TABLE properties ADD COLUMN coord_x FLOAT",
        "coord_y": "ALTER TABLE properties ADD COLUMN coord_y FLOAT",
        "ano_exercicio": "ALTER TABLE properties ADD COLUMN ano_exercicio FLOAT",
        "num_versao": "ALTER TABLE properties ADD COLUMN num_versao FLOAT",
        "idf_reg_regiao_homogenea": "ALTER TABLE properties ADD COLUMN idf_reg_regiao_homogenea FLOAT",
        "area_total_detalhe": "ALTER TABLE properties ADD COLUMN area_total_detalhe VARCHAR(1000)",
        "area_privativa_detalhe": "ALTER TABLE properties ADD COLUMN area_privativa_detalhe VARCHAR(1000)",
        "latitude": "ALTER TABLE properties ADD COLUMN latitude FLOAT",
        "longitude": "ALTER TABLE properties ADD COLUMN longitude FLOAT",
        "finalidade_oferta": "ALTER TABLE properties ADD COLUMN finalidade_oferta VARCHAR(50)",
        "area_total_oferta": "ALTER TABLE properties ADD COLUMN area_total_oferta FLOAT",
        "area_privativa_oferta": "ALTER TABLE properties ADD COLUMN area_privativa_oferta FLOAT",
        "valor_oferta": "ALTER TABLE properties ADD COLUMN valor_oferta FLOAT",
        "descricao_oferta": "ALTER TABLE properties ADD COLUMN descricao_oferta TEXT",
        "observacao": "ALTER TABLE properties ADD COLUMN observacao TEXT",
        "url": "ALTER TABLE properties ADD COLUMN url TEXT",
        "imobiliaria": "ALTER TABLE properties ADD COLUMN imobiliaria VARCHAR(150)",
        "codigo": "ALTER TABLE properties ADD COLUMN codigo VARCHAR(80)",
        "infra": "ALTER TABLE properties ADD COLUMN infra TEXT",
        "padrao": "ALTER TABLE properties ADD COLUMN padrao VARCHAR(80)",
        "conservacao": "ALTER TABLE properties ADD COLUMN conservacao VARCHAR(80)",
        "vaga": "ALTER TABLE properties ADD COLUMN vaga VARCHAR(80)",
    }

    with engine.begin() as connection:
        for column_name, statement in migrations.items():
            if column_name not in existing_columns:
                connection.execute(text(statement))