- Recupera el trabajo revertido (doble propuesta, retainer, niveles, API Python) desde el stash de GitHub Desktop - Dockerfile multi-stage para Next.js (migraciones automáticas al arrancar, seed opcional via RUN_SEED) - docker-compose.coolify.yml: postgres + web + api con healthchecks y SERVICE_FQDN_* - Endpoint público /api/health (verifica BD) para healthchecks - seed.ts parametrizado: conexión DB_* y credenciales SEED_* por entorno (sin passwords hardcodeadas) - .env.example, .dockerignore, uvicorn con --proxy-headers - Limpieza: .xlsx y __pycache__ fuera del repo Co-Authored-By: Claude Fable 5 <[email protected]>
34 lines
685 B
Python
34 lines
685 B
Python
from __future__ import annotations
|
|
|
|
import asyncpg
|
|
|
|
from app.config import settings
|
|
|
|
pool: asyncpg.Pool | None = None
|
|
|
|
|
|
async def init_db() -> None:
|
|
global pool
|
|
pool = await asyncpg.create_pool(
|
|
host=settings.DB_HOST,
|
|
port=settings.DB_PORT,
|
|
user=settings.DB_USER,
|
|
password=settings.DB_PASSWORD,
|
|
database=settings.DB_NAME,
|
|
min_size=5,
|
|
max_size=20,
|
|
)
|
|
|
|
|
|
async def close_db() -> None:
|
|
global pool
|
|
if pool:
|
|
await pool.close()
|
|
pool = None
|
|
|
|
|
|
async def get_pool() -> asyncpg.Pool:
|
|
if pool is None:
|
|
raise RuntimeError("Database pool not initialized. Call init_db() first.")
|
|
return pool
|