This repository has been archived on 2025-09-17. You can view files and clone it, but cannot push or open issues or pull requests.
api_firebird/api/v1/models/caixa/c_caixa_item_model.py
2025-06-28 20:09:55 -03:00

128 lines
No EOL
4.1 KiB
Python

# models/c_caixa_item_model.py
from firebird.driver.types import DatabaseError # Importe esta exceção específica
from core.database import get_connection
# Se você tiver core.configs, pode ser útil para logs ou configurações
# from core.configs import settings
class CCaixaItemModel:
"""
Classe responsável por interagir diretamente com o banco de dados Firebird.
Nenhuma validação ou sanitização deve ser feita aqui.
"""
@staticmethod
def get_by_id(caixa_item_id: int) -> dict | None:
"""
Retorna um usuário com base no ID, ou None se não encontrado.
Lança exceções em caso de falha no banco de dados.
"""
conn = None
cur = None
try:
conn = get_connection()
cur = conn.cursor()
cur.execute("""
SELECT CAIXA_ITEM_ID,
DESCRICAO,
DATA_PAGAMENTO,
VALOR_SERVICO,
VALOR_PAGO,
APRESENTANTE
FROM C_CAIXA_ITEM
WHERE CAIXA_ITEM_ID = ?
""", (caixa_item_id,))
row = cur.fetchone()
if row:
return {
"caixa_item_id": row[0],
"descricao": row[1],
"data_pagamento": row[2],
"valor_servico": row[3],
"valor_pago": row[4],
"apresentante": row[5],
}
return None
except DatabaseError as e:
print(f"Database error in get_by_id: {e}")
raise RuntimeError(f"Erro ao buscar item por ID no banco de dados: {e}")
except Exception as e:
print(f"Unexpected error in get_by_id: {e}")
raise RuntimeError(f"Erro inesperado ao buscar item por ID: {e}")
finally:
if cur:
cur.close()
if conn:
conn.close()
@staticmethod
def count_items() -> int:
"""
Retorna a quantidade de usuários.
"""
try:
conn = get_connection()
cur = conn.cursor()
cur.execute("SELECT COUNT(*) FROM C_CAIXA_ITEM")
total = cur.fetchone()[0]
return total
except Exception as e:
raise RuntimeError(f"Erro ao contar itens: {e}")
finally:
if cur:
cur.close()
if conn:
conn.close()
@staticmethod
def get_all_caixa_itens(skip: int = 0, limit: int = 10) -> list[dict]:
"""
Retorna todos os itens cadastrados no banco de dados.
Lança exceções em caso de falha no banco de dados.
"""
conn = None
cur = None
try:
conn = get_connection()
cur = conn.cursor()
query = f"""
SELECT FIRST {limit} SKIP {skip}
CAIXA_ITEM_ID,
DESCRICAO,
DATA_PAGAMENTO,
VALOR_SERVICO,
VALOR_PAGO,
APRESENTANTE
FROM C_CAIXA_ITEM
ORDER BY CAIXA_ITEM_ID
"""
cur.execute(query)
rows = cur.fetchall()
return [
{
"caixa_item_id": r[0],
"descricao": r[1],
"data_pagamento": r[2],
"valor_servico": r[3],
"valor_pago": r[4],
"apresentante": r[5],
}
for r in rows
]
except DatabaseError as e:
print(f"Database error in get_all: {e}")
raise RuntimeError(f"Erro ao buscar todos os itens no banco de dados: {e}")
except Exception as e:
print(f"Unexpected error in get_all: {e}")
raise RuntimeError(f"Erro inesperado ao buscar todos os itens: {e}")
finally:
if cur:
cur.close()
if conn:
conn.close()