Initial Switch to V2. Completely Overhauled Backend, Frontend and General Structure.
This commit is contained in:
@@ -208,6 +208,7 @@ async def init_db():
|
||||
"ALTER TABLE crm_quotation_items ADD COLUMN description_en TEXT",
|
||||
"ALTER TABLE crm_quotation_items ADD COLUMN description_gr TEXT",
|
||||
"ALTER TABLE built_melodies ADD COLUMN is_builtin INTEGER NOT NULL DEFAULT 0",
|
||||
"ALTER TABLE crm_quotations ADD COLUMN global_vat_percent REAL NOT NULL DEFAULT 24",
|
||||
]
|
||||
for m in _migrations:
|
||||
try:
|
||||
|
||||
23
backend/database/models.py
Normal file
23
backend/database/models.py
Normal file
@@ -0,0 +1,23 @@
|
||||
from database.postgres import Base # noqa: F401 — Base must be imported for Alembic autogenerate
|
||||
|
||||
# Import all ORM models here so Alembic autogenerate detects them.
|
||||
# Add each new model file as it is created.
|
||||
|
||||
# --- Existing ---
|
||||
from notes.orm import Entry, EntryLink # noqa: F401
|
||||
from tickets.orm import SupportTicket, TicketMessage # noqa: F401
|
||||
|
||||
# --- Phase 0 ---
|
||||
from shared.orm import MigrationRun, AuditLog # noqa: F401
|
||||
from crm.orm import ( # noqa: F401
|
||||
CrmProduct, CrmCustomer, CrmOrder,
|
||||
CrmCommsLog, CrmMedia, CrmSyncState,
|
||||
CrmQuotation, CrmQuotationItem,
|
||||
)
|
||||
from staff.orm import Staff # noqa: F401
|
||||
from settings.orm import ConsoleSetting, PublicFeature # noqa: F401
|
||||
from melodies.orm import MelodyDraft, BuiltMelody # noqa: F401
|
||||
from manufacturing.orm import MfgAuditLog # noqa: F401
|
||||
from devices.orm import DeviceAlert # noqa: F401
|
||||
# NOTE: device_logs, commands, heartbeats are partitioned/raw-SQL tables —
|
||||
# they are NOT ORM models and are created via op.execute() in the migration.
|
||||
16
backend/database/postgres.py
Normal file
16
backend/database/postgres.py
Normal file
@@ -0,0 +1,16 @@
|
||||
from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession, async_sessionmaker
|
||||
from sqlalchemy.orm import DeclarativeBase
|
||||
from config import settings
|
||||
|
||||
engine = create_async_engine(settings.database_url, pool_size=10, echo=False)
|
||||
AsyncSessionLocal = async_sessionmaker(engine, class_=AsyncSession, expire_on_commit=False)
|
||||
|
||||
|
||||
class Base(DeclarativeBase):
|
||||
pass
|
||||
|
||||
|
||||
async def get_pg_session() -> AsyncSession:
|
||||
"""FastAPI dependency — yields a DB session and closes it after the request."""
|
||||
async with AsyncSessionLocal() as session:
|
||||
yield session
|
||||
Reference in New Issue
Block a user