feat: database models and alembic migrations — all tables per design

- shared/db.py: async engine + session factory
- shared/models/base.py: DeclarativeBase + TimestampMixin
- shared/models/trading.py: Strategy, Signal, Trade, Position, StrategyWeightHistory
- shared/models/news.py: Article, ArticleSentiment
- shared/models/learning.py: TradeOutcome, LearningAdjustment
- shared/models/auth.py: User, UserCredential
- shared/models/timeseries.py: MarketData, PortfolioSnapshot, StrategyMetric
- Alembic async env.py with initial migration including TimescaleDB hypertables
- 21 model tests covering enums, instantiation, metadata registration
This commit is contained in:
Viktor Barzin 2026-02-22 15:17:07 +00:00
parent ae5b3f89d1
commit 72cb1b6fe5
No known key found for this signature in database
GPG key ID: 0EB088298288D958
23 changed files with 1283 additions and 0 deletions

44
shared/models/__init__.py Normal file
View file

@ -0,0 +1,44 @@
"""Shared SQLAlchemy models — import all models here so Alembic can discover them."""
from shared.models.base import Base, TimestampMixin
from shared.models.trading import (
Signal,
SignalDirection,
Strategy,
StrategyWeightHistory,
Trade,
TradeSide,
TradeStatus,
Position,
)
from shared.models.news import Article, ArticleSentiment
from shared.models.learning import LearningAdjustment, TradeOutcome
from shared.models.auth import User, UserCredential
from shared.models.timeseries import MarketData, PortfolioSnapshot, StrategyMetric
__all__ = [
"Base",
"TimestampMixin",
# Trading
"Strategy",
"Signal",
"SignalDirection",
"Trade",
"TradeSide",
"TradeStatus",
"Position",
"StrategyWeightHistory",
# News
"Article",
"ArticleSentiment",
# Learning
"TradeOutcome",
"LearningAdjustment",
# Auth
"User",
"UserCredential",
# Timeseries
"MarketData",
"PortfolioSnapshot",
"StrategyMetric",
]