Files
roa2web-service-auto/docs/service-auto/week5-session-callback.md
Claude Agent 32aca55c78 feat(service-auto): săpt 3-phase2 — toate ipotezele confirmate + modul funcțional
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>
2026-06-05 09:37:09 +00:00

68 lines
2.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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ă)
```python
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`)
```python
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 transmite `session_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
```python
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 55133
- python-oracledb docs: [Session Callbacks](https://python-oracledb.readthedocs.io/en/latest/user_guide/connection_handling.html#session-callbacks-for-setting-pooled-connections)