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>
This commit is contained in:
67
docs/service-auto/week5-session-callback.md
Normal file
67
docs/service-auto/week5-session-callback.md
Normal file
@@ -0,0 +1,67 @@
|
||||
# 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 55–133
|
||||
- python-oracledb docs: [Session Callbacks](https://python-oracledb.readthedocs.io/en/latest/user_guide/connection_handling.html#session-callbacks-for-setting-pooled-connections)
|
||||
Reference in New Issue
Block a user