diff --git a/.github/workflows/ci_tests.yml b/.github/workflows/ci_tests.yml index 754e540b..be0963ae 100644 --- a/.github/workflows/ci_tests.yml +++ b/.github/workflows/ci_tests.yml @@ -21,3 +21,14 @@ jobs: run: make build - name: Run tests run: make tests + - name: Debug failure + if: failure() + run: | + echo "=== Docker Compose Services ===" + docker compose ps + echo + echo "=== Logs for api-pgd ===" + docker compose logs api-pgd || true + echo + echo "=== Logs for all containers ===" + docker compose logs || true diff --git a/release-notes.md b/release-notes.md index 23d15135..29b990d5 100644 --- a/release-notes.md +++ b/release-notes.md @@ -1,5 +1,9 @@ # Release notes +## 3.3.6 +* Add audit table for registering database operations (INSERT/UPDATE/DELETE) +* Hotfix: Refactor update_planos to ensure proper transaction handling + ## 3.3.5 * Use transaction mode in update_plano_trabalho and update_plano_entregas diff --git a/requirements.txt b/requirements.txt index a5b99d8c..e8a746c7 100644 --- a/requirements.txt +++ b/requirements.txt @@ -6,6 +6,7 @@ pydantic[email]==2.8.2 pytest==8.2.2 httpx==0.27.0 python-jose[cryptography]==3.3.0 -passlib[bcrypt]==1.7.4 +passlib==1.7.4 +bcrypt==4.0.1 python-multipart==0.0.9 fastapi-mail==1.4.1 diff --git a/src/crud.py b/src/crud.py index ac59365e..8fa0ce74 100644 --- a/src/crud.py +++ b/src/crud.py @@ -157,7 +157,6 @@ async def _build_plano_trabalho_model( f" matricula_siape: {plano_trabalho.matricula_siape}\n" f" cod_unidade_lotacao: {plano_trabalho.cod_unidade_lotacao_participante}" ) - session.add(db_participante) db_participante.planos_trabalho.append(db_plano) @@ -274,13 +273,14 @@ async def update_plano_trabalho( ) session.add(db_plano_atualizado) try: - await session.refresh(db_plano_atualizado) + await session.flush() except IntegrityError as e: raise HTTPException( status_code=422, detail="Alteração rejeitada por violar regras de integridade", ) from e - return schemas.PlanoTrabalhoSchema.model_validate(db_plano_atualizado) + await session.refresh(db_plano_atualizado) + return schemas.PlanoTrabalhoSchema.model_validate(db_plano_atualizado) async def get_plano_entregas( @@ -469,8 +469,11 @@ async def update_plano_entregas( for entrega in db_plano_entregas_atualizado.entregas: session.add(entrega) + session.add(db_plano_entregas_atualizado) + await session.flush() + await session.refresh(db_plano_entregas_atualizado) return schemas.PlanoEntregasSchema.model_validate(db_plano_entregas_atualizado)