Sami Marreed
feat: docker-v1 with optimized frontend
0646b18
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
import os
# Get CRM DB path from DYNACONF environment variable with default
def get_crm_db_path():
"""Get CRM database path from DYNACONF_CRM_DB_PATH or use default."""
env_path = os.getenv("DYNACONF_CRM_DB_PATH")
if env_path:
return os.path.abspath(env_path)
# Default: ${workdir}/crm_tmp/crm_db_default
workdir = os.getcwd()
default_path = os.path.join(workdir, "crm_tmp", "crm_db_default")
return os.path.abspath(default_path)
# Use SQLite for simplicity, but can be easily changed to PostgreSQL
CRM_DB_PATH = get_crm_db_path()
DATABASE_URL = f"sqlite:///{CRM_DB_PATH}"
engine = create_engine(
DATABASE_URL, connect_args={"check_same_thread": False} if "sqlite" in DATABASE_URL else {}
)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
Base = declarative_base()
def get_db():
db = SessionLocal()
try:
yield db
finally:
db.close()
def init_db():
from crm_api.models import Base
# Reset database file on each startup
db_path = CRM_DB_PATH
# Ensure parent directory exists
parent_dir = os.path.dirname(db_path)
if parent_dir:
os.makedirs(parent_dir, exist_ok=True)
if os.path.exists(db_path):
os.remove(db_path)
Base.metadata.create_all(bind=engine)
# Check if we need to seed data
from crm_api.crud import account_crud
db = SessionLocal()
try:
if account_crud.count(db) == 0:
from crm_api.seed_data import seed_database
seed_database(db)
finally:
db.close()