Skip to content

Documentação do projeto:

Bases: BaseModel

Modelo de dados para as vendas.

Parameters:

Name Type Description Default
email EmailStr

email do comprador

required
data datetime

data da compra

required
valor PositiveFloat

valor da compra

required
quantidade PositiveInt

quantidade de produtos

required
produto Produto

categoria do produto

required
Source code in src/contract.py
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
class Vendas(BaseModel):
    """
    Modelo de dados para as vendas.

    Args:
        email (EmailStr): email do comprador
        data (datetime): data da compra
        valor (PositiveFloat): valor da compra
        quantidade (PositiveInt): quantidade de produtos
        produto (Produto): categoria do produto
    """

    email: EmailStr
    data: datetime
    valor: PositiveFloat
    quantidade: PositiveInt
    produto: Produto

Salva os dados validados no PostgreSQL.

Source code in src/database.py
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
def salvar_no_postgres(dados: Vendas):
    """
    Salva os dados validados no PostgreSQL.
    """
    try:
        # Conecta ao banco de dados
        conn = psycopg2.connect(
            host=DB_HOST, database=DB_NAME, user=DB_USER, password=DB_PASS
        )
        cursor = conn.cursor()

        # Insere os dados na tabela de vendas
        insert_query = sql.SQL(
            "INSERT INTO vendas (email, data, valor, quantidade, produto) VALUES (%s, %s, %s, %s, %s)"
        )
        cursor.execute(
            insert_query,
            (
                dados.email,
                dados.data,
                dados.valor,
                dados.quantidade,
                dados.produto.value,
            ),
        )
        conn.commit()
        cursor.close()
        conn.close()
        print("Dados salvos com sucesso no banco de dados!")
    except Exception as e:
        raise Exception(f"Erro ao salvar no banco de dados: {e}")

Cria a tabela de vendas no PostgreSQL.

Source code in src/database.py
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
def criar_tabela_vendas():
    """
    Cria a tabela de vendas no PostgreSQL.
    """
    try:
        # Conecta ao banco de dados
        conn = psycopg2.connect(
            host=DB_HOST, database=DB_NAME, user=DB_USER, password=DB_PASS
        )
        cursor = conn.cursor()

        # Cria a tabela de vendas
        create_table_query = sql.SQL(
            """
            CREATE TABLE IF NOT EXISTS vendas (
                id SERIAL PRIMARY KEY,
                email VARCHAR(255) NOT NULL,
                data TIMESTAMP WITHOUT TIME ZONE NOT NULL,
                valor NUMERIC(10, 2) NOT NULL,
                quantidade INTEGER NOT NULL,
                produto VARCHAR(255) NOT NULL
            )
            """
        )
        cursor.execute(create_table_query)
        conn.commit()
        cursor.close()
        conn.close()
    except Exception as e:
        raise Exception(f"Erro ao criar a tabela de vendas: {e}")

Salva uma lista de objetos Vendas no PostgreSQL em um único lote.

Source code in src/database.py
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
def salvar_no_postgres_em_lote(vendas: list[Vendas]):
    """
    Salva uma lista de objetos Vendas no PostgreSQL em um único lote.
    """
    try:
        # Conecta ao banco de dados
        conn = psycopg2.connect(
            host=DB_HOST, database=DB_NAME, user=DB_USER, password=DB_PASS
        )
        cursor = conn.cursor()

        # Prepara os valores para inserção em lote
        values = [
            (
                venda.email,
                venda.data,
                venda.valor,
                venda.quantidade,
                venda.produto.value,
            )
            for venda in vendas
        ]

        # Insere os dados na tabela de vendas em lote
        insert_query = sql.SQL(
            "INSERT INTO vendas (email, data, valor, quantidade, produto) VALUES %s"
        )
        execute_values(cursor, insert_query, values)
        conn.commit()
        cursor.close()
        conn.close()

        return True
    except Exception as e:
        raise Exception(f"Erro ao salvar no banco de dados: {e}")
        return False

Deleta todos os dados da tabela de vendas no PostgreSQL.

Source code in src/database.py
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
def delete_all_sales_data():
    """
    Deleta todos os dados da tabela de vendas no PostgreSQL.
    """
    try:
        # Conecta ao banco de dados
        conn = psycopg2.connect(
            host=DB_HOST, database=DB_NAME, user=DB_USER, password=DB_PASS
        )
        cursor = conn.cursor()

        # Deleta todos os dados da tabela de vendas
        delete_query = sql.SQL("DELETE FROM vendas")
        cursor.execute(delete_query)
        conn.commit()
        cursor.close()
        conn.close()

        return True
    except Exception as e:
        return False, f"Erro ao deletar os dados do banco de dados: {e}"