fix telegram
This commit is contained in:
124
deploy-package-20260223-151231/shared/database/README.md
Normal file
124
deploy-package-20260223-151231/shared/database/README.md
Normal file
@@ -0,0 +1,124 @@
|
||||
# ROA2WEB Shared Database Pool
|
||||
|
||||
Sistem de pool de conexiuni Oracle partajat între toate microserviciile ROA2WEB.
|
||||
|
||||
## Componente
|
||||
|
||||
### 📦 oracle_pool.py
|
||||
Clasa singleton `OraclePool` pentru gestionarea pool-ului de conexiuni Oracle.
|
||||
|
||||
### 📋 models.py
|
||||
Modele Pydantic comune:
|
||||
- `User` - Model pentru utilizatori
|
||||
- `Company` - Model pentru firme/scheme Oracle
|
||||
- `DatabaseConfig` - Configurare conexiune database
|
||||
|
||||
### ⚙️ config.py (în utils/)
|
||||
Configurări partajate prin environment variables.
|
||||
|
||||
### ❌ exceptions.py (în utils/)
|
||||
Exception handlers personalizate pentru ROA2WEB.
|
||||
|
||||
## Utilizare
|
||||
|
||||
### Inițializare în aplicații FastAPI
|
||||
|
||||
```python
|
||||
from contextlib import asynccontextmanager
|
||||
from fastapi import FastAPI
|
||||
import sys
|
||||
import os
|
||||
|
||||
# Import shared pool
|
||||
sys.path.append(os.path.join(os.path.dirname(__file__), '../../../shared'))
|
||||
from database.oracle_pool import oracle_pool
|
||||
|
||||
@asynccontextmanager
|
||||
async def lifespan(app: FastAPI):
|
||||
# Startup - inițializare pool
|
||||
await oracle_pool.initialize()
|
||||
print("📊 Oracle pool initialized")
|
||||
|
||||
yield
|
||||
|
||||
# Shutdown - închidere pool
|
||||
await oracle_pool.close_pool()
|
||||
print("📊 Oracle pool closed")
|
||||
|
||||
app = FastAPI(lifespan=lifespan)
|
||||
```
|
||||
|
||||
### Utilizare conexiune în endpoint-uri
|
||||
|
||||
```python
|
||||
from fastapi import APIRouter, HTTPException
|
||||
from database.oracle_pool import oracle_pool
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
@router.get("/companies")
|
||||
async def get_companies():
|
||||
try:
|
||||
async with oracle_pool.get_connection() as conn:
|
||||
with conn.cursor() as cursor:
|
||||
cursor.execute("SELECT schema, firma FROM vdef_util_grup WHERE id_firma <> 0")
|
||||
results = cursor.fetchall()
|
||||
|
||||
companies = []
|
||||
for row in results:
|
||||
companies.append({
|
||||
"code": row[0],
|
||||
"name": row[1]
|
||||
})
|
||||
|
||||
return companies
|
||||
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"Database error: {str(e)}")
|
||||
```
|
||||
|
||||
### Configurare Environment Variables
|
||||
|
||||
```bash
|
||||
# Oracle Database
|
||||
ORACLE_USER=your_oracle_username
|
||||
ORACLE_PASSWORD=your_oracle_password
|
||||
ORACLE_DSN=your_oracle_dsn
|
||||
|
||||
# Pool Settings
|
||||
DB_MIN_CONNECTIONS=2
|
||||
DB_MAX_CONNECTIONS=10
|
||||
DB_CONNECTION_INCREMENT=1
|
||||
|
||||
# JWT (pentru autentificare)
|
||||
JWT_SECRET_KEY=your-super-secret-key
|
||||
ACCESS_TOKEN_EXPIRE_MINUTES=30
|
||||
```
|
||||
|
||||
## Testare
|
||||
|
||||
Pentru a testa pool-ul de conexiuni:
|
||||
|
||||
```bash
|
||||
cd roa2web/shared/database
|
||||
python test_pool.py
|
||||
```
|
||||
|
||||
**Notă**: Testul necesită configurarea variabilelor de environment pentru Oracle.
|
||||
|
||||
## Caracteristici
|
||||
|
||||
✅ **Singleton Pattern** - O singură instanță de pool pentru toată aplicația
|
||||
✅ **Async Context Manager** - Gestionare automată a conexiunilor
|
||||
✅ **Connection Pooling** - Performanță optimizată prin reutilizarea conexiunilor
|
||||
✅ **Configurabil** - Setări flexibile prin environment variables
|
||||
✅ **Logging** - Urmărirea operațiilor de pool
|
||||
✅ **Error Handling** - Excepții personalizate pentru debugging
|
||||
|
||||
## Următorii Pași
|
||||
|
||||
👉 **ZIUA 3**: Implementarea sistemului JWT partajat (`shared/auth/`)
|
||||
|
||||
---
|
||||
|
||||
*Documentație generată pentru ROA2WEB Shared Database Pool - ZIUA 2* 🚀
|
||||
Reference in New Issue
Block a user