mirror of
https://github.com/hoshikawa2/first_contas.git
synced 2026-07-10 02:34:20 +00:00
first commit
This commit is contained in:
51
legacy_reference/workflows/repositories/db_repo.py
Normal file
51
legacy_reference/workflows/repositories/db_repo.py
Normal file
@@ -0,0 +1,51 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import json
|
||||
from typing import Any, Protocol
|
||||
|
||||
from agente_contas_tim.workflows.contracts import WorkflowDef
|
||||
from agente_contas_tim.workflows.exceptions import WorkflowNotFoundError
|
||||
|
||||
|
||||
class DbConnection(Protocol):
|
||||
def execute(self, query: str, params: tuple[Any, ...]): ...
|
||||
|
||||
|
||||
class DbWorkflowRepository:
|
||||
"""Repositório de workflow em banco.
|
||||
|
||||
Espera schema lógico:
|
||||
workflow_definitions(name, version, status, definition_json)
|
||||
workflow_active(name, version)
|
||||
"""
|
||||
|
||||
def __init__(self, connection: DbConnection) -> None:
|
||||
self._connection = connection
|
||||
|
||||
def get_active(self, name: str) -> WorkflowDef:
|
||||
row = self._connection.execute(
|
||||
(
|
||||
"SELECT d.definition_json "
|
||||
"FROM workflow_active a "
|
||||
"JOIN workflow_definitions d "
|
||||
" ON d.name = a.name AND d.version = a.version "
|
||||
"WHERE a.name = %s"
|
||||
),
|
||||
(name,),
|
||||
).fetchone()
|
||||
if row is None:
|
||||
raise WorkflowNotFoundError(f"Workflow {name!r} ativo não encontrado")
|
||||
return WorkflowDef.model_validate(json.loads(row[0]))
|
||||
|
||||
def get_version(self, name: str, version: int) -> WorkflowDef:
|
||||
row = self._connection.execute(
|
||||
(
|
||||
"SELECT definition_json "
|
||||
"FROM workflow_definitions "
|
||||
"WHERE name = %s AND version = %s"
|
||||
),
|
||||
(name, version),
|
||||
).fetchone()
|
||||
if row is None:
|
||||
raise WorkflowNotFoundError(f"Workflow {name!r} v{version} não encontrado")
|
||||
return WorkflowDef.model_validate(json.loads(row[0]))
|
||||
Reference in New Issue
Block a user