From 880329bb8e051c2e9f1652413323c0ce8f906bfc Mon Sep 17 00:00:00 2001 From: Gustavo Date: Thu, 13 Aug 2026 09:45:26 -0300 Subject: [PATCH] feat: factory de conexao MySQL --- app/db/__init__.py | 0 app/db/connection.py | 22 ++++++++++++++++++++++ tests/test_db_connection.py | 17 +++++++++++++++++ 3 files changed, 39 insertions(+) create mode 100644 app/db/__init__.py create mode 100644 app/db/connection.py create mode 100644 tests/test_db_connection.py diff --git a/app/db/__init__.py b/app/db/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/app/db/connection.py b/app/db/connection.py new file mode 100644 index 0000000..7614801 --- /dev/null +++ b/app/db/connection.py @@ -0,0 +1,22 @@ +""" +Única porta de entrada para conexão MySQL do painel. Todo módulo em +app/db/*.py chama get_connection() daqui — nunca abre pymysql.connect() +por conta própria. +""" +import os + +import pymysql +import pymysql.cursors + + +def get_connection() -> pymysql.connections.Connection: + """Abre uma conexão nova por requisição (escala MVP; sem pool).""" + return pymysql.connect( + host=os.environ["DB_HOST"], + port=int(os.environ.get("DB_PORT", "3306")), + user=os.environ["DB_USER"], + password=os.environ["DB_PASSWORD"], + database=os.environ["DB_NAME"], + cursorclass=pymysql.cursors.DictCursor, + autocommit=True, + ) diff --git a/tests/test_db_connection.py b/tests/test_db_connection.py new file mode 100644 index 0000000..f5ddef8 --- /dev/null +++ b/tests/test_db_connection.py @@ -0,0 +1,17 @@ +""" +Requer o container de dev rodando (licenciamento-mysql-dev, porta 3307 — +ver licenciamento-n8n/docs/configurar-banco-sistema.md). tests/conftest.py +já configura as env vars de conexão com os mesmos defaults do .env.example. +""" +from app.db.connection import get_connection + + +def test_conexao_abre_e_consulta(): + conn = get_connection() + try: + with conn.cursor() as cur: + cur.execute("SELECT 1 AS um") + row = cur.fetchone() + assert row == {"um": 1} + finally: + conn.close()