|
| 1 | +"""SQLAlchemy models for users and backtest jobs.""" |
| 2 | +from __future__ import annotations |
| 3 | +import sqlalchemy as sa |
| 4 | +from sqlalchemy import func |
| 5 | +from .db import Base |
| 6 | + |
| 7 | + |
| 8 | +class User(Base): |
| 9 | + __tablename__ = "users" |
| 10 | + |
| 11 | + id = sa.Column(sa.Integer, primary_key=True, index=True) |
| 12 | + username = sa.Column(sa.String(128), unique=True, index=True, nullable=False) |
| 13 | + hashed_password = sa.Column(sa.String(256), nullable=False) |
| 14 | + is_active = sa.Column(sa.Boolean, default=True) |
| 15 | + role = sa.Column(sa.String(32), default="user") |
| 16 | + created_at = sa.Column(sa.DateTime, server_default=func.now()) |
| 17 | + |
| 18 | + |
| 19 | +class BacktestJob(Base): |
| 20 | + __tablename__ = "backtest_jobs" |
| 21 | + |
| 22 | + id = sa.Column(sa.String(64), primary_key=True, index=True) |
| 23 | + user_id = sa.Column(sa.Integer, sa.ForeignKey("users.id"), nullable=True) |
| 24 | + status = sa.Column(sa.String(32), nullable=False, default="queued") |
| 25 | + params = sa.Column(sa.JSON, nullable=True) |
| 26 | + result_path = sa.Column(sa.String(1024), nullable=True) |
| 27 | + created_at = sa.Column(sa.DateTime, server_default=func.now()) |
| 28 | + updated_at = sa.Column(sa.DateTime, server_default=func.now(), onupdate=func.now()) |
0 commit comments