Backend: - service_auto module complet: router, service, schemas, 5 teste suites (22/22 passed) - 5 endpoints: GET /ping, /firme, /tip-deviz, /masini, POST /comenzi - SP_CREEAZA_COMANDA_PROTOTIP creat în MARIUSM_AUTO (VALID, 5.9ms) - oracle_pool.py: session_callback backward-compat patch - ROA_WEB user: grants SP-only confirmate (H3), mariusm_test pool switchat - pyproject.toml: integration pytest marker înregistrat Frontend: - ComandaNoua.vue: date reale din Oracle (firme/tip-deviz/masini), nu hardcodate - src/modules/service-auto/services/api.js: axios service cu Bearer token - src/router/index.js: rută /service-auto/comanda-noua Docs: - decision-log.md: verdict MERGE, toate 6 ipoteze CONFIRMED - learnings.md: 7 patterns reutilizabile - grants-audit.md: arhitectura multi-tenant + proxy auth analysis + V_NOM_FIRME loop - template-modul-oracle.md: rețetă completă pentru module Oracle noi - TODO-phase2.md: 7 items concrete Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2.1 KiB
2.1 KiB
Săpt 5 — session_callback patch: shared/database/oracle_pool.py
Ce s-a schimbat
Patch de ~8 linii la OracleMultiPool.register_server() și _get_or_create_pool() pentru suport session_callback.
register_server (signature nouă)
def register_server(
self,
server_id: str,
host: str,
port: int,
user: str,
password: str,
sid: Optional[str] = None,
service_name: Optional[str] = None,
min_connections: int = 2,
max_connections: int = 10,
session_callback=None, # <-- NOU
**kwargs
) -> None:
session_callback se salvează în _pool_configs[server_id] alături de ceilalți parametri.
_get_or_create_pool (propagare către oracledb.create_pool)
if config.get('session_callback'):
pool_params['session_callback'] = config['session_callback']
Backward compatibility
- Toți callers existenți folosesc parametri named fără
session_callback. - Audit complet cu grep: singurul caller real este
backend/main.py:95— nu transmitesession_callback. - Valoare default
None: dacă lipsește,config.get('session_callback')returneazăNone→ falsy → ramura nu se execută. - Zero callers afectați.
Utilizare: CURRENT_SCHEMA switching
def init_mariusm_schema(connection, requested_tag):
"""Session callback — rulează la fiecare conexiune nouă din pool."""
with connection.cursor() as cursor:
cursor.execute("ALTER SESSION SET CURRENT_SCHEMA = MARIUSM_AUTO")
oracle_pool.register_server(
server_id='mariusm_test',
host='10.0.20.121',
port=1521,
user='ROA_WEB',
password='...',
service_name='ROA',
session_callback=init_mariusm_schema,
)
Callback-ul init_mariusm_schema este invocat de oracledb la fiecare conexiune nouă creată în pool
(nu la fiecare acquire — doar la crearea fizică a conexiunii).
Referințe
shared/database/oracle_pool.py— linii 55–133- python-oracledb docs: Session Callbacks